使用说明

PolarDB MySQL版提供的SQL Trace功能,用于跟踪SQL语句的执行信息,如:执行计划和执行统计信息(包括扫描行数、执行时间等)。可以帮助您快速地发现因执行计划变更而引发的性能变化,并统计当前集群中消耗负载较大的TopSQL。

前提条件

PolarDB集群版本需满足以下条件之一:

  • PolarDB MySQL版8.0.1版本且修订版本为8.0.1.1.30及以上。

  • PolarDB MySQL版8.0.2版本且修订版本为8.0.2.2.12及以上。

您可以通过查询版本号来确认集群版本。

使用限制

SQL Trace功能不会跟踪与账号相关的操作。如:CREATE USERDROP USERGRANT等。

参数说明

参数名称

描述

loose_sql_trace_type

SQL Trace跟踪类型。取值范围如下:

  • OFF(默认):不跟踪任何SQL语句。

  • DEMAND:跟踪指定的SQL语句。

  • ALL:跟踪所有的SQL语句。

  • SLOW_QUERY:跟踪所有的慢查询。

说明

仅支持在PolarDB MySQL版8.0.1版本,且修订版本为8.0.1.1.34及以上的版本使用SLOW_QUERY

loose_sql_sharing_size

存储SQL Sharing(SQL Trace中的基础组件)的最大使用内存。

取值范围:8388608~1073741824。单位:字节。默认值为134217728。

loose_sql_trace_plan_expire_time

SQL Trace跟踪的执行计划失效时间。当执行计划超过该时间且未被命中后,该执行计划将会被判定为过期,可以将其淘汰。

取值范围:0~18446744073709551615。单位:秒。默认值为604800。

使用说明

  • 添加需要跟踪的SQL语句。

    您可以通过以下两种方式来添加需要跟踪的SQL语句,并通过SQL Trace功能来跟踪SQL语句的执行信息。

    • loose_sql_trace_type参数值设置为ALL,来跟踪所有的SQL语句。

    • loose_sql_trace_type参数值设置为DEMAND,通过dbms_sql.add_trace存储过程添加指定的需要跟踪的SQL语句。

  • 获取使用SQL Trace功能跟踪的SQL语句的信息。

    您可以通过访问information_schema.sql_sharing表来获取使用SQL Trace功能跟踪的SQL语句的执行信息和TopSQL等。示例如下:

    • 获取指定SQL的执行信息和执行计划信息。

      SELECT * FROM information_schema.sql_sharing WHERE sql_id = polar_sql_id('select * from t');
    • 分别获取按照总执行时间、平均执行时间和总扫描行数三个维度Top10的SQL语句。

      SELECT * FROM information_schema.sql_sharing WHERE TYPE='sql' ORDER BY SUM_EXEC_TIME DESC LIMIT 10;
      SELECT * FROM information_schema.sql_sharing WHERE TYPE='sql' ORDER BY SUM_EXEC_TIME/EXECUTIONS DESC LIMIT 10;
      SELECT * FROM information_schema.sql_sharing WHERE TYPE='sql' ORDER BY SUM_ROWS_EXAMINED DESC LIMIT 10;

其他操作

性能测试

SQL Trace内部使用了大量的无锁设计,能够保证在高并发、SQL模板数量较多等场景下的数据库性能。

以下测试为相同场景下,sql_trace_type参数值设置为OFFALL时的性能对比。

Sysbench测试数据量为2千张表,每张表1万行数据。集群规格分别为4核8 GB和8核32 GB。

  • 集群规格为4核8 GB时的性能对比如下:

    • db-ps-mode=disable oltp_read_onlyimage

    • db-ps-mode=auto oltp_read_writeimage

  • 集群规格为8核32 GB时的性能对比如下:

    • db-ps-mode=disable oltp_read_onlyimage

    • db-ps-mode=auto oltp_read_writeimage

结论

由以上的测试数据得出:在oltp_read_only和oltp_read_write场景下SQL Trace对性能的影响均不超过3%。