全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多
分布式关系型数据库 DRDS

DRDS 慢 SQL 明细

更新时间:2017-12-11 21:27:34

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

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

实例规格为 2C2G 的实例会记录 5000 条慢 SQL 明细,实例规格为 4C4G 的实例,会记录 10000 条慢 SQL 明细。
DRDS 会滚动删除超过限制数量的慢 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。

其中SHOW FULL SLOW的结果集会包含以下列,其含义如下:

  • 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。

SHOW FULL PHYSICAL_SLOW 的结果集会包含以下列,其含义如下:

  • TRACE_ID: 该 SQL 的唯一标记,同一个逻辑 SQL 以及该逻辑 SQL 产生的物理 SQL 的 TRACE_ID 相同,同时 TRACE_ID 也会以注释的形式发送到 RDS,在 RDS 的 SQL 明细中可以根据 TRACE_ID 找到该 SQL;
  • GROUP_NAME: 数据库分组名,分组的目标是管理多组数据完全相同的数据库,比如通过 RDS(MySQL)进行数据复制后的主备数据库,主要用来解决读写分离,主备切换的问题;
  • DBKEY_NAME: 执行的分库信息;
  • START_TIME: DRDS 开始执行这个 SQL 的时间;
  • EXECUTE_TIME: DRDS 执行该 SQL 消耗的时间;
  • SQL_EXECUTE_TIME: DRDS 调用 RDS 执行该 SQL 消耗的时间;
  • GETLOCK_CONNECTION_TIME: DRDS 从连接池获取连接消耗的时间,该值如果很大,说明 RDS 的连接已被耗尽,一般是慢 SQL 比较多引起,登录到相应的 RDS,结合SHOW PROCESSLIST指令来排查。
  • CREATE_CONNECTION_TIME: DRDS 建立 RDS 连接消耗的时间,该值如果很大,很大原因是底层的 RDS 压力比较大或者挂掉了;
  • AFFECT_ROW: 该 SQL 返回的记录数或者影响的行数;
  • SQL: 执行的语句。

示例

示例一:下面的例子展示了如何一步步定位慢 SQL 在 DRDS 上、DRDS 跟 RDS 之间的执行情况。

更多关于排查慢 SQL 的例子请参考文档排查 DRDS 慢 SQL,进行 SQL 调优的例子请参考文档 SQL 优化方法

  1. 通过一些条件,例如执行时间,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)
    
  2. 根据逻辑慢 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)
    
  3. 可以在 RDS 的 SQL 明细与慢 SQL 中,根据这个TRACE_ID查看这个 SQL 在 RDS 上的执行情况。

    慢 SQL 明细1

示例二:在 RDS 中找到一个慢 SQL,如何找到 DRDS 中的原始 SQL。

  1. 在 RDS 的管理控制台 -> 日志管理 -> 慢 SQL 明细页面中,观察到慢 SQL 的TRACE_ID为 ae0e55660c00000。

    慢 SQL 明细2

  2. 根据第一步获取到的TRACE_ID,执行SHOW FULL PHYSICAL_SLOW指令获取这个 SQL 的物理执行情况;

    mysql> show full physical_slow where trace_id = 'ae0e55660c00000';
    +-----------------+----------------------------------------------------+-----------------------------------------------+-------------------------+--------------+------------------+-------------------------+------------------------+------------+------------------+
    | TRACE_ID        | GROUP_NAME                                         | DBKEY_NAME                                    | START_TIME              | EXECUTE_TIME | SQL_EXECUTE_TIME | GETLOCK_CONNECTION_TIME | CREATE_CONNECTION_TIME | AFFECT_ROW | SQL              |
    +-----------------+----------------------------------------------------+-----------------------------------------------+-------------------------+--------------+------------------+-------------------------+------------------------+------------+------------------+
    | ae0e55660c00000 | PRIV_TEST_1489167306631PJAFPRIV_TEST_APKK_0000_RDS | rdso6g5b6206sdq832ow_priv_test_apkk_0000_nfup | 2017-03-29 19:27:37.308 |        10003 |            10001 |                       0 |                      0 |          1 | select sleep(10) |
    +-----------------+----------------------------------------------------+-----------------------------------------------+-------------------------+--------------+------------------+-------------------------+------------------------+------------+------------------+
    1 row in set (0.02 sec)
    
本文导读目录