pg_profile: SQL 查询的统计信息

三月 8, 2024

摘要:报告的该部分包含了,在报告的时间范围内,按几个重要统计数据排列靠前的 SQL。

目录

查询统计数据是从 pg_stat_statements 视图(如果在采样时可以访问)中捕获的。在所有 SQL 相关的部分中,通过鼠标单击语句可以高亮显示语句。同时,在单击鼠标时,会在查询统计数据行下方显示查询文本的预览。查询文本的预览可以通过第二次点击查询来隐藏。

按运行时间排列靠前的 SQL

此表包含 pg_stat_statements 视图中按运行时间(total_plan_time + total_exec_time)排列的前 pg_profile.topn 条语句。自 PostgreSQL 13 起可用。

  • Query ID - 在 pg_stat_statements 扩展中,以十六进制表示法提供的查询标识符(queryid)。备用的查询标识符,计算为 dbiduseridqueryid 的哈希值,显示在方括号中,此标识符与 pgcenter 实用程序兼容。
  • Database - 语句来源的数据库名称(源自 dbid 字段)
  • User - 执行此语句的用户名(源自 userid 字段)
  • %Total - 该语句花费的总时间,占实例中所有语句花费总时间的百分比
  • Time (s) - 在该语句中花费的时间(单位:秒)
    • Elapsed - 该语句花费的总时间(total_plan_time + total_exec_time
    • Plan - 规划该语句所用的时间(total_plan_time 字段)
    • Exec - 执行该查询所用的时间(total_exec_time 字段)
  • JIT time (s) - JIT 执行该语句所花费的总时间,以秒为单位(jit_generation_time + jit_inlining_time + jit_optimization_time + jit_emission_time
  • I/O time (s):
    • Read - 花费在读取数据块上的时间(blk_read_time 字段)
    • Write - 写入数据块所用的时间(blk_write_time 字段)
  • CPU time (s) - 花费在 CPU 上的时间。基于 pg_stat_kcache 扩展提供的数据。
    • Usr - 在用户空间花费的 CPU 时间
    • Sys - 在内核空间花费的 CPU 时间
  • Plans - 该语句被规划过的次数(plans 字段)
  • Executions - 该语句被执行过的次数(calls 字段)

按规划时间排列靠前的 SQL

pg_stat_statements 视图中按规划时间(total_plan_time)排列的前 pg_profile.topn 条语句。自 PostgreSQL 13 起可用。

  • Query ID - 在 pg_stat_statements 扩展中,以十六进制表示法提供的查询标识符(queryid)。备用的查询标识符,计算为 dbiduseridqueryid 的哈希值,显示在方括号中,此标识符与 pgcenter 实用程序兼容。
  • Database - 语句来源的数据库名称(源自 dbid 字段)
  • User - 执行此语句的用户名(源自 userid 字段)
  • Plan elapsed (s) - 规划此语句所用的时间(total_plan_time 字段)
  • %Elapsed - 此语句的规划时间,占语句运行时间的百分比
  • Plan times (ms) - 此语句的详细规划时间统计数据(单位:毫秒)
    • Mean - 规划此语句所用的平均时间(mean_plan_time 字段)
    • Min - 规划此语句所用的最短时间(min_plan_time 字段)
    • Max - 规划此语句所用的最长时间(max_plan_time 字段)
    • StdErr - 规划此语句所用时间的总体标准偏差(stddev_plan_time 字段)
  • Plans - 该语句被规划过的次数(plans 字段)
  • Executions - 该语句被执行过的次数(calls 字段)

按执行时间排列靠前的 SQL

pg_stat_statements 视图中按执行时间(total_timetotal_exec_time)排列的前 pg_profile.topn 条语句。

  • Query ID - 在 pg_stat_statements 扩展中,以十六进制表示法提供的查询标识符(queryid)。备用的查询标识符,计算为 dbiduseridqueryid 的哈希值,显示在方括号中,此标识符与 pgcenter 实用程序兼容。
  • Database - 语句来源的数据库名称(源自 dbid 字段)
  • User - 执行此语句的用户名(源自 userid 字段)
  • Exec (s) - 执行此语句所用的时间(total_exec_time 字段)
  • %Elapsed - 此语句的执行时间,占语句运行时间的百分比
  • %Total - 此语句的执行时间,占实例中所有语句总的花费时间的百分比
  • JIT time (s) - JIT 执行该语句所花费的总时间,以秒为单位(jit_generation_time + jit_inlining_time + jit_optimization_time + jit_emission_time
  • I/O time (s):
    • Read - 花费在读取数据块上的时间(blk_read_time 字段)
    • Write - 写入数据块所用的时间(blk_write_time 字段)
  • Rows - 该语句检索或影响的行数(rows 字段)
  • Execution times (ms) - 此语句的详细执行时间统计数据(单位:毫秒)
    • Mean - 执行此语句所用的平均时间(mean_exec_time 字段)
    • Min - 执行此语句所用的最短时间(min_exec_time 字段)
    • Max - 执行此语句所用的最长时间(max_exec_time 字段)
    • StdErr - 执行此语句所用时间的总体标准偏差(stddev_exec_time 字段)
  • Executions - 该语句被执行过的次数(calls 字段)

按执行次数排列靠前的 SQL

pg_stat_statements 视图中按执行次数(calls)排列的前 pg_profile.topn 条语句。

  • Query ID - 在 pg_stat_statements 扩展中,以十六进制表示法提供的查询标识符(queryid)。备用的查询标识符,计算为 dbiduseridqueryid 的哈希值,显示在方括号中,此标识符与 pgcenter 实用程序兼容。
  • Database - 语句来源的数据库名称(源自 dbid 字段)
  • User - 执行此语句的用户名(源自 userid 字段)
  • Executions - 该语句的执行次数(calls 字段)
  • %Total - 此语句的执行次数,占实例中所有语句总的执行次数的百分比
  • Rows - 该语句检索或影响的行数(rows 字段)
  • Mean(ms) - 此语句花费的平均时间,以毫秒为单位(mean_timemean_exec_time 字段)
  • Min(ms) - 此语句花费的最短时间,以毫秒为单位(min_timemin_exec_time 字段)
  • Max(ms) - 此语句花费的最长时间,以毫秒为单位(max_timemax_exec_time 字段)
  • StdErr(ms) - 此语句花费时间的总体标准偏差,以毫秒为单位(stddev_timestddev_exec_time 字段)
  • Elapsed(s) - 执行此查询所花费的总时间,以秒为单位(total_timetotal_exec_time 字段)

按 I/O 等待时间排列靠前的 SQL

按读写时间(blk_read_time + blk_write_time)排列的前 pg_profile.topn 条语句。

  • Query ID - 在 pg_stat_statements 扩展中,以十六进制表示法提供的查询标识符(queryid)。备用的查询标识符,计算为 dbiduseridqueryid 的哈希值,显示在方括号中,此标识符与 pgcenter 实用程序兼容。
  • Database - 语句来源的数据库名称(源自 dbid 字段)
  • User - 执行此语句的用户名(源自 userid 字段)
  • IO(s) - 此语句花费在读取和写入上的时间(I/O 时间),以秒为单位(blk_read_time + blk_write_time
  • R(s) - 此语句花费在读取上的时间,以秒为单位(blk_read_time
  • W(s) - 此语句花费在写入上的时间,以秒为单位(blk_write_time
  • %Total - 此语句的读写时间,占实例中所有语句总的读写时间的百分比
  • Reads - 此语句读取的块数,分为三个子列:
    • Shr - 共享块读取(shared_blks_read 字段)
    • Loc - 本地块读取(local_blks_read 字段)
    • Tmp - 临时块读取(temp_blks_read 字段)
  • Writes - 此语句写入的块数,分为三个子列:
    • Shr - 共享块写入(shared_blks_written 字段)
    • Loc - 本地块写入(local_blks_written 字段)
    • Tmp - 临时块写入(temp_blks_written 字段)
  • Elapsed(s) - 执行此查询所花费的总时间,以秒为单位(total_timetotal_exec_time 字段)
  • Executions - 该语句的执行次数(calls 字段)

按获取的共享块数排列靠前的 SQL

按读取和命中的共享块数排列的前 pg_profile.topn 条语句,这有助于检测出处理数据量最大的语句。

  • Query ID - 在 pg_stat_statements 扩展中,以十六进制表示法提供的查询标识符(queryid)。备用的查询标识符,计算为 dbiduseridqueryid 的哈希值,显示在方括号中,此标识符与 pgcenter 实用程序兼容。
  • Database - 语句来源的数据库名称(源自 dbid 字段)
  • User - 执行此语句的用户名(源自 userid 字段)
  • blks fetched - 获取的数据块的数量(表达式:shared_blks_hit + shared_blks_read
  • %Total - 此语句获取的数据块的数量,占实例中所有语句获取的数据块总数的百分比
  • Hits(%) - 从缓冲区获取的数据块的数量,占获取的所有数据块总数的百分比
  • Elapsed(s) - 此语句花费的总时间,以秒为单位(total_timetotal_exec_time+total_plan_time 字段)
  • Rows - 该语句检索或影响的行数(rows 字段)
  • Executions - 该语句的执行次数(calls 字段)

按读取的共享块数排列靠前的 SQL

按读取的共享块数排列的前 pg_profile.topn 条语句,这有助于检测出读取数据量最大的语句。

  • Query ID - 在 pg_stat_statements 扩展中,以十六进制表示法提供的查询标识符(queryid)。备用的查询标识符,计算为 dbiduseridqueryid 的哈希值,显示在方括号中,此标识符与 pgcenter 实用程序兼容。
  • Database - 语句来源的数据库名称(源自 dbid 字段)
  • User - 执行此语句的用户名(源自 userid 字段)
  • Reads - 此语句读取的共享块数量(shared_blks_read 字段)
  • %Total - 此语句读取的共享块数量,占实例中所有语句读取的共享块总数的百分比
  • Hits(%) - 从缓冲区获取的数据块的数量,占获取的所有数据块总数的百分比
  • Elapsed(s) - 此语句花费的总时间,以秒为单位(total_timetotal_exec_time+total_plan_time 字段)
  • Rows - 该语句检索或影响的行数(rows 字段)
  • Executions - 该语句的执行次数(calls 字段)

按写脏的共享块数排列靠前的 SQL

按写脏的共享块数排列的前 pg_profile.topn 条语句,这有助于检测出更改数据量最大的语句。

  • Query ID - 在 pg_stat_statements 扩展中,以十六进制表示法提供的查询标识符(queryid)。备用的查询标识符,计算为 dbiduseridqueryid 的哈希值,显示在方括号中,此标识符与 pgcenter 实用程序兼容。
  • Database - 语句来源的数据库名称(源自 dbid 字段)
  • User - 执行此语句的用户名(源自 userid 字段)
  • Dirtied - 此语句写脏的共享块数量(shared_blks_dirtied 字段)
  • %Total - 此语句写脏的共享块数量,占实例中所有语句写脏的共享块总数的百分比
  • Hits(%) - 从缓冲区获取的数据块的数量,占获取的所有数据块总数的百分比
  • WAL - 此语句生成的 WAL 总量(wal_bytes 字段)
  • %Total - 此语句生成的 WAL 总量,占实例中产生的 WAL 总量的百分比(pg_current_wal_lsn() 增量)
  • Elapsed(s) - 此语句花费的总时间,以秒为单位(total_timetotal_exec_time+total_plan_time 字段)
  • Rows - 该语句检索或影响的行数(rows 字段)
  • Executions - 该语句的执行次数(calls 字段)

按写入的共享块数排列靠前的 SQL

按写入的数据块数排列的前 pg_profile.topn 条语句,这些语句不得不执行写入操作。

  • Query ID - 在 pg_stat_statements 扩展中,以十六进制表示法提供的查询标识符(queryid)。备用的查询标识符,计算为 dbiduseridqueryid 的哈希值,显示在方括号中,此标识符与 pgcenter 实用程序兼容。
  • Database - 语句来源的数据库名称(源自 dbid 字段)
  • User - 执行此语句的用户名(源自 userid 字段)
  • Written - 此语句写入的数据块数量(shared_blks_written 字段)
  • %Total - 此语句写入的数据块数量,占实例中所有语句写入的数据块总数的百分比
  • %BackendW - 此语句写入的数据块数量,占实例中后端写入的所有数据块总数的百分比(pg_stat_bgwriter 视图的 buffers_backend 字段)
  • Hits(%) - 从缓冲区获取的数据块的数量,占获取的所有数据块总数的百分比
  • Elapsed(s) - 此语句花费的总时间,以秒为单位(total_timetotal_exec_time+total_plan_time 字段)
  • Rows - 该语句检索或影响的行数(rows 字段)
  • Executions - 该语句的执行次数(calls 字段)

按产生 WAL 日志量排列靠前的 SQL

按产生的 WAL 日志量排列的前 pg_profile.topn 条语句(自 pg_stat_statements v1.8 起可用)

  • Query ID - 在 pg_stat_statements 扩展中,以十六进制表示法提供的查询标识符(queryid)。备用的查询标识符,计算为 dbiduseridqueryid 的哈希值,显示在方括号中,此标识符与 pgcenter 实用程序兼容。
  • Database - 语句来源的数据库名称(源自 dbid 字段)
  • User - 执行此语句的用户名(源自 userid 字段)
  • WAL - 此语句生成的 WAL 总量(wal_bytes 字段)
  • %Total - 此语句生成的 WAL 总量,占实例中产生的 WAL 总量的百分比(pg_current_wal_lsn() 增量)
  • Dirtied - 此语句写脏的共享块数量(shared_blks_dirtied 字段)
  • WAL FPI - 此语句生成的 WAL 全页镜像总数(wal_fpi 字段)
  • WAL records - 此语句生成的 WAL 总字节数(wal_bytes 字段)

按访问的临时块数排列靠前的 SQL

按临时块读写次数排列的前 pg_profile.topn 条语句,它计算为 temp_blks_readtemp_blks_writtenlocal_blks_readlocal_blks_written 字段值的总和。

  • Query ID - 在 pg_stat_statements 扩展中,以十六进制表示法提供的查询标识符(queryid)。备用的查询标识符,计算为 dbiduseridqueryid 的哈希值,显示在方括号中,此标识符与 pgcenter 实用程序兼容。
  • Database - 语句来源的数据库名称(源自 dbid 字段)
  • User - 执行此语句的用户名(源自 userid 字段)
  • Local fetched - 检索过的本地块的数量(表达式:local_blks_hit + local_blks_read
  • Hits(%) - 从临时缓冲区获取的本地块的数量,占获取的所有本地块总数的百分比
  • Local (blk) - 临时表中用过的块的 I/O 统计信息
    • Write - 写入的本地块的数量(local_blks_written
    • %Total - 此语句写入的本地块数量,占实例中所有语句写入的本地块总数的百分比
    • Read - 读取的本地块的数量(local_blks_read
    • %Total - 此语句读取的本地块数量,占实例中所有语句读取的本地块总数的百分比
  • Temp (blk) - 操作中用过的数据块的 I/O 统计信息(如排序和连接)
    • Write - 写入的临时块的数量(temp_blks_written
    • %Total - 此语句写入的临时块数量,占实例中所有语句写入的临时块总数的百分比
    • Read - 读取的临时块的数量(temp_blks_read
    • %Total - 此语句读取的临时块数量,占实例中所有语句读取的临时块总数的百分比
  • Elapsed(s) - 此语句花费的总时间,以秒为单位(total_timetotal_exec_time+total_plan_time 字段)
  • Rows - 该语句检索或影响的行数(rows 字段)
  • Executions - 该语句的执行次数(calls 字段)

按临时块 I/O 时间排列靠前的 SQL

按临时块 I/O 时间排列的前 pg_profile.topn 条语句,它计算为 temp_blk_read_timetemp_blk_write_time 字段值的总和。

  • Query ID - 在 pg_stat_statements 扩展中,以十六进制表示法提供的查询标识符(queryid)。备用的查询标识符,计算为 dbiduseridqueryid 的哈希值,显示在方括号中,此标识符与 pgcenter 实用程序兼容。
  • Database - 语句来源的数据库名称(源自 dbid 字段)
  • User - 执行此语句的用户名(源自 userid 字段)
  • Temp I/O time (s) - 花费在临时文件块 I/O 上的时间
    • Read - 读取临时文件块所用的时间,以秒为单位
    • Write - 写入临时文件块所用的时间,以秒为单位
    • %Total - 此语句花费在临时块 I/O 上的时间,占实例中所有语句花费在临时块 I/O 上的总时间的百分比
  • Temp (blk) - 操作中用过的数据块的 I/O 统计信息(如排序和连接)
    • Write - 写入的临时数据块的数量(temp_blks_written
    • %Total - 此语句写入的临时块数量,占实例中所有语句写入的临时块总数的百分比
    • Read - 读取的临时块的数量(temp_blks_read
    • %Total - 此语句读取的临时块数量,占实例中所有语句读取的临时块总数的百分比
  • Elapsed(s) - 此语句花费的总时间,以秒为单位(total_timetotal_exec_time+total_plan_time 字段)
  • Rows - 该语句检索或影响的行数(rows 字段)
  • Executions - 该语句的执行次数(calls 字段)

资源使用量统计

此部分包含了由 pg_stat_kcache 扩展(如果在报告时间段内可用)提供的资源使用情况的统计信息。

按系统和用户时间排列靠前的 SQL

pg_stat_kcache 中的系统和用户时间(user_time + system_time)排列的前 pg_profile.topn 条语句。

  • Query ID - 在 pg_stat_statements 扩展中,以十六进制表示法提供的查询标识符(queryid)。备用的查询标识符,计算为 dbiduseridqueryid 的哈希值,显示在方括号中,此标识符与 pgcenter 实用程序兼容。
  • Database - 语句来源的数据库名称(源自 dbid 字段)
  • User - 执行此语句的用户名(源自 userid 字段)
  • User Time - 使用的用户 CPU 时间
    • Plan (s) - 规划期间花费的用户 CPU 时间,以秒为单位(plan_user_time 字段)
    • Exec (s) - 执行期间花费的用户 CPU 时间,以秒为单位(exec_user_timeuser_time 字段)
    • %Total - 此语句花费的用户 CPU 时间,占所有语句花费的用户 CPU 总时间的百分比
  • System Time - 使用的系统 CPU 时间
    • Plan (s) - 规划期间花费的系统 CPU 时间,以秒为单位(plan_system_time 字段)
    • Exec (s) - 执行期间花费的系统 CPU 时间,以秒为单位(exec_system_timesystem_time 字段)
    • %Total - 此语句花费的系统 CPU 时间,占所有语句花费的系统 CPU 总时间的百分比

按文件系统层的读取/写入次数排列靠前的 SQL

pg_stat_kcache 中的读写次数(reads + writes)排列的前 pg_profile.topn 条语句。

  • Query ID - 在 pg_stat_statements 扩展中,以十六进制表示法提供的查询标识符(queryid)。备用的查询标识符,计算为 dbiduseridqueryid 的哈希值,显示在方括号中,此标识符与 pgcenter 实用程序兼容。
  • Database - 语句来源的数据库名称(源自 dbid 字段)
  • User - 执行此语句的用户名(源自 userid 字段)
  • Read Bytes - 文件系统层读取的字节数
    • Plan - 规划期间读取的字节数(plan_reads 字段)
    • Exec - 执行期间读取的字节数(exec_reads 字段)
    • %Total - 此语句读取的字节数,占所有语句读取的总字节数的百分比
  • Writes - 文件系统层写入的字节数(writes 字段)
    • Plan - 规划期间写入的字节数(plan_writes 字段)
    • Exec - 执行期间写入的字节数(exec_writes 字段)
    • %Total - 此语句写入的字节数,占所有语句写入的总字节数的百分比

按 JIT 开销时间排列靠前的 SQL

按 JIT 相关的总开销时间(即 jit_generation_time + jit_inlining_time + jit_optimization_time + jit_emission_time)排列的前 pg_profile.topn 条语句。自 PostgreSQL 15(pg_stat_statements 1.10)起可用。

  • Query ID - 在 pg_stat_statements 扩展中,以十六进制表示法提供的查询标识符(queryid)。备用的查询标识符,计算为 dbiduseridqueryid 的哈希值,显示在方括号中,此标识符与 pgcenter 实用程序兼容。
  • Database - 语句来源的数据库名称(源自 dbid 字段)
  • User - 执行此语句的用户名(源自 userid 字段)
  • JIT total (s) - 花费在 JIT 上的总时间,以秒为单位(jit_generation_time + jit_inlining_time + jit_optimization_time + jit_emission_time
  • Generation
    • Count - 语句 JIT 编译的函数总数
    • Gen. time - 语句在生成 JIT 代码上所花费的总时间
  • Inlining
    • Count - 函数内联过的次数
    • Time - 语句在内联函数上花费的总时间(单位:秒)
  • Optimization
    • Count - 语句优化过的次数
    • Time - 语句在优化上花费的总时间(单位:秒)
  • Emission
    • Count - 代码已发放的次数
    • Time - 语句在发放代码上花费的总时间(单位:秒)
  • Time (s) - 此语句花费的时间(单位:秒)
    • Plan - 规划该语句所用的时间(total_plan_time 字段)
    • Exec - 执行该查询所用的时间(total_exec_time 字段)
  • I/O time (s):
    • Read - 花费在读取数据块上的时间(blk_read_time 字段)
    • Write - 写入数据块所用的时间(blk_write_time 字段)

SQL 文本的完整列表

查询报告中提到的所有语句的文本。您可以在任何统计表中使用 Query ID 链接,来访问并查看查询文本。此部分中的查询限制在 pg_profile.max_query_length(默认值为 20000)个字符,但是可以从扩展表中获取完整的查询文本。该列表中的同一个 queryid 条目,在不同的示例中会有多个捕获的实际查询文本。仅会列出最近捕获的三个查询文本。

了解更多

pg_profile: PostgreSQL 历史工作负载报告