opengauss/Mogdb SQL性能分析之statement_history

原作者:范计杰

概述

概述statement_history用于记录当前节点的SQL执行信息,用于替代日志方式记录Slow SQL。用于性能问题定位、SQL性能问题分析。会根据配置,记录两类SQL。

  • 全量SQL记录
  • 慢SQL

对于此系统表查询有如下约束:

  • 必须在postgres库内查询,其它库中不存数据。
  • 此系统表受track_stmt_stat_level控制,默认为"OFF,L0",第一部分控制Full SQL,第二部分控制Slow SQL,具体字段记录级别见下表。
  • 对于Slow SQL,当track_stmt_stat_level的值为非OFF时,且SQL执行时间超过log_min_duration_statement,会记录为慢SQL。
  • 查询系统表必须具有sysadmin权限。

相关参数

  • log_min_duration_statement
    参数说明:设置记录慢SQL的阀值。默认值1800000ms

-1 is disabled, 0 logs all statements and their durations, > 0 logs only statements running at least this number of milliseconds

  • track_stmt_details_size
    参数说明:设置单语句可以收集的最大的执行事件的大小(byte)。

该参数属于USERSET类型参数,请参考重设参数中对应设置方法进行设置。

取值范围:整型,0 ~ 576460752303423487

默认值:4096

  • track_stmt_retention_time
    参数说明:组合参数,控制全量/慢SQL记录的保留时间。以60秒为周期读取该参数,并执行清理超过保留时间的记录,仅sysadmin用户可以访问。

该参数属于SIGHUP类型参数,请参考重设参数中对应设置方法进行设置。

取值范围:字符型

该参数分为两部分,形式为’full sql retention time, slow sql retention time’:

full sql retention time为全量SQL保留时间,取值范围为0 ~ 86400。
slow sql retention time为慢SQL的保留时间,取值范围为0 ~ 604800。
默认值:3600,604800

  • track_stmt_stat_level
    参数说明:控制语句执行跟踪的级别。

该参数属于USERSET类型参数,请参考重设参数中对应设置方法进行设置,不区分英文字母大小写,如果打开full sql功能会影响性能,并可能会占用大量的磁盘空间。

取值范围:字符型

该参数分为两部分,形式为’full sql stat level, slow sql stat level’:

第一部分为全量SQL跟踪级别,取值范围为OFF、L0、L1、L2。
第二部分为慢SQL的跟踪级别,取值范围为OFF、L0、L1、L2。

说明:
若全量SQL跟踪级别值为非OFF时,当前SQL跟踪级别值为全量SQL和慢SQL的较高级别(L2 > L1 >L0),级别说明请参见表1。

默认值:OFF,L0

  • track_stmt_parameter
    Enable to track the parameter of statements,默认值OFF

相关函数

  • statement_detail_decode(detail text, format text, pretty boolean)
    描述:解析全量/慢SQL语句中的details字段的信息。
    返回值类型:text
    参数
    detail: SQL语句产生的事件的集合(不可读)。
    format: 解析输出格式,取值为plaintext。
    pretty: 当format为plaintext时,是否以优雅的格式展示:
    true表示通过“\n”分隔事件。
    false表示通过“,”分隔事件。

示例,查看SQL执行过程中锁申请、释放信息

select unique_query_id,statement_detail_decode(details,'plaintext',true) from statement_history where details is not null; unique_query_id | statement_detail_decode -----------------+---------------------------------------------------------------------------------------------------------------- 3809144128 | '1' 'LOCK_START' '2022-05-18 10:16:03.309549+08' '3e44:a37:0:0:0:0' 'AccessShareLock' + | '2' 'LOCK_END' '2022-05-18 10:16:03.309557+08' + | '3' 'LOCK_START' '2022-05-18 10:16:03.309565+08' '3e44:a7c:0:0:0:0' 'AccessShareLock' + | '4' 'LOCK_END' '2022-05-18 10:16:03.309566+08' + | '5' 'LOCK_RELEASE' '2022-05-18 10:16:03.309581+08' '3e44:a7c:0:0:0:0' 'AccessShareLock' + | '6' 'LOCK_RELEASE' '2022-05-18 10:16:03.309581+08' '3e44:a37:0:0:0:0' 'AccessShareLock' + | '7' 'LOCK_START' '2022-05-18 10:16:03.309588+08' '3e44:30c8:0:0:0:0' 'AccessShareLock' + | '8' 'LOCK_END' '2022-05-18 10:16:03.309589+08' + | '9' 'LOCK_START' '2022-05-18 10:16:03.309625+08' '3e44:21c3:0:0:0:0' 'AccessShareLock' + | '10' 'LOCK_END' '2022-05-18 10:16:03.309625+08' + | '11' 'LOCK_START' '2022-05-18 10:16:03.309629+08' '3e44:21cc:0:0:0:0' 'AccessShareLock' + | '12' 'LOCK_END' '2022-05-18 10:16:03.309629+08' + | '13' 'LOCK_RELEASE' '2022-05-18 10:16:03.309637+08' '3e44:21cc:0:0:0:0' 'AccessShareLock' + | '14' 'LOCK_RELEASE' '2022-05-18 10:16:03.309638+08' '3e44:21c3:0:0:0:0' 'AccessShareLock' + | '15' 'LOCK_START' '2022-05-18 10:16:03.309676+08' '0:2337:0:0:0:0' 'AccessShareLock' + | '16' 'LOCK_END' '2022-05-18 10:16:03.309676+08' + | '17' 'LOCK_START' '2022-05-18 10:16:03.30968+08' '0:2340:0:0:0:0' 'AccessShareLock' + | '18' 'LOCK_END' '2022-05-18 10:16:03.30968+08' + | '19' 'LOCK_RELEASE' '2022-05-18 10:16:03.309691+08' '0:2340:0:0:0:0' 'AccessShareLock' + | '20' 'LOCK_RELEASE' '2022-05-18 10:16:03.309691+08' '0:2337:0:0:0:0' 'AccessShareLock' + | '21' 'LOCK_START' '2022-05-18 10:16:03.309707+08' '3e44:30c8:0:0:0:0' 'AccessShareLock' + | '22' 'LOCK_END' '2022-05-18 10:16:03.309708+08' + | '23' 'LOCK_START' '2022-05-18 10:16:03.309708+08' '3e44:30c8:0:0:0:0' 'AccessShareLock' + | '24' 'LOCK_END' '2022-05-18 10:16:03.309708+08' + | '25' 'LOCK_RELEASE' '2022-05-18 10:16:03.311669+08' '3e44:30c8:0:0:0:0' 'AccessShareLock' 2893388431 | '1' 'LOCK_START' '2022-05-18 10:16:13.312375+08' '0:4ec:0:0:0:0' 'AccessShareLock' + | '2' 'LOCK_END' '2022-05-18 10:16:13.31239+08' + | '3' 'LOCK_RELEASE' '2022-05-18 10:16:13.312412+08' '0:4ec:0:0:0:0' 'AccessShareLock' 2490934982 | '1' 'LOCK_START' '2022-05-18 10:16:26.869224+08' '0:4ec:0:0:0:0' 'AccessShareLock'