查询慢 SQL 记录

查询慢 SQL 记录

DRDS 将执行时间超过1秒的 SQL 定义为慢 SQL。DRDS 中的慢 SQL 分为两种:逻辑慢 SQL 和 物理慢 SQL。

  • 逻辑慢 SQL:应用发送到 DRDS 的慢 SQL
  • 物理慢 SQL:DRDS 发送到 RDS 的慢 SQL

每个 DRDS 节点最多保存 5000 条慢 SQL 记录,超过限制数量的慢 SQL 明细会被滚动删除。

语法

SHOW FULL {SLOW | PHYSICAL_SLOW} [WHERE where_condition]
                                 [ORDER BY col_name [ASC | DESC], ...]
                                 [LIMIT {[offset,] row_count | row_count OFFSET offset}]

解释
SHOW FULL SLOW 显示的是逻辑慢 SQL,即应用发送到 DRDS 的 SQL。

其结果集的各列含义如下:

  • TRACE_ID: 该 SQL 的唯一标记,同一个逻辑 SQL 以及该逻辑 SQL 产生的物理 SQL 的 TRACE_ID 相同,同时 TRACE_ID 也会以注释的形式发送到 RDS,在 RDS 的 SQL 明细中可以根据 TRACE_ID 找到该 SQL;
  • HOST: 发送该 SQL 的客户端的 IP,注意:在 VPC 模式下可能无法获取客户端 IP;
  • START_TIME: DRDS 收到这个 SQL 的时间;
  • EXECUTE_TIME: DRDS 执行该 SQL 消耗的时间;
  • AFFECT_ROW: 该 SQL 返回的记录数或者影响的行数;
  • SQL: 执行的语句。
  • SHOW FULL PHYSICAL_SLOW指的是物理慢 SQL,即 DRDS 发送到 RDS(MySQL) 的 SQL。

其结果集的各列含义如下:

在这里插入图片描述

示例一:在 DRDS 上定位到慢 SQL,如何找到相应的物理慢 SQL?

通过一些条件,例如执行时间,SQL 字符串匹配等方式来获取我们想要的慢 SQL;

mysql> show full slow where `SQL` like '%select sleep(50)%';
+-----------------+-----------+-------------------------+--------------+------------+------------------+
| TRACE_ID        | HOST      | START_TIME              | EXECUTE_TIME | AFFECT_ROW | SQL              |
+-----------------+-----------+-------------------------+--------------+------------+------------------+
| ae0e565b8c00000 | 127.0.0.1 | 2017-03-29 19:28:43.028 |        50009 |          1 | select sleep(50) |
+-----------------+-----------+-------------------------+--------------+------------+------------------+
1 row in set (0.02 sec)

根据逻辑慢 SQL 中获取到的TRACE_ID,执行SHOW FULL PHYSICAL_SLOW指令获取这个 SQL 的物理执行情况;

mysql> show full physical_slow where trace_id = 'ae0e565b8c00000';
+-----------------+----------------------------------------------------+-----------------------------------------------+------------------------+--------------+------------------+-------------------------+------------------------+------------+------------------+
| TRACE_ID        | GROUP_NAME                                         | DBKEY_NAME                                    | START_TIME             | EXECUTE_TIME | SQL_EXECUTE_TIME | GETLOCK_CONNECTION_TIME | CREATE_CONNECTION_TIME | AFFECT_ROW | SQL              |
+-----------------+----------------------------------------------------+-----------------------------------------------+------------------------+--------------+------------------+-------------------------+------------------------+------------+------------------+
| ae0e565b8c00000 | PRIV_TEST_1489167306631PJAFPRIV_TEST_APKK_0000_RDS | rdso6g5b6206sdq832ow_priv_test_apkk_0000_nfup | 2017-03-29 19:27:53.02 |        50001 |            50001 |                       0 |                      0 |          1 | select sleep(50) |
+-----------------+----------------------------------------------------+-----------------------------------------------+------------------------+--------------+------------------+-------------------------+------------------------+------------+------------------+
1 row in set (0.01 sec)
MySQL 的 bigint 类型是一种大整数类型,其范围为 -9223372036854775808 到 9223372036854775807。如果您在使用 MySQL 数据库时遇到了查询的问题,可以尝试以下方法: 1. 确认索引是否合理 在 MySQL 中,索引是提高查询效率的重要手段。如果您的表中存在 bigint 类型的字段,并且您的查询语句中使用了该字段作为条件,那么建立相应的索引可以大大提高查询效率。 使用以下命令检查索引是否合理: ``` SHOW INDEX FROM table_name; ``` 如果没有相应的索引,可以使用以下命令创建索引: ``` CREATE INDEX index_name ON table_name (column_name); ``` 2. 避免全表扫描 全表扫描是一种低效的查询方式,会导致查询效率低下。因此,应尽量避免使用全表扫描。 例如,如果您要查询表中某个 bigint 类型的字段的值是否等于某个值,可以使用以下语句: ``` SELECT * FROM table_name WHERE column_name = 123456; ``` 而不是使用以下语句: ``` SELECT * FROM table_name WHERE column_name; ``` 3. 优化查询语句 优化查询语句也是提高查询效率的一种方法。您可以使用 EXPLAIN 命令来查看查询语句的执行计划,并根据执行计划来进行优化。 例如,以下查询语句可能会导致查询效率低下: ``` SELECT * FROM table_name WHERE column_name LIKE '%keyword%'; ``` 可以优化为: ``` SELECT * FROM table_name WHERE column_name LIKE 'keyword%'; ``` 4. 调整 MySQL 配置参数 在 MySQL 中,有一些配置参数可以影响查询效率。您可以根据实际情况调整这些参数来提高查询效率。 例如,以下参数可以影响查询效率: - innodb_buffer_pool_size:控制 InnoDB 存储引擎使用的内存池大小。 - query_cache_size:控制查询缓存的大小。 - join_buffer_size:控制连接缓存的大小。 调整这些参数时,请注意不要将它们设置得过高或过低,以免影响系统的稳定性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值