慢SQL

更新时间:
复制 MD 格式

PolarDB PostgreSQL版(兼容Oracle)提供慢SQL分析功能,能够查看慢日志趋势和统计信息,并且提供SQL建议和诊断分析。

注意事项

慢日志的最大长度为16 KB,超过该长度的部分将被截断。

操作步骤

  1. 登录PolarDB控制台,在左侧导航栏单击集群列表,选择集群所在地域,并单击目标集群ID进入集群详情页。

  2. 在左侧导航栏中,选择诊断与优化 > 慢 SQL。

  3. 选择需要查看的时间段,查看该时间段内慢日志趋势、事件分布、慢日志统计和慢日志明细。

    • 您可以在慢日志趋势图中选择某个时间点,查看该时间点的慢日志统计和慢日志明细。

      说明

      如果慢日志语句内容过长,没有完整展示,您可以将鼠标指针放置在对应的慢日志语句上,系统将以弹框的形式展示完整的慢日志语句。

    • 单击节点ID下拉框,可以查看每个节点的慢请求数量。

    • 在事件分布区域:可以查询到指定时间范围内的慢日志事件,单击后可查询事件详情。

    • 在慢日志统计和慢日志明细页签中单击image,可以将慢日志信息保存到本地查看。

    • 单击image,可携带当前已选择和输入的参数,跳转至OpenApi控制台,进行API调试。

    • 在慢日志统计区域,单击目标SQL模板操作列详情按钮,查看该SQL的慢日志详情。

    • 在慢日志明细区域,单击目标SQL操作列的优化和限流,也可对目标SQL进行SQL诊断优化和SQL限流。

常见问题

  • Q:为什么我看不到任何慢日志数据?

    A: 由于采用实时计算窗口聚合技术,慢日志最新统计数据会晚于当前时间3分钟展示。同时也请检查:

    • 数据库实例的慢日志功能是否开启且阈值合理;

    • 所选时间范围内是否确实有慢日志产生;

    • 当前账号是否拥有目标实例的DAS访问权限。

  • Q:为什么部分实例显示为黄色(当前用户无实例的访问权限)?

    A:黄色标识表示子账号无该实例的数据访问权限,可通过以下两种方式解决:

    • 联系管理员:为子账号添加该实例的访问权限;

    • 授予全局组权限:建议授予DASGlobalGroupAdmin权限,以便子账号按需创建用户组,并批量查看其有权限的实例数据。

  • Q:为什么慢日志中返回行数(Rows_sent)显示为0,但实际查询有数据返回?

    A:这通常是由于应用使用了Server-side Cursor(服务端游标)模式导致的。在Cursor模式下,一条SQL的执行会被分为两个阶段:

    • EXECUTE阶段:服务器执行查询并生成结果集,但不立即发送数据行给客户端,仅返回列定义等元数据。

    • FETCH阶段:客户端通过FETCH命令逐批拉取数据行。

    慢日志记录的是EXECUTE阶段的统计信息。在该阶段,MySQL已扫描数据(因此Rows_examined不为0),但尚未发送任何数据行给客户端(数据在后续FETCH阶段发送),因此Rows_sent记录为0。

    常见触发场景:

    • Java/JDBC:连接URL中开启了useCursorFetch=true,且设置了PreparedStatement.setFetchSize()为大于0的值或Integer.MIN_VALUE。

    • Python:使用了MySQLdb.cursors.SSCursor或pymysql.cursors.SSCursor。

    • ORM框架:部分ORM在处理大数据集查询时,默认使用流式查询(Streaming Query),底层即为Cursor模式。

    如需确认是否为此原因,可检查应用代码中是否配置了fetchSize或使用了流式游标,也可在数据库中执行SHOW GLOBAL STATUS LIKE 'Com_stmt_fetch';查看是否有FETCH请求。

  • Q:为什么会出现慢日志记录的SQL执行完成时间与SQL语句的实际执行时间不同?

    A:这通常是因为执行SQL语句时修改了时区导致的。慢日志记录的SQL执行时间的时区,存在会话级别、数据库级别和系统级别。慢日志时间设置逻辑为:当数据库存在时区时,以数据库的时区为准,否则以系统时区为准。当通过SQL语句修改了会话级别的时区时,可能导致慢日志记录的时区无法正常转换。

相关API

API

说明

查看慢日志明细

查看集群的慢日志明细。

查询集群SQL采集功能

查看集群的SQL采集功能是否开启。

开启或关闭集群的SQL采集功能

开启或关闭集群的SQL采集功能。