sql优化

3分钟配置zabbix 监控mysql

大兔子大兔子 提交于 2020-03-24 18:13:02
月小升在mysql的配置上卡了3天,原因一方面不熟悉,一方面我昨天18:00配置完毕,半天没有数据,就绝望的关闭了,我昨天晚上还在纠结要不要继续研究,今天打开一看,数据图表都有了。原来mysql的监控,需要一点时间来生效。 当知道了正确的办法,我在另一台服务器配置,其实只需要3分钟 关联mysql模版 步骤:配置 > 主机 > 点击主机的主机 > 模版 见图 转存失败 重新上传 取消 点击那个模版进去看看模版的描述 Requirements for template operation: 1.Install Zabbix agent and MySQL client. 2.Copy Template_DB_MySQL.conf into folder with Zabbix agent configuration (/etc/zabbix/zabbix_agentd.d/ by default). Don't forget restart zabbix-agent. 3.Create MySQL user for monitoring. For example: CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY '<password>'; GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES

mysql查询优化笔记

与世无争的帅哥 提交于 2020-03-24 14:20:08
1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:   select id from t where num is null   可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:   select id from t where num=0 3、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 4、应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:   select id from t where num=10 or num=20   可以这样查询:   select id from t where num=10   union all   select id from t where num=20 5、in 和 not in 也要慎用,否则会导致全表扫描,如:   select id from t where num in(1,2,3)   对于连续的数值,能用 between 就不要用 in 了:   select id from t where num between 1 and 3 6

Oracle数据库的性能调整

僤鯓⒐⒋嵵緔 提交于 2020-03-24 14:18:05
oracle是一个高性能数据库软件。用户可以通过参数的调整,达到性能的优化。性能优化主要分为两部分:一是数据库管理员通过对系统参数的调整达到优化的目的,二是开发人员通过对应用程序的优化达到调整的目的。   在此,仅就系统参数的调整进行探讨,而不涉及应用程序的优化。对系统参数的调整,可以分为以下几个部分:   (1)调整内存分配   系统全局区(SGA)是一个分配给ORACLE 包含ORACLE 数据库实例控制信息的内存段。SGA的大小对系统性能的影响极大,其缺省参数设置只适用于配置很低的计算机,不适应收入系统现有设备的需要。这些参数若不作调整,会对系统资源造成巨大浪费。就收入系统的Alpha 1200而言,SGA的大小以160兆左右为宜。   初始化参数文件中的一些参数对SGA的大小有决定性的影响。参数DB-BLOCK-BUFFERS(SGA中存储区高速缓存的缓冲区数目),参数SHARED-POOL-SIZE(分配给共享SQL区的字节数),是SGA大小的主要影响者。   DB-BLOCK-BUFFERS参数是SGA大小和数据库性能的最重要的决定因素。该值较高,可以提高系统的命中率,减少I/O。每个缓冲区的大小等于参数DB-BLOCK-SIZE的大小。ORACLE数据库块以字节表示大小。   Oracle SGA区共享池部分由库高速缓存、字典高速缓存及其他一些用户和服务器会话信息组成

MySQL去重显示指定字段信息

大兔子大兔子 提交于 2020-03-24 13:50:59
在使用MYSQL的select distinct name from table语句时,输出的只是去重之后name字段的信息,而希望的是能够输出考生ID、考试时间、考试成绩等的信息。使用 select distinct name, sorce from table 结果发现去重不起作用,因为MYSQL认为要sorce和name同时重复才会去除。 最终解决办法如下: select *, count(distinct name) from table group by name 如果SQL语句还有limit,order by等条件,必须放在group by后面。 这样就达到了既去重,又能够输出更多字段信息的目的. SELECT语句,去除某个字段的重复信息 ,例如: 表名:table id uid username message dateline 1 6  a    111    1284240714(时间戳) 2 6  a    222    1268840565 3 8  b    444    1266724527 4 9  c    555    1266723391 执行语句(去除username字段重复信息并按时间排序): SELECT * FROM table a INNER JOIN ( SELECT max( dateline ) AS dateline FROM

mysql 的sleep线程过多处理方法

房东的猫 提交于 2020-03-24 08:35:20
什么是长连接? 其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。 通常的短连接操作步骤是: 连接-》数据传输-》关闭连接 ; 而长连接通常就是: 连接-》数据传输-》保持连接-》数据传输-》保持连接-》…………-》关闭连接 ; 这就要求长连接在没有数据通信时,定时发送数据包,以维持连接状态,短连接在没有数据传输时直接关闭就行了 什么时候用长连接,短连接? 长连接主要用于在 少数 客户端与服务端的 频繁 通信,因为这时候如果用短连接频繁通信常会发生Socket出错,并且频繁创建Socket连接也是对资源的浪费。 但是对于服务端来说,长连接也会耗费一定的资源,需要专门的线程(unix下可以用进程管理)来负责维护连接状态。 总之,长连接和短连接的选择要视情况而定。 首先,如果使用了长连接而长期没有对数据库进行任何操作,那么在timeout值后,mysql server就会关闭此连接,而客户端在执行查询的时候就会得到一个类似于“MySQL server has gone away“这样的错误。 在使用mysql_real_connect连接数据库之后,再使用mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) 来设置为自动重连。这样当mysql连接丢失的时候,使用mysql_ping能够自动重连数据库

Performance analysis of SQL server disk I / O

