1. 以root用户登入mysql,执行如下语句开启慢查询日志:
set global slow_query_log=1;
set long_query_time=3;
注: 以上设置为临时的,重启就没了,如果需要长期打开慢查询日志可以在配置
文件my.cnf中加入如下:
[mysqld]
--slow_query_log[={0|1}
//0为关闭,1为开启,默认为0
--long_query_time= n
//n为慢查询的标准时间,默认为10,这个参数建议不
再配置文件中设置而直接使用默认值, 然后根据实际需求在mysql客户端中使用
set long_query_time=m 来动态设置
2. 开启测试程序, 在进行完第一步之后,需要把之前的应用到mysql的连接重连
下,以使设置对新会话生效。
3. 执行完业务之后,查看慢查询日志:
a. 如果不知道慢查询日志的位置,在mysql命令行客户端执行如下命令:
show variables like "�tadir%";
可以查看到当前mysql的数据目录。
进入该目录,文件名末尾是slow.log的文件就是慢查询日志文件
b. 然后在shell中执行如下命令
mysqldumpslow -s c -r 10 慢查询日志文件
//上面这个命令可以把出现次数最多的10种类型的慢查询显示出来,如果想更
多可以把10调大。
如果想以其他方式进行排序,可以参考帮助文档: mysqldumpslow --help
4. 得到执行效率有问题的sql语句之后,
a. 使用explain语句查看执行计划,
如果是select语句直接
explain select....
如果是带where条件的update delete语句,
将update和delete替换为select * from XXX where....
b. 看explain语句返回的查询计划中索引使用情况
. 是否该语句有使用索引
. 该语句是否使用了期望的索引
c. 根据explain分析的结果调整应用对索引使用或调整表的索引
. 如果使用联合索引, index(c1,c2,c3), 应用的sql语句中应使用索引c1
或c1,c2 或c1,c2,c3来使用该索引。
(sql语句中使用c1,c3或c2,c3是不会使用
该索引的)
. 尽量避免在主键中包含大字段,如一个 varchar(100)之类的,因为这非
常的消耗内存, 可以考虑用一个自增的int id作为主键,然后把需要的打字段设
为索引
. 应用程序的sql语句要尽量避免对主键的修改
. 对于ndb或memroy引擎的表来说,如果索引的使用基本都是按照a=b的模
式的话,可以只使用hash索引
. 如果应用对于数据库的操作是写多读少的话,关闭query cache:
set global query_cache_size=0; //这个为临时,重启失效
活在配置文件中
[mysqld]
--query_cache_size=0
//这个是永久的
. 避免建过多的索引,这样非常影响修改的性能
. 如果一个索引可以确定非空,那么在声明的时候加上not null
. 如果可以确定索引唯一的话,那么声明为unique
. 对于比较大的字段可以考虑使用前缀索引,即只所以该字段的前面几个
字节
如 a varchar(50),
index (a(10)).
这样可以节省内存,但会降低索引的唯一性。
. 如果表中的索引主要用于 等值比较 即使用“=”进行条件判断的话 并且是唯一的话 即unique,那么可以只使
用hash索引:
例如
create table t1 (a int primary key, b char(10) not null,
mysql调优技术 mysql调优过程
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Mysql调优:
Mysql调优:
Mysql调优: -
mysql性能调优工具 mysql 性能调优
优化的目的:、 为了快速响应客户端的响应; 优化手段: 1.硬优化 升级硬件(硬盘 内存 ) 2.软优化 优化服务运行的参数 影响数据库服务的性能的因数有那些: 1.网络带宽 解决办法(
mysql性能调优工具 数据库 linux mysql java