一、优化方向
二、MySQL优化常问的问题有哪些
mysql> show variables like ‘%slow%‘; +---------------------+------------------------------------------+ | Variable_name | Value | +---------------------+------------------------------------------+ | log_slow_queries | ON | | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | /mysqllog/slow_log/slow_queries_3306.log | +---------------------+------------------------------------------+ rows in set (0.00 sec)
slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭。 log-slow-queries :旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志。 log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。 log_output:日志存储方式。log_output=‘FILE‘表示将日志存入文件,默认值是‘FILE‘。log_output=‘TABLE‘表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。
MySQL数据库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output=‘FILE,TABLE‘。日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,
又需要能够获得更高的系统性能,那么建议优先记录到文件。
如何在线安全的清空慢查询日志
mysql> set global slow_query_log=0; Query OK, 0 rows affected (0.27 sec)
mysql> show variables like ‘%slow%‘; +---------------------+------------------------------------------+ | Variable_name | Value | +---------------------+------------------------------------------+ | log_slow_queries | OFF | | slow_launch_time | 2 | | slow_query_log | OFF | | slow_query_log_file | /mysqllog/slow_log/slow_queries_3306.log | +---------------------+------------------------------------------+ 4 rows in set (0.00 sec)
#检查慢查询日志的状态
mysql> set global slow_query_log_file=‘/mysqllog/slow_log/slow_queries_3306_new.log‘; Query OK, 0 rows affected (0.03 sec)
mysql> set global slow_query_log=1; Query OK, 0 rows affected (0.01 sec) mysql>set global long_query_time=1;
#检查状态是否成功开启
mysql> show variables like ‘%slow%‘; +---------------------+----------------------------------------------+ | Variable_name | Value | +---------------------+----------------------------------------------+ | log_slow_queries | ON | | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | /mysqllog/slow_log/slow_queries_3306_new.log | +---------------------+----------------------------------------------+ 4 rows in set (0.00 sec)
mysql> select sleep(10) as a, 1 as b; +---+---+ | a | b | +---+---+ | 0 | 1 | +---+---+ 1 row in set (10.00 sec) mysql> [mysql@xxx-xxx ~]$ more /mysqllog/slow_log/slow_queries_3306_new.log ...... Time Id Command Argument # Time: 140213 6:44:24 # User@Host: root[root] @ localhost [] # Query_time: 10.000365 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 SET timestamp=1392273864; select sleep(10) as a, 1 as b;
mv /mysqllog/slow_log/slow_queries_3306.log /mysqlbackup/slow_log/slow_queries_3306.log.bak.20140213
0.先运行看看是否真的很慢,注意设置SQL_NO_CACHE 1.where条件单表查,锁定最小返回记录表。这句话的意思是把查询语句的where都应用到表中返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高 2.explain查看执行计划,是否与1预期一致(从锁定记录较少的表开始查询) 3.order by limit 形式的sql语句让排序的表优先查 4.了解业务方使用场景 5.加索引时参照建索引的几大原则 6.观察结果,不符合预期继续从0分析
原文:https://www.cnblogs.com/errenjune/p/12498094.html