馋奶兔 提交于 2020-03-24 04:54:29
IO 是sql server最重要的资源, 在生产环境下数据库的sqlserver服务启动后一个星期,就可以通过dmv来分析优化。MS SQL Server提供了一些动态管理视图和函数供我们分析磁盘I/O性能。 一.按照物理读的页面数排序 前50名 SELECT TOP 50 qs.total_physical_reads,qs.execution_count, qs.total_physical_reads/qs.execution_count AS [avg I/O], qs. creation_time, qs.max_elapsed_time, qs.min_elapsed_time, SUBSTRING(qt.text,qs.statement_start_offset/2, (CASE WHEN qs.statement_end_offset=-1 THEN LEN(CONVERT(NVARCHAR(max),qt.text)) 2 ELSE qs.statement_end_offset END -qs.statement_start_offset)/2) AS query_text, qt.dbid,dbname=DB_NAME(qt.dbid), qt.objectid, qs.sql_handle, qs.plan_handle from sys.dm_exec

mysql优化问题

醉酒当歌 提交于 2020-03-23 21:59:12
mysql关键字执行顺序 from > on > join > where > group by > having > select > distinct > union > order by mysql索引类型 1.普通索引,是最基本的索引,它没有任何限制。 (1)直接创建索引 CREATE INDEX index_name ON table(column(length)) (2)修改表结构的方式添加索引 ALTER TABLE table_name ADD INDEX index_name ON (column(length)) (3)创建表的时候同时创建索引 CREATE TABLE `table` ( `id` int(11) NOT NULL AUTO_INCREMENT , `title` char(255) CHARACTER NOT NULL , `content` text CHARACTER NULL , `time` int(10) NULL DEFAULT NULL , PRIMARY KEY (`id`), INDEX index_name (title(length)) ) (4)删除索引 DROP INDEX index_name ON table 2.唯一索引,与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引

工作三年了,该报多少工资?

天大地大妈咪最大 提交于 2020-03-23 19:48:05
  本人自从毕业后都在长沙工作,工资待遇一直都很一般,到现在才3500/月,做的项目都是些中小型的项目,没干过什么大项目,平时工作也不是很忙,也没在项目当中学习过什么很牛逼的技术,有时间自己也自学了不少,就想以后走人能够找份好工作,最近想打算辞职去广州或者深圳,谋得一份好工作,也不想非得要很高的工资,想听听大家的建议,得开都少工资才合适?下面提供我自己简历的掌握技术的那一部分: 熟悉基于 C# 的 B/S 和 C/S 模式开发。 熟悉Javascript,Jquery 等脚本开发语言和框架。 熟悉 Linq , Asp.net Ajax , Asp.net 服务器端控件开发。 熟悉 C# 设计模式。 了解 CLR(都是在CLR Via C#书上学的) 熟悉 MVC , EF 。 熟悉 SQLServer2005 数据库,精通 SQL 语句 ,存储过程和触发器的编写。 熟悉 SQL 语句的查询优化,有较强的数据分析能力。 请各位帮忙建议下,在此谢过!!! 来源: https://www.cnblogs.com/chenlinfei/p/3200349.html

读懂MySQL执行计划

让人想犯罪 __ 提交于 2020-03-23 18:51:14
原文:https://mp.weixin.qq.com/s/-BlLvBKcF-yalELY7XkqaQ 前言 在之前的面试过程中,问到执行计划,有很多童鞋不知道是什么?甚至将执行计划与执行时间认为是同一个概念。今天我们就一起来了解一下执行计划到底是什么?有什么用途? 执行计划是什么? 执行计划,简单的来说,是SQL在数据库中执行时的表现情况,通常用于SQL性能分析,优化等场景。在MySQL中使用 explain 关键字来查看。如下所示: 1.查询t_base_user select * from t_base_user where name="andyqian"; 2.查看上述语句的执行计划 explain select * from t_base_user where name="andyqian"; 执行查看上述2语句后,我们可以得出以下执行计划 上面这个执行计划给到的信息是: 这是一个简单的SQL,全表扫描,共扫描1行,Using where条件在t_base_user表中筛选出记录。发现该语句并没有走索引,为什么是这样的呢?别急,我们紧接着看下一节。上面执行计划是什么意思呢?有什么参考价值呢? 读懂执行计划 通过上面,我们知道了什么是执行计划,也看到了执行计划到底是什么东西,现在我们来具体了解一下,MySQL执行计划中,每个属性代表的是什么意思? 我们一一来介绍

MySQL的explain

早过忘川 提交于 2020-03-23 18:46:59
Select_type:所使用的查询类型,主要有以下这几种查询类型。 DEPENDENT SUBQUERY:子查询内层的第一个SELECT,依赖于外部查询的结果集。 DEPENDENT UNION:子查询中的UNION,且为UNION中从第二个SELECT开始的后面所有SELECT,同样依赖于外部查询的结果集。 PRIMARY:子查询中的最外层查询,注意并不是主键查询。 SIMPLE:除子查询或UNION之外的其他查询。 SUBQUERY:子查询内层查询的第一个SELECT,结果不依赖于外部查询结果集。 UNCACHEABLE SUBQUERY:结果集无法缓存的子查询。 UNION:UNION语句中第二个SELECT开始后面的所有SELECT,第一个SELECT为PRIMARY。 UNION RESULT:UNION 中的合并结果。 Table:显示这一步所访问的数据库中的表的名称。 Type:告诉我们对表使用的访问方式,主要包含如下集中类型。 all:全表扫描。 const:读常量,最多只会有一条记录匹配,由于是常量,实际上只须要读一次。 eq_ref:最多只会有一条匹配结果,一般是通过主键或唯一键索引来访问。 fulltext:进行全文索引检索。 index:全索引扫描。 index_merge:查询中同时使用两个(或更多)索引,然后对索引结果进行合并(merge)