MySQL 优化基础
mysql 版本5.7
查询数据库版本: select @@version;
查询数据库的变量:
1 | show variables; -- 当前会话 |
当我设置long_query_time
的时候用到了set global long_query_time = 5
;但是查询的时候用到了show global variables like '%long_query_time%'
这种情况下查到的值始终为10,中间的原因就是局部和全局的问题:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22mysql> SHOW SESSION VARIABLES LIKE "long_query_time";
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
mysql> SET @@GLOBAL.long_query_time = 1;
mysql> SHOW GLOBAL VARIABLES LIKE "long_query_time";
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
mysql> SHOW VARIABLES LIKE "long_query_time";
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
long_query_time
记录的是时间的秒。如果设置为0秒,那么所有的sql都会被记录。
show variables like 'log_queries_not_using_indexes';
可以查看是否索引查询启用日志。所有没有索引的查询都会记录下来。
show variables like 'slow_query_log_file';
是否打开慢查询日志set global slow_query_log = on;
打开慢查询日志
show global variables like 'slow_query_log_file';
查询慢查询日志文件路径set slow_query_log_file='/usr/local/var/mysql/logs/query_slow.log';
设置慢查询日志文件路径
query_slow.log
1 | # Time: 2017-04-22T07:02:51.980026Z |
第一行是执行sql的时间;第二行是用户和执行的主机;第三行是sql总共执行时间,锁表,查出的row;第三行是执行时间的时间戳;第四行是执行的SQL语句。
mysqldumpslow -t 3 logfile
:分析日志文件的前3条日志
explain sql语句
:执行计划分析sql语句