Mysql性能排查的步骤:
1)通过show status了解各种sql的执行频率;
2)排查慢SQL。
一、了解各种SQL的执行频率
mysql> show [session|global] status like ‘com_%’;
这边com_表示的是某种操作的执行次数。如com_select、com_update、com_delete等。
mysql> show status like 'com_update%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| Com_update | 0 |
| Com_update_multi | 0 |
+------------------+-------+
注意:
1)默认是session级别的查询;
2)global表示的是启动以来的所有执行SQL,session表示的是本次会话的查询SQL。
二、定位慢SQL
1.了解慢SQL的时间阈值
通过long_query_time参数来查看,单位为s。
Mysql默认慢SQL时间为10秒,DRDS默认为1秒。
mysql> show variables like '%long_query_time%';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set, 1 warning (0.00 sec)
2.查看慢SQL相关参数
MySQL [db_test1]> show global variables like '%slow%';
+---------------------------+-------------------------------------------+
| Variable_name | Value |
+---------------------------+-------------------------------------------+
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /home/mysql/data3118/mysql/slow_query.log |
+---------------------------+-------------------------------------------+
slow_query_log 表示慢查询SQL会记录在log文件中(Mysql默认OFF,DRDS默认ON);
slow_query_log_file表示慢查询SQL的记录日志。
3.查看慢SQL(Mysql和DRDS有区别)
1)查看当前慢SQL的数量
mysql> show status like '%slow_queries%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries | 0 |
+---------------+-------+
1 row in set (0.00 sec)
2)查看慢SQL明细
- Mysql
通过slow_query_log_file中标注的文件查看慢SQL明细。 - DRDS
① show full slow(字段解释见下文)
查看逻辑慢SQL-------应用发送到DRDS的慢SQL
② show full physical slow
查看物理慢SQL-----DRDS发送到RDS的慢SQL
③ show slow limit 10
查看耗时top10慢SQL
show full slow字段解释:
trace_id:同一个逻辑SQL及其生成的物理SQL的id相同(即该trace_id也可以在show full physical slow中找到)
execute_time:DRDS执行该SQL的耗时(单位为ms)
affect_row:该SQL返回的记录数(针对查询)或者影响行数(针对DML)(-1代表执行没成功)
| TRACE_ID | USER | HOST | START_TIME | EXECUTE_TIME | AFFECT_ROW | SQL |
| 106cfe91262cc000 | db_test1 | 127.0.0.1 | 2020-04-05 20:01:05.951 | 7984 | 0 | show tables |
| 107829d9d9ecc000 | db_test1 | 127.0.0.1 | 2020-04-14 12:13:33.009 | 10899 | 0 | /*+ TDDL:cmd_extra(MAX_TABLE_PARTITIONS_PER_DB= 400) */create table test_db(c1 int primary key, c2 varchar(10), c3 date) dbpartition by hash(c1) tbpartition by hash(c1) tbpartitions 129