MySQL 手册
参数配置
查看所有参数
1 | mysql> SHOW VARIABLES; |
慢查询、索引相关的参数
查看慢查询日志是否打开
Usage:
1 | mysql> SHOW VARIABLES LIKE '%slow_query_log%'; |
Result:
Variable_name | Value |
---|---|
slow_query_log | OFF |
slow_query_log_file | /var/lib/mysql/17998065ff2d-slow.log |
打开慢查询日志
Usage:
1 | -- 打开MySQL慢查询日志 |
慢查询阈值
查看慢查询阈值
Usage:
1 | mysql> SHOW VARIABLES LIKE 'long_query_time'; |
Result:
Variable_name | Value |
---|---|
long_query_time | 10.000000 |
设置慢查询阈值
Usage:
1 | -- 设置完之后,在当前窗口查询,可能存在值不变的情况,重新打开窗口查询即可。 |
未使用索引的情况
查看未使用索引的查询是否计入慢查询日志
Usage:
1 | mysql> SHOW VARIABLES LIKE '%log_queries_not_using_indexes%'; |
Result:
Variable_name | Value |
---|---|
log_queries_not_using_indexes | OFF |
打开未使用索引记入慢查询日志
Usage:
1 | mysql> SET GLOBAL log_queries_not_using_indexes = ON; |
慢查询日志分析
MySQL
自带了 mysqldumpslow
可以帮助我们快速得分析慢查询日志。pt-query-digest
是一个非常优秀的第三方工具来版主我们分析 MySQL
的 binlog、generallog、slowlog。
mysqldumpslow
Usage:
mysqldumpslow [ OPTS... ] [ LOGS... ]
具体的参数,可自行查看其对应的含义
示例:
1 | 得到返回记录集最多的 10 个 SQL。 |
刨析 MySQL 查询
在实际项目中,我们通过慢查询日志,只是找到对应的慢查询,那么如何对慢查询进行刨析呢?
MySQL 在 5.1 版本之后引入了 SHOW PROFILE
命令,默认是禁用的,但可以在会话级别动态的修改。
开启
1 | -- 设置为 ON 或 1 均可 |
刨析查询耗时
开启之后执行任意一个查询,然后在执行 SHOW PROFILING
,观察对应的结果。
1 | mysql> SHOW PROFILING; |
其结果如下
Query_ID | Duration | Query |
---|---|---|
1 | 0.00060525 | SELECT * FROM actor |
如果需要看更为详细的信息
1 | mysql> SHOW PROFILE FOR QUERY 1; |
其结果如下,可以看到详细的记录了该次查询各个阶段的耗时情况
Status | Duration |
---|---|
starting | 0.000069 |
checking permissions | 0.000009 |
Opening tables | 0.000021 |
init | 0.000022 |
System lock | 0.000010 |
optimizing | 0.000006 |
statistics | 0.000017 |
preparing | 0.000015 |
executing | 0.000004 |
Sending data | 0.000298 |
end | 0.000006 |
query end | 0.000008 |
closing tables | 0.000009 |
freeing items | 0.000020 |
logging slow query | 0.000074 |
cleaning up | 0.000019 |
事务相关的参数
事务隔离级别
查看事务的隔离级别
1 | -- 查看当前数据库事务隔离级别 |
设置事务的隔离级别
1 | -- 设置当前会话级别为`read-uncommitted` |
事务自动提交
MySQL
默认采用自动提交模式,也就是说如果不是显式地开始一个事务,则每个查询都被当做一个事务执行提交操作。另外还有一些命令,在执行之前会强制 COMMIT
提交当前活动地事务,典型的例子如 DDL
语言中会导致大量数据改变的操作,又比如 ALTER TABLE
等,此外还有 LOCK TABLES
等语句。
查看事务自动提交状态
Useage:
1 | -- 查看事务自动提交的参数 |
Result:
Variable_name | Value |
---|---|
autocommit | ON |
关闭事务自动提交
Useage:
1 | -- 关闭事务自动提交 |