E.20. lt_profile(轻量级开发工具配置文件)

E.20.1. 概念
E.20.2. 扩展架构
E.20.3. 先决条件
E.20.4. 创建扩展
E.20.5. 权限
E.20.6. 使用lt_profile
E.20.7. PWR报告中的节
E.20.8. PSH报告的部分

这个LightDB的扩展可以帮助你找出在你的LightDB数据库中耗费最多资源的活动。

E.20.1. 概念

这个扩展基于LightDB的统计视图和扩展lt_stat_statementslt_stat_activitysystem_stats。 它是用纯pl/pgsql编写的,不需要任何外部库或软件,只需要LightDB数据库本身。

此扩展将在您的数据库中创建历史存储库。这个存储库将保存您的LightDB群集的统计“样本”。 通过调用take_sample()函数来获取样本。LightDB还提供了另一个lt_cron扩展工具来执行定期获取样本任务。

周期性的样本可以帮助您查找过去最耗费资源的活动。假设,您几个小时前报告了性能下降的问题。解决这样的问题,您可以在两个样本之间构建报告,将性能问题期间的负载配置文件绑定在一起。

您可以在运行任何批处理之前和之后明确地采取样本。

无论何时您采取样本,都将调用pg_stat_statements_reset(),确保由于达到lt_stat_statements.max而不会丢失语句。此外,报告将包含一节,告知您是否在任何样本中捕获的语句计数达到了lt_stat_statements.max的90%。

lt_profile在一个群集中安装后,可以从其他被称为服务器的群集中收集统计信息。 您只需要定义一些服务器,提供名称和连接字符串,并确保可以连接到所有服务器的所有数据库。 现在,您可以跟踪例如主机的备用统计信息,或来自任何其他服务器的统计信息。扩展安装后,将自动创建一个本地服务器-这是lt_profile所在的群集的服务器。

E.20.2. 扩展架构

扩展由四个部分组成:

  • 历史存储库是采样数据的存储。存储库是一个扩展表的集合。

  • 样本管理引擎是一组用于获取样本和通过从中删除过时的样本数据来支持存储库的函数。

  • 报告引擎是一组用于生成基于历史存储库数据的报告的函数。

  • 管理函数允许您创建并管理服务器基线

E.20.2.1. 插件用到的表

E.20.2.1.1. servers

监测的服务器列表 (LightDB集群)。

Table E.4. servers Columns

列类型

描述

server_id integer

服务器ID

server_name name

服务器名称

server_description text

服务器描述

server_created timestamp with time zone DEFAULT

服务器创建时间,默认为创建时函数now()的值

db_exclude name[]

排除的数据库

enabled boolean

是否开启,默认开启

connstr text

用于dblink的Connstr

max_sample_age integer

全局设置max_sample_age 将被此值重写,如果此值被设置

last_sample_id integer

上次采样ID,默认为0

size_smp_wnd_start time with time zone

开始采样时间

size_smp_wnd_dur interval hour to second

采样持续时间

size_smp_interval interval day to minute

采样时间间隔


E.20.2.1.2. samples

采样列表。

Table E.5. samples Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

sample_time timestamp (0) with time zone

采样时间


E.20.2.1.3. sample_server_hardware

服务器硬件配置信息 (通过system_stats收集)。信息包含CPU数量,线程数,核心数,插槽数,内存信息。

Table E.6. sample_server_hardware Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

architecture text

系统的 CPU 架构

byte_order text

CPU架构的字节顺序

cpus integer

CPU数量

threads_per_core integer

单核CPU线程数

cores_per_socket integer

一个插槽CPU核心数

sockets integer

系统插槽数量

vendor_id text

厂家ID

cpu_family integer

CPU系列

model integer

型号

model_name text

型号名称

cpu_mhz text

CPU频率(单位 mhz)

l1dcache text

一级数据缓存

l1icache text

一级指令缓存

l2cache text

二级缓存

l3cache t

三级缓存

memory_total integer

问题内存大小

swap_total integer

内存交换区大小


E.20.2.1.4. sample_cluster_instance

集群配置信息。

Table E.7. sample_cluster_instance Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

hostname text

主机名 (参考 servers.server_name)

cluster_name text

集群名 (参考 current_setting('cluster_name'))

role text

角色,主 如果 pg_is_in_recovery() = false, 否则为备

release text

LightDB版本号,示例:LightDB 13.8-23.1

startup_time timestamp

启动时间


E.20.2.1.5. sample_kernel_settings

采样内核设置。

Table E.8. sample_kernel_settings Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

name text

名称

value text

sourcefile text

源文件


E.20.2.1.6. sample_cpu_usage

采样CPU使用情况,通过分析/proc/stat产生统计数据。

Table E.9. sample_cpu_usage Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

user_cpu float4

用户CPU

sys_cpu float4

系统CPU

idle_cpu float4

闲置CPU

io_wait float4

IO等待


E.20.2.1.7. sample_db_memory_usage

采样内存使用情况。

Table E.10. sample_db_memory_usage Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

shared_memory bigint

共享内存大小(单位:字节)

local_memory bigint

本地内存大小(单位:字节)


E.20.2.1.8. sample_settings

采样设置。

Table E.11. sample_settings Columns

列类型

描述

server_id integer

服务器ID

first_seen timestamp (0) with time zone

第一次登入时间

setting_scope smallint

设置范围. pg_settings 取值为1,其它 adm 函数取值为2

name text

名称

setting text

设置

reset_val text

重置值

boot_val text

启动值

unit text

单元

sourcefile text

源文件

sourceline integer

源行

pending_restart boolean

重启标识挂起状态


E.20.2.1.9. sample_timings

各函数采样时间。

Table E.12. sample_timings Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

event text

采样事件

time_spent interval MINUTE TO SECOND (2)

此事件的时间开销


E.20.2.1.10. baselines

Baselines 设置。

Table E.13. baselines Columns

列类型

描述

server_id integer

服务器ID

bl_id integer

Baseline 采样ID

bl_name varchar (25)

Baseline 采样名字

keep_until timestamp (0) with time zone

此baseline采样需要保存的截止时间


E.20.2.1.11. bl_samples

Baseline 采样列表。

Table E.14. bl_samples Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

bl_id integer

Baseline ID


E.20.2.1.12. stmt_list

SQL语句列表。

Table E.15. stmt_list Columns

列类型

描述

server_id integer

服务器ID

queryid_md5 char(32)

查询ID的MD5

query text

查询SQL文本


E.20.2.1.13. sample_stat_database

数据库采样统计。

Table E.16. sample_stat_database Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

datid oid

数据库ID

datname name

数据库

xact_commit bigint

提交事务数

xact_rollback bigint

回滚事务数

blks_read bigint

块读数

blks_hit bigint

块命中数

tup_returned bigint

元组返回数

tup_fetched bigint

元组获取数

tup_inserted bigint

元组插入数

tup_updated bigint

元组更新数

tup_deleted bigint

元组删除数

conflicts bigint

总冲突数,包含表空间,锁,快照,缓存,启动死锁

temp_files bigint

临时文件

temp_bytes bigint

临时文件大小(单位:字节)

deadlocks bigint

死锁

blk_read_time double precision

块读取时间

blk_write_time double precision

块写入时间

stats_reset timestamp with time zone

上次重置统计的时间

datsize bigint

数据库大小

datsize_delta bigint

数据库大小变化

datistemplate boolean

真,则为模板数据库


E.20.2.1.14. sample_statements

SQL语句的采样统计。

Table E.17. sample_statements Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

userid oid

执行此条SQL的用户OID

datid oid

执行此条语句的数据库OID

queryid bigint

内部HASH码, 通过SQL解析树计算所得

queryid_md5 char(32)

查询MD5, 通过计算SQL文本计算所得

plans bigint

SQL计划次数( 开启 lt_stat_statements.track_planning 有效, 否则为零)

total_plan_time double precision

SQL计划总时间(单位:毫秒,开启 lt_stat_statements.track_planning 有效, 否则为零)

min_plan_time double precision

SQL计划最短时间(单位:毫秒,开启 lt_stat_statements.track_planning 有效, 否则为零)

max_plan_time double precision

SQL计划最长时间(单位:毫秒,开启 lt_stat_statements.track_planning 有效, 否则为零)

mean_plan_time double precision

SQL计划平均时间(单位:毫秒,开启 lt_stat_statements.track_planning 有效, 否则为零)

stddev_plan_time double precision

SQL计划标准差(单位:毫秒,开启 lt_stat_statements.track_planning 有效, 否则为零)

calls bigint

SQL执行总次数

total_exec_time double precision

SQL执行总时间(单位:毫秒)

min_exec_time double precision

SQL执行最短时间(单位:毫秒)

max_exec_time double precision

SQL执行最长时间(单位:毫秒)

mean_exec_time double precision

SQL执行平均时间(单位:毫秒)

stddev_exec_time double precision

SQL执行时间标准差(单位:毫秒)

rows bigint

SQL执行时获取或影响到的总行数

shared_blks_hit bigint

此SQL总共享块缓存命中次数

shared_blks_read bigint

此SQL总共享块缓存读取次数

shared_blks_dirtied bigint

此SQL总共享块缓存dirtied次数

shared_blks_written bigint

此SQL总共享块写入次数

local_blks_hit bigint

此SQL总本地块命中次数

local_blks_read bigint

此SQL总本地块读取次数

local_blks_dirtied bigint

此SQL总本地块dirtied次数

local_blks_written bigint

此SQL总本地块写入次数

temp_blks_read bigint

此SQL总临时块读取次数

temp_blks_written bigint

此SQL总临时块写入次数

blk_read_time double precision

读取块总时间(单位:in milliseconds,需 track_io_timing 开启, 否则为0)

blk_write_time double precision

写入块总时间(单位:in milliseconds,需 track_io_timing 开启, 否则为0)

wal_records bigint

此SQL产生的总WAL records数

wal_fpi bigint

此SQL产生的总WAL满页数

wal_bytes numeric

此SQL产生的WAL总大小(单位:字节)


E.20.2.1.15. sample_statements_total

以数据库为分组的总的采样统计信息。

Table E.18. sample_statements_total Columns

列类型

描述

server_id integer

服务器ID

datid oid

执行此条语句的数据库OID

plans bigint

SQL计划次数( 开启 lt_stat_statements.track_planning 有效, 否则为零)

total_plan_time double precision

SQL计划总时间(单位:毫秒,开启 lt_stat_statements.track_planning 有效, 否则为零)

calls bigint

SQL执行总次数

total_exec_time double precision

SQL执行总时间(单位:毫秒)

rows bigint

SQL执行时获取或影响到的总行数

shared_blks_hit bigint

此SQL总共享块缓存命中次数

shared_blks_read bigint

此SQL总共享块缓存读取次数

shared_blks_dirtied bigint

此SQL总共享块缓存dirtied次数

shared_blks_written bigint

此SQL总共享块写入次数

local_blks_hit bigint

此SQL总本地块命中次数

local_blks_read bigint

此SQL总本地块读取次数

local_blks_dirtied bigint

此SQL总本地块dirtied次数

local_blks_written bigint

此SQL总本地块写入次数

temp_blks_read bigint

此SQL总临时块读取次数

temp_blks_written bigint

此SQL总临时块写入次数

blk_read_time double precision

读取块总时间(单位:in milliseconds,需 track_io_timing 开启, 否则为0)

blk_write_time double precision

写入块总时间(单位:in milliseconds,需 track_io_timing 开启, 否则为0)

wal_records bigint

此SQL产生的总WAL records数

wal_fpi bigint

此SQL产生的总WAL满页数

wal_bytes numeric

此SQL产生的WAL总大小(单位:字节)

statements bigint

总SQL数


E.20.2.1.16. sample_wait_event_total

总的等待事件采样统计。

Table E.19. sample_wait_event_total Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

pid integer

当前事件的后台进程ID

queryid bigint

当前事件的查询ID

wait_event_type text

等待事件类型

wait_event text

等待事件子类型

wait_time double precision

自上次采样后,此类型事件总计时

state text

后台进程状态


E.20.2.1.17. tablespaces_list

采样时采集到的表空间。

Table E.20. tablespaces_list Columns

列类型

描述

server_id integer

服务器ID

tablespaceid oid

表空间OID

tablespacename name

表空间名字

tablespacepath oid

表空间路径


E.20.2.1.18. sample_stat_tablespaces

表空间采样统计,数据来源于函数pg_tablespace_size(oid)。

Table E.21. sample_stat_tablespaces Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

tablespaceid oid

表空间OID

size integer

表空间总磁盘占用(单位:字节)

size_delta integer

自上次采样后,表空间变化大小(单位:字节)


E.20.2.1.19. tables_list

此服务器数据库中的表列表。

Table E.22. tables_list Columns

列类型

描述

server_id integer

服务器ID

datid oid

数据库OID

relid oid

表OID

relkind char(1)

表类型

reltoastrelid oid

此表的toast表OID

schemaname name

表的模式名称

relname name

表的名字 (参考:pg_class.relname)


E.20.2.1.20. sample_stat_tables

表采样统计。

Table E.23. sample_stat_tables Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

datid oid

数据库OID

relid oid

表OID

tablespaceid oid

表空间OID

seq_scan bigint

自上次采样后,顺序扫描次数差

seq_tup_read bigint

自上次采样后,顺序元组读取差

idx_scan bigint

自上次采样后,索引扫描差

idx_tup_fetch bigint

自上次扫描后,元组读取差

n_tup_ins bigint

自上次扫描后,插入元组数量差

n_tup_upd bigint

自上次扫描后,更新元组数量差

n_tup_del bigint

自上次扫描后,更新元组数量差

n_tup_hot_upd bigint

自上次扫描后,热更元组数量差

n_live_tup bigint

在线元组数

n_dead_tup bigint

无效元组数

n_mod_since_analyze bigint

自analyze后,修改的数量

n_ins_since_vacuum bigint

自vacuum后,插入的数量

sample_id timestamp with time zone

上次vacuum时间

last_autovacuum timestamp with time zone

上次autovacuum时间

last_analyze timestamp with time zone

上次analyze时间

last_autoanalyze timestamp with time zone

上次autoanalyze时间

vacuum_count bigint

自上次采样后,vacumm数量差

autovacuum_count bigint

自上次采样后,autovacumm数量差

analyze_count bigint

自上次采样后,analyze数量差

autoanalyze_count bigint

自上次采样后,auto analyze 数量差

heap_blks_read bigint

自上次采样后,堆块读取数量差

heap_blks_hit bigint

自上次采样后,堆块命中数量差

idx_blks_read bigint

自上次采样后,索引块读取数量差

toast_blks_read integer

自上次采样后,toast块读取数量差

toast_blks_hit integer

自上次采样后,toast块命中数量差

tidx_blks_read integer

自上次采样后,toast块命中数量差

tidx_blks_hit integer

自上次采样后,toast索引块命中数量差

relsize integer

Toast表大小

relsize_diff integer

自上次采样后,toast表大小差


E.20.2.1.21. sample_stat_tables_total

表采样统计,以服务器,采样ID,数据库ID,表类型,表空间ID为组。

Table E.24. sample_stat_tables_total Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

datid oid

数据库OID

sample_id oid

表空间OID

relkind char(1)

表类型

seq_scan bigint

自上次采样,总顺序扫描数

seq_tup_read bigint

自上次采样,总元组读取数

idx_scan bigint

自上次采样,总索引扫描数

idx_tup_fetch bigint

自上次采样,总索引元组获取数

n_tup_ins bigint

自上次采样,总元组插入数

n_tup_upd bigint

自上次采样,总元组更新数

n_tup_del bigint

自上次采样,总元组删除数

n_tup_hot_upd bigint

自上次采样,总元组热更数

sample_id bigint

采样ID

vacuum_count bigint

自上次采样,总vacuum数

autovacuum_count bigint

自上次采样,总autovacuum数

analyze_count bigint

自上次采样,总analyze数

autoanalyze_count bigint

自上次采样,总 auto analyze 数

heap_blks_read bigint

自上次采样,总堆块读取数

heap_blks_hit bigint

自上次采样,总堆块命中数

idx_blks_read bigint

自上次采样,总的索引块读取数

idx_blks_hit bigint

自上次采样,总的索引块命中数

toast_blks_read bigint

自上次采样,总的toast块读取数

toast_blks_hit bigint

自上次采样,总的toast块命中数

tidx_blks_read bigint

自上次采样,总的toast索引块读取数

tidx_blks_hit bigint

自上次采样,总的toast索引块命中数

relsize_diff bigint

自上次采样,磁盘空间占用差


E.20.2.1.22. indexes_list

采样索引列表,包含索引名字,模式。

Table E.25. indexes_list Columns

列类型

描述

server_id integer

服务器ID

datid oid

数据库ID

indexrelid oid

索引OID

relid oid

此索引所在的表的OID

schemaname name

表模式

indexrelname name

表名字


E.20.2.1.23. sample_stat_indexes

索引采样统计。

Table E.26. samples Columns

列类型

描述

server_id integer

服务器ID

datid oid

数据库OID

tablespaceid oid

表空间OID

idx_scan bigint

自上次采样,索引扫描差

idx_tup_read bigint

自上次采样,索引元组读取差

idx_tup_fetch bigint

自上次采样,索引元组获取差

idx_blks_read bigint

自上次采样,索引块读取差

idx_blks_hit bigint

自上次采样,索引块命中差

relsize bigint

索引当前占用的磁盘空间

relsize_diff bigint

自上次采样,索引占用空间差

indisunique bigint

真,如果是唯一索引


E.20.2.1.24. sample_stat_indexes_total

索引采样统计。以服务器ID,采样ID,数据库ID,表空间ID分组。

Table E.27. sample_stat_indexes_total Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

datid oid

数据库OID

tablespaceid oid

表空间OID

idx_scan bigint

自上次采样,总索引扫描数

idx_tup_read bigint

自上次采样,总索引元组读取数

idx_tup_fetch bigint

自上次采样,总索引元组获取数

idx_blks_read bigint

自上次采样,总索引块读取数

idx_blks_hit bigint

自上次采样,总索引块命中数

relsize_diff bigint

自上次采样,索引占用空间差


E.20.2.1.25. funcs_list

采样函数列表。

Table E.28. funcs_list Columns

列类型

描述

server_id integer

服务器ID

datid integer

数据库OID

funcid oid

函数OID (参考:pg_proc.oid)

schemaname name

函数模式 (参考 pg_namespace.schemaname)

funcname name

函数名 (参考 pg_proc.proname)

funcargs text

函数参数


E.20.2.1.26. sample_stat_user_functions

用户函数采样统计。

Table E.29. sample_stat_user_functions Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

datid oid

数据库OID

funcid oid

函数OID (参考 pg_proc.oid)

calls bigint

自上次采样,函数调用差

total_time double precision

自上次采样,函数总调用差

self_time double precision

自上次采样,函数自身调用差

trg_fn boolean

真,如果函数为触发器


E.20.2.1.27. sample_stat_user_func_total

用户函数采样统计,以服务器ID,采样ID,数据库尖,触发函数分组。

Table E.30. samples Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

datid oid

数据库OID

calls bigint

自上次采样,调用次数

total_time double precision

自上次采样,总调用次数

trg_fn boolean

真,如果函数为触发器


E.20.2.1.28. sample_stat_cluster

集群采样统计。

Table E.31. sample_stat_cluster Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

checkpoints_timed bigint

自上次采样,checkpoint数量差

checkpoints_req bigint

自上次采样,请求的checkpoint数量差

checkpoint_write_time double precision

自上次采样,累积checkpoint写时间差(单位:毫秒)

checkpoint_sync_time double precision

自上次采样,累积checkpoint同步时间差(单位:毫秒)

buffers_checkpoint bigint

自上次采样,checkpoint写缓存时间差(单位:毫秒)

buffers_clean bigint

自上次采样,脏缓存写入数量差

maxwritten_clean bigint

自上次采样,最大写入差 (当 written >= bgwriter_lru_maxpages 时计1)

buffers_backend bigint

自上次采样,后台请求写入缓存数量差

buffers_backend_fsync bigint

自上次采样,后台fsync次数差

buffers_alloc bigint

自上次采样,缓存分配差

stats_reset timestamp with time zone

pg stat上次重置时间

wal_size bigint

自上次采样,WAL大小差 (wal_size 通过 pg_wal_lsn_diff计算)


E.20.2.1.29. sample_stat_archiver

归档采样统计,包含成功或失败的次数及时间。

Table E.32. sample_stat_archiver Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

archived_count integer

上次归档成功数

last_archived_wal integer

上次归档 wal 文件

last_archived_time integer

Last archive timestamp

failed_count integer

上次归档失败数

last_failed_wal integer

上次归档 wal 文件

last_failed_time integer

上次归档失败时间

stats_reset integer

上次归档的重置时间


E.20.2.1.30. sample_stat_tables_failures

表磁盘空间计算采样统计。

Table E.33. sample_stat_tables_failures Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

datid oid

数据库OID

relid oid

表OID(参考 pg_class.oid)

size_failed boolean

真,计算表磁盘空间成功

toastsize_failed boolean

真,计算toast表磁盘空间失败


E.20.2.1.31. sample_stat_indexes_failures

索引失败采样统计。

Table E.34. sample_stat_indexes_failures Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

datid oid

数据库OID

indexrelid oid

索引OID (参考 pg_index.indexrelid)

size_failed boolean

真,计算索引磁盘空间失败


E.20.2.1.32. lt_stat_backend_type_id_text

此表用于将后台进程类型的ID和显示文本进行关联,后台类型可以为 autovacuum launcher, autovacuum worker, client backend, background worker, background writer etc。一旦有新的后台类型添加,我们也需要将其添加到此表中,此表于 LightDB 23.2 ,lt_profile 0.3.7添加 。

Table E.35. lt_stat_backend_type_id_text Columns

列类型

描述

backend_type integer

后台类型ID

backend_type_text text

后台类型显示文本


E.20.2.1.33. lt_stat_cost_type_id_text

此关用于将开销类型的ID及显示文本进行关联,开销类型有 DB Time, DB Wait, DB CPU. 自 LightDB 23.2 ,lt_profile 0.3.7 可用。

Table E.36. lt_stat_cost_type_id_text Columns

列类型

描述

cost_type integer

开销ID

cost_type_text text

开销显示文本


E.20.2.1.34. lt_stat_wait_evt_id_text

此表用于关联事件ID和事件显示文本。自 Available since LightDB 23.2 ,lt_profile 0.3.7 可用。

Table E.37. lt_stat_wait_evt_id_text Columns

列类型

描述

evt_id integer

事件类型ID

evt_id_text text

事件类型显示文本


E.20.2.1.35. lt_stat_wait_evt_sub_id_text

此表用于关联子子件事ID以及子事件显示文本。自 LightDB 23.2 ,lt_profile 0.3.7 可用。

Table E.38. lt_stat_wait_evt_sub_id_text Columns

列类型

描述

evt_id integer

子事件ID (参考 lt_stat_wait_evt_id_text.evt_id)

evt_sub_id integer

事件ID

evt_sub_id_text text

子事件显示文本


E.20.2.1.36. lt_stat_cost_1s

各事件累积时间开销统计,包含 DB Time, DB Wait。默认情况下新的采样数据每秒采样一次,然后插入此表。自 LightDB 23.2 ,lt_profile 0.3.7 。

Table E.39. lt_stat_cost_1s Columns

列类型

描述

bg_type INT

后台进程类型ID

cost_type INT

采样开销类型ID

evt_id INT

采样事件ID

evt_sub_id INT

采样子事件ID

cost BIGINT

总开销(单位:微秒)


E.20.2.1.37. lt_stat_cost_60s

数据库等待事件采样统计,默认以1分钟为间隔进行归档。触发函数“collect_activity_profile” ,自 LightDB 23.2 ,lt_profile 0.3.7。

Table E.40. lt_stat_cost_60s Columns

列类型

描述

bg_type INT

后台进程类型ID

cost_type INT

采样开销类型ID

evt_id INT

采样事件ID

evt_sub_id INT

采样子事件ID

cost BIGINT

总开销时间(单位:微秒)


E.20.2.1.38. lt_stat_cost_600s

数据库等待事件采样统计,默认以10分钟为间隔进行归档。触发函数“collect_activity_profile” ,自 LightDB 23.2 ,lt_profile 0.3.7。

Table E.41. lt_stat_cost_600s Columns

列类型

描述

server_id integer

服务器ID

sample_id integer

采样ID

bg_type INT

后台进程类型ID

cost_type INT

采样开销类型ID

evt_id INT

采样事件ID

evt_sub_id INT

采样子事件ID

cost BIGINT

总开销时间(单位:微秒)


E.20.3. 先决条件

尽管通常将lt_profile安装在目标集群中,但它也可以从其他集群中收集性能数据。因此,我们有lt_profile数据库和服务器的先决条件。

E.20.3.1. lt_profile数据库的先决条件

lt_profile扩展依赖于plpgsql, dblinkltfce 扩展。

E.20.3.2. 服务器的先决条件

考虑设置以下统计收集器参数:

 track_activities = on
 track_counts = on
 track_io_timing = on
 track_functions = all/pl

要在报告中获取语句统计信息,连接字符串中提到的数据库必须配置了lt_stat_statements扩展程序。设置lt_stat_statements参数以满足您的需求(请参阅LightDB文档):

  • lt_stat_statements.max - 如果此参数设置过低,则可能会导致在采样之前某些语句统计信息被清除。如果您的lt_stat_statements.max似乎过小,报告将警告您。

  • lt_stat_statements.track = 'top' -使用all值将影响报告中与语句相关的部分的%Total字段的准确性。

E.20.4. 创建扩展

最简单的方法是将所有内容都安装在数据库的公共模式中:

 
 lightdb@postgres=# CREATE EXTENSION dblink;
 lightdb@postgres=# CREATE EXTENSION lt_stat_statements;
 lightdb@postgres=# CREATE EXTENSION lt_stat_activity;
 lightdb@postgres=# CREATE EXTENSION system_stats;
 lightdb@postgres=# CREATE EXTENSION system_stats;
 lightdb@postgres=# CREATE SCHEMA IF NOT EXISTS lt_catalog;
 lightdb@postgres=# CREATE EXTENSION ltfce SCHEMA lt_catalog;
 lightdb@postgres=# CREATE EXTENSION lt_profile;

如果您想将lt_profile安装在其他模式中,只需创建该模式,并在该模式中安装扩展程序:

 
 lightdb@postgres=# CREATE EXTENSION dblink;
 lightdb@postgres=# CREATE EXTENSION lt_stat_statements;
 lightdb@postgres=# CREATE EXTENSION lt_stat_activity;
 lightdb@postgres=# CREATE EXTENSION system_stats;
 lightdb@postgres=# CREATE SCHEMA IF NOT EXISTS lt_catalog;
 lightdb@postgres=# CREATE EXTENSION ltfce SCHEMA lt_catalog;
 lightdb@postgres=# CREATE SCHEMA profile;
 lightdb@postgres=# CREATE EXTENSION lt_profile SCHEMA profile;

所有对象将在SCHEMA子句定义的模式中创建。在专用模式中安装是推荐的方式 - 扩展将创建自己的表、视图、序列和函数。将它们分开是个好主意。如果您在使用模块时不想指定模式限定符,请考虑更改search_path设置。

E.20.5. 权限

使用超级用户权限使用lt_profile没有任何问题,但如果您想避免使用超级用户权限,请参考以下指南:

E.20.5.1. 关于lt_profile数据库

创建一个非特权用户:

 create role profile_usr password 'pwd';

创建lt_profile安装的模式:

 create schema profile authorization profile_usr;

授予对dblink扩展所在模式的使用权限:

 grant usage on schema public to profile_usr;

使用profile_usr帐户创建扩展:

lightdb@postgres=> create extension lt_profile schema profile;

E.20.5.2. 关于服务器数据库

创建一个用于连接lt_profile的用户:

create role profile_mon password 'pwd_mon';

确保该用户具有连接到群集中任何数据库的权限(默认情况下为是),并且lt_hba.conf将允许来自lt_profile数据库主机的此类连接。此外,我们需要pg_read_all_stats权限,并在pg_stat_statements_reset上执行权限:

grant pg_read_all_stats to profile_mon;
grant execute on function pg_stat_statements_reset TO profile_mon;

E.20.5.3. 在lt_profile数据库上设置服务器

非超级用户无法在没有密码的情况下建立连接。提供密码的最佳方法是使用密码文件。

注意:lt_profile将连接到服务器上的所有数据库,因此密码文件必须使用通配符作为数据库名称。

作为一种不安全的方式,您可以在连接字符串中提供密码:

select server_connstr('local','dbname=postgres port=5432 user=profile_mon password=pwd_mon');

E.20.6. 使用lt_profile

E.20.6.1. 设置扩展参数

您可以在lightdb.conf中定义扩展参数。默认值如下:

  • lt_profile.topn = 10 - 每个排序报告表中要报告的顶部对象(语句、关系等)数量。此参数还影响样本的大小 - 您希望在报告中出现的对象越多,我们需要在样本中保留的对象就越多。

  • lt_profile.max_sample_age = 7 - 样本的保留时间(以天为单位)。年龄大于lt_profile.max_sample_age天的样本将在下一次take_sample()调用时自动删除。

  • lt_profile.track_sample_timings = on - 当此参数打开时,lt_profile将跟踪详细的样本采取时间。

E.20.6.2. 管理服务器

安装后,扩展将创建一个启用的local服务器 - 这是安装扩展的集群。

服务器管理函数:

  • create_server(server_name, server_connstr text, server_enabled boolean = TRUE, max_sample_age integer = NULL, description text = NULL) - 创建一个新的服务器描述函数参数:

    • server - 服务器名称(必须唯一)

    • server_connstr - 服务器连接字符串

    • enabled - 服务器启用标志。当设置时,服务器将包括在通用的take_sample()调用中

    • max_sample_age - 服务器样本保留参数覆盖了这个服务器的全局lt_profile.max_sample_age设置

    • description - 服务器描述文本。将包括在报告中

  • drop_server(server_name) - 删除一个服务器及其所有样本。

  • enable_server(server_name) - 将服务器包括在通用的take_sample()调用中。

  • disable_server(server_name) - 将服务器从通用的take_sample()调用中排除。

  • rename_server(server_name, new_name) - 重命名服务器。

  • set_server_max_sample_age(server_name, max_sample_age integer) - 为服务器设置新的保留期(以天为单位)。max_sample_age是整数值。要重置服务器的max_sample_age设置,请将其设置为NULL。

  • set_server_db_exclude(server_name, exclude_db name[]) - 为服务器设置排除数据库列表。在集群中无法连接到某些数据库的情况下使用(例如在Amazon RDS实例中)。

  • set_server_connstr(server_name, new_connstr text) - 为服务器设置新的连接字符串。

  • set_server_description(server_name, description text) - 设置新的服务器描述。

  • show_servers() - 显示现有的服务器。

服务器创建示例:

SELECT server_new('omega','host=name_or_ip dbname=postgres port=5432');

E.20.6.3. 稀有关系尺寸收集

LightDB关系大小函数可能需要相当长的时间来收集数据库中所有关系的大小。此外,这些函数需要AccessExclusiveLock锁定关系。但是,每天收集关系大小可能已经足够。在服务器大小收集策略指导下,lt_profile可以跳过关系大小收集。策略定义为允许收集关系大小的每日窗口,以及收集关系大小的两个样本之间的最小间隔。因此,当定义大小收集策略时,采样函数仅在窗口中采取样本并且具有大小的前一个样本比间隔旧时才会收集关系大小。函数set_server_size_sampling定义了此策略:

  • set_server_size_sampling(server_name, window_start time with time zone = NULL, window_duration interval hour to second = NULL, sample_interval interval day to minute = NULL)

    • server - 服务器名称

    • window_start - 大小收集窗口的开始时间

    • window_duration - 大小收集窗口的持续时间

    • sample_interval - 两个具有收集关系大小的样本之间的最小时间间隔。只有设置了所有三个参数,大小收集策略才能被定义。

示例:

SELECT set_server_size_sampling('local','23:00+03',interval '2 hour',interval '8 hour');

函数show_servers_size_sampling显示了所有服务器定义的大小收集策略:

lightdb@postgres=# SELECT * FROM show_servers_size_sampling();
 server_name | window_start | window_end  | window_duration | sample_interval
-------------+--------------+-------------+-----------------+-----------------
 local       | 23:00:00+03  | 01:00:00+03 | 02:00:00        | 08:00:00

当你在两个样本之间生成报告时,如果其中一个样本缺少关系大小数据,那么关系增长部分将从报告中排除。但是,报告生成函数的with_growth参数将扩展报告边界到最近收集到关系大小数据的样本。计算表的顺序扫描容量和索引的显式清理负载需要关系大小。当使用稀有关系大小收集时,相应的报告部分数据基于线性插值。

E.20.6.4. 样本

每个样本都包含有关自上一个样本以来数据库工作负载的统计信息。

E.20.6.4.1. 样本函数
  • take_sample()函数将为所有enabled服务器收集样本。服务器样本将一个接一个地串行获取。函数返回一个表:

    server      name,
    result      text,
    elapsed     interval

    其中:

    • server 是服务器名称

    • result 是采样结果。如果成功采样,它可以是“OK”,在异常情况下将包含错误文本

    • elapsed 是采样server所花费的时间。这种返回值使得使用SQL查询轻松控制样本的创建。

  • take_sample_subset([sets_cnt integer], [current_set integer]) 由于串行采样处理,take_sample()函数可能需要相当长的时间。函数take_sample_subset()将为一组启用的服务器采集样本。这对于并行采集样本非常方便。 sets_cnt是服务器子集的数量。 current_set是要处理的子集,取值介于0和sets_cnt-1之间。函数返回一个表:

    server      name,
    result      text,
    elapsed     interval

    其中:

    • server 是服务器名称

    • result 是取样的结果。如果取样成功,则可以为“OK”,如果出现异常,则包含错误文本。

    • elapsed 是为 server 取样所经过的时间。

  • take_sample(server name [, skip_sizes boolean]) 将为指定的服务器收集一个样本。例如,当您想要使用不同的采样频率,或者想在服务器上进行显式采样时,可以使用它。

    • server - 要取样的服务器名称

    • skip_sizes - 覆盖服务器关系大小收集策略。当省略或设置为 null 的 skip_size 参数时,该策略才会应用。如果 skip_sizes 参数的值为 false,则采样时将包括关系大小,而如果为 true,则在采样过程中将跳过关系大小的收集。

  • show_samples([server name,] [days integer]) 返回一个表,包含一个 server 的现有样本(如果省略 server,则默认为本地服务器),以及最近 days 天的样本(如果省略,则返回所有现有样本):

    sample            integer,
    sample_time       timestamp (0) with time zone,
    dbstats_reset     timestamp (0) with time zone,
    clustats_reset    timestamp (0) with time zone,
    archstats_reset   timestamp (0) with time zone

    其中:

    • sample 是样本标识符

    • sample_time 是取样时间

    • dbstats_resetclustats_resetarchstats_reset 通常为 null,但如果自上一个样本以来发生了重置,则会包含 pg_stat_databasepg_stat_bgwriterpg_stat_archiver 的统计信息重置时间戳。采样收集函数还支持服务器存储库 - 它将根据 保留策略 删除过时的样本和基线。

E.20.6.4.2. 取样

您必须创建至少 2 个样本,才能在第 1 个和第 2 个样本之间构建您的第一个报告。通过调用 take_sample() 函数来为所有启用的服务器采样。无需频繁地创建样本 - 通常每小时一个或两个样本就足够了。您可以使用类似 cron 的工具来安排采样的创建。以下是一个间隔为 30 分钟的示例:

*/30 * * * *   ltsql -c 'SELECT take_sample()' > /dev/null 2>&1

然而,这样的调用没有对 take_sample() 函数结果进行错误检查。考虑更加智能地使用 take_sample() 函数,将结果提供给您的监控系统。

对于所有成功采样的服务器,函数将返回“OK”,并显示失败服务器的错误文本:

select * from take_sample();
  server   |                                   result                                    |   elapsed
-----------+-----------------------------------------------------------------------------+-------------
 ok_node   | OK                                                                          | 00:00:00.48
 fail_node | could not establish connection                                             +| 00:00:00
           | SQL statement "SELECT dblink_connect('server_connection',server_connstr)"  +|
           | PL/pgSQL function take_sample(integer) line 69 at PERFORM                  +|
           | PL/pgSQL function take_sample_subset(integer,integer) line 27 at assignment+|
           | SQL function "take_sample" statement 1                                     +|
           | FATAL:  database "nodb" does not exist                                      |
(2 rows)
E.20.6.4.3. 采样数据保留

我们无法永远存储样本数据,因此我们有一个保留策略。您可以在三个层面上定义保留:

  • 在 lightdb.conf 文件中设置参数 lt_profile.max_sample_age。这是一个通用的保留策略,如果没有其他保留策略被定义,则该策略生效。

  • 在创建服务器时,可以定义服务器的 max_sample_age 设置,或使用 set_server_max_sample_age() 函数为现有服务器设置。此设置将覆盖特定服务器的全局 lt_profile.max_sample_age 设置。

  • 创建一个基线(见下文)。基线将以最高优先级覆盖包含样本的保留期。

E.20.6.4.4. 列出样本

使用 show_samples() 函数获取存储库中现有样本的列表。此函数将显示检测到的统计信息重置时间。

E.20.6.4.5. 取样时间

当参数 lt_profile.track_sample_timings 开启时,lt_profile 将收集详细的取样时间统计信息。结果可以从 v_sample_timings 视图中获取。 v_sample_timings 字段说明:

  • server_name - 取样的服务器名称

  • sample_id - 样本标识符

  • sample_time - 取样时间

  • event - 取样阶段

  • time_spent - 事件中花费的时间

事件描述:

  • total - 取样(所有阶段)。

  • connect - 建立到服务器的 dblink 连接。

  • get server environment - 获取服务器 GUC 参数、可用的扩展等。

  • collect database stats - 查询 pg_stat_database 视图以获取关于数据库的统计信息。

  • calculate database stats - 计算自上次取样以来数据库的差异统计信息。

  • collect tablespace stats - 查询 pg_tablespace 视图以获取关于表空间的统计信息。

  • collect statement stats - 使用 lt_stat_statements 扩展收集语句的统计信息。

  • query pg_stat_bgwriter - 使用 pg_stat_bgwriter 视图收集集群统计信息。

  • query pg_stat_archiver - 使用 pg_stat_archiver 视图收集集群统计信息。

  • collect object stats - 收集数据库对象的统计信息。包括以下事件:

    • db:dbname collect tables stats - 收集 dbname 数据库中表的统计信息。

    • db:dbname collect indexes stats - 收集 dbname 数据库中索引的统计信息。

    • db:dbname collect functions stats - 收集 dbname 数据库中函数的统计信息。

  • maintain repository - 执行支持例程。

  • calculate tablespace stats - 计算表空间的差异统计信息。

  • calculate object stats - 计算数据库对象的差异统计信息。包括以下事件:

    • calculate tables stats - 计算所有数据库中表的差异统计信息。

    • calculate indexes stats - 计算所有数据库中索引的差异统计信息。

    • calculate functions stats - 计算所有数据库中函数的差异统计信息。

  • calculate cluster stats - 计算集群差异统计信息。

  • calculate archiver stats - 计算归档器的差异统计信息。

  • delete obsolete samples - 删除过时的基线和样本。

E.20.6.5. 基线

基线是一个命名的样本序列,具有自己的保留设置。基线可以用作报告构建函数的样本间隔。未定义的基线保留意味着无限保留。您可以使用基线保存关于某个时间段内数据库工作负载的信息。例如,您可能希望保存在负载测试期间收集的样本,或者在您的系统上进行定期负载以供以后参考。基线管理函数:

  • create_baseline([server name,] baseline_name varchar(25), start_id integer, end_id integer [, days integer]) - 创建一个基线

    • server - 服务器名称。如果省略,则默认为本地服务器

    • name - 基线名称。每个基线必须在服务器内具有唯一的名称。

    • start_id, end_id - 基线中包含的第一个和最后一个样本。

    • days - 基线保留时间。以整数天数自 now() 开始定义。此参数可以省略(或设置为 null),表示无限保留。

  • create_baseline([server name,] baseline_name varchar(25), time_range tstzrange [, days integer]) - 创建一个基线

    • server - 服务器名称。如果省略,则默认为本地服务器

    • name - 基线名称。每个基线必须在服务器内具有唯一的名称。

    • time_range - 基线时间间隔。基线将包括所有可用的样本,重叠此间隔。

    • days - 基线保留时间。以整数天数自now()起定义。 此参数可以省略(或设置为null),表示无限保留。

  • drop_baseline([server name,] name varchar(25)) - 删除基线

    • server - 服务器名称。 如果省略,则假定为本地服务器。

    • name - 要删除的基线名称。 删除基线并不意味着立即删除其所有样本,它们只是从基线中排除, 因此不再受基线保留的覆盖。

  • keep_baseline([server name,] name varchar(25) [, days integer]) - 更改基线的保留时间

    • server - 服务器名称。 如果省略,则假定为本地服务器。

    • name - 基线名称。 此参数可以省略(或设置为null)以更改所有现有基线的保留时间。

    • days - 基线保留时间,以自now()起的天数计算。 此参数可以省略(或设置为null),以设置无限保留。

  • show_baselines([server name]) - 显示现有的基线。 调用此函数以获取有关现有基线(名称、采样间隔和保留时间)的信息。

    • server - 服务器名称。 如果省略,则假定为本地服务器。

    lightdb@postgres=# SELECT * FROM baseline_show('local');

E.20.6.6. 数据导出和导入

可以从lt_profile扩展的实例中导出收集的样本,然后加载到另一个实例中。 当您想要将服务器从一个实例移动到另一个实例时,或者当您需要将收集的数据发送给支持团队时,此功能非常有用。

E.20.6.6.1. 数据导出

使用函数export_data()将数据导出为常规表格。 您可以使用任何方法从数据库中导出此表格。例如,您可以使用ltsql的copy命令获取单个.csv文件:

lightdb@postgres=# \copy (select * from export_data()) to 'export.csv'

默认情况下,export_data()函数将导出所有配置服务器的所有样本。 但是,您可以将导出限制为仅限一个服务器,并进一步限制样本范围:

  • export_data([server name, [min_sample_id integer,] [max_sample_id integer]] [, obfuscate_queries boolean]) - 导出收集的数据

    • server是服务器名称。 如果省略,则假定为所有服务器。

    • min_sample_idmax_sample_id - 导出边界样本标识符(包括)。 min_sample_id边界的空值导出所有样本,直到max_sample_idmax_sample_id边界的空值导出自min_sample_id以来的所有样本。

    • obfuscate_queries - 仅在您想要隐藏查询文本时使用此参数 - 它们将导出为MD5哈希值。

E.20.6.6.2. 数据导入

数据只能从本地表格导入,因此需要先加载先前导出的数据。在我们的情况下,使用copy命令:

lightdb@postgres=# CREATE TABLE import (section_id bigint, row_data json);
CREATE TABLE
lightdb@postgres=# \copy import from 'export.csv'
COPY 6437

现在,我们可以执行数据导入,并将此表格提供给import_data()函数:

lightdb@postgres=# SELECT * FROM import_data('import');

尽管也导入了服务器描述,但是具有匹配名称的本地lt_profile服务器将禁止导入操作。 考虑暂时重命名这些服务器。如果您需要为先前导入的服务器导入新数据,则它们将通过系统标识符进行匹配,因此可以自由地将导入的服务器重命名为您想要的名称。 所有服务器都以禁用状态导入。 import_data()函数只接受导入的表格:

  • import_data(data regclass)

    • data - 包含导出数据的表格。此函数返回实际加载到扩展表格中的行数。 成功导入操作后,可以删除import表格。

E.20.6.7. 报告

报告是由报告函数生成的HTML标记,其中包含有关报告间隔期间实例工作量的统计信息。

E.20.6.7.1. PWR报告函数
  • get_pwr([服务器名称,] 起始样本ID整数, 结束样本ID整数 [, 描述文本 [, 是否包括增长值 布尔型]]) - 根据样本标识生成PWR报告

  • get_pwr([服务器名称,] 时间范围 tstzrange [, 描述文本 [, 是否包括增长值 布尔型]]) - 生成最短样本间隔的PWR报告,覆盖提供的时间范围

  • get_pwr([服务器名称], 基线 varchar(25) [, 描述文本 [, 是否包括增长值 布尔型]]) - 使用基线作为样本间隔生成PWR报告

  • get_pwr_latest([服务器名称]) - 生成最近两个样本的PWR报告。函数参数:

    • server - 服务器名称。 如果省略,则默认为local服务器。

    • start_id - 间隔开始的样本标识符

    • end_id - 间隔结束的样本标识符

    • time_range - 时间范围 (tstzrange类型)

    • baseline - 基线名称

    • with_growth - 一个标志,请求将间隔扩展到最近的边界并使用关联的增长数据。默认值为false

    • description - 文本备忘录,将包含在报告中作为报告描述。

E.20.6.7.2. PSH报告函数
  • get_psh([服务器名称,] 起始样本ID整数, 结束样本ID整数 [, 描述文本 [, 是否包括增长值 布尔型]]) - 根据样本标识符生成PSH报告

  • get_psh([服务器名称,] 时间范围 tstzrange [, 描述文本 [, 是否包括增长值 布尔型]]) - 生成最短样本间隔的PSH报告,覆盖提供的时间范围

  • get_psh([服务器名称], 基线 varchar(25) [, 描述文本 [, 是否包括增长值 布尔型]]) - 使用基线作为样本间隔生成PSH报告

  • get_psh_latest([服务器名称]) - 生成最近两个样本的PSH报告。函数参数:

    • server - 服务器名称。 如果省略,则默认为local服务器。

    • start_id - 间隔开始的样本标识符

    • end_id - 间隔结束的样本标识符

    • time_range - 时间范围 (tstzrange类型)

    • baseline - 基线名称

    • with_growth - 一个标志,请求将间隔扩展到最近的边界并使用关联的增长数据。默认值为false

    • description - 文本备忘录,将包含在报告中作为报告描述。

报告生成示例:

$ ltsql -Aqtc "SELECT get_pwr(480,482)" -o report_480_482.html

对于任何其他服务器,请使用它的名称:

$ ltsql -Aqtc "SELECT get_pwr('omega',12,14)" -o report_omega_12_14.html

使用时间范围生成报告:

ltsql -Aqtc "select get_psh(tstzrange('2020-05-13 11:51:35+03','2020-05-13 11:52:18+03'))" -o report_range.html

此外,时间范围对于生成周期性报告非常有用。我们来生成最近24小时的报告:

ltsql -Aqtc "select get_psh(tstzrange(now() - interval '1 day',now()))" -o last24h_report.html

现在,您可以使用任何Web浏览器查看报告文件。

E.20.7. PWR报告中的节

本节描述了报告表及其列。

E.20.7.1. 服务器统计信息

E.20.7.1.1. CPU使用率统计信息

包含CPU使用情况统计数据,例如报告开头和结尾的用户CPU、系统CPU、空闲CPU和IOWait。

  • %User - 用户CPU百分比

  • %System - 系统CPU百分比

  • %Idle - 空闲CPU百分比

  • %IO Wait - IOWait CPU百分比

E.20.7.1.2. 数据库内存使用情况统计数据

包含LightDB在报告开头和结尾的内存使用情况统计数据。

  • 主机内存(MB) - 主机的总物理内存

  • 共享内存使用(MB) - LightDB使用的共享内存,由LightDB服务器的所有进程使用

  • 本地内存使用(MB) - LightDB使用的本地内存,由每个后端进程为自己的使用分配

  • 用于共享内存+本地内存的主机内存使用率(%) - 共享内存和本地内存占主机总内存的百分比

E.20.7.1.3. 数据库统计数据

包含报告间隔期间每个数据库的统计数据,基于pg_stat_database视图。

  • 数据库 - 数据库名称

  • 事务 - 数据库事务统计数据

    • 提交 - 已提交事务的数量(xact_commit

    • 回滚 - 已回滚事务的数量(xact_rollback

    • 死锁 - 检测到的死锁数量(deadlocks

  • 块统计数据 - 数据库块读取和命中统计数据

    • 命中率(%) - 缓冲区高速缓存命中比率

    • 读取 - 在此数据库中读取的磁盘块数(blks_read

    • 命中 - 在缓冲区高速缓存中已经发现磁盘块的次数(blks_hit

  • 元组 - 元组统计数据部分

    • 返回的 - 返回的元组数量(tup_returned

    • 获取的 - 获取的元组数量(tup_fetched

    • 插入的 - 插入的元组数量(tup_inserted

    • 更新的 - 更新的元组数量(tup_updated

    • 删除的 - 删除的元组数量(tup_deleted

  • 临时文件 - 临时文件统计数据

    • 大小 - 由此数据库中的查询写入临时文件的数据总量(temp_bytes

    • 文件 - 此数据库中的查询创建的临时文件数量(temp_files

  • 大小 - 报告间隔结束时的数据库大小(pg_database_size()

  • 增长 - 报告间隔期间的数据库增长量(pg_database_size()差异)

E.20.7.1.4. 按数据库统计的语句统计数据

包含pg_stat_statements数据的每个数据库的聚合总统计数据(如果在报告间隔期间可用lt_stat_statements扩展)

  • 数据库 - 数据库名称

  • 调用 - 所有语句执行的总次数(calls的总和)

  • 时间 (s) - 花费的时间(秒)

    • 计划 - 花费的规划时间 (total_plan_time的总和) - 自lt_stat_statements 1.8版本后可用

    • 执行 - 花费的执行时间 (total_timetotal_exec_time的总和)

    • 读取 - 花费的读取时间 (blk_read_time的总和)

    • 写入 - 花费的写入时间 (blk_write_time的总和)

    • 触发器 - 花费的触发器函数执行时间

  • 获取块数 - 从磁盘和缓存中获取的总块数

    • 共享 - 获取的共享块数(shared_blks_read + shared_blks_hit的总和)

    • 本地 - 获取的本地块数(local_blks_read + local_blks_hit的总和)

  • 脏块数 - 数据库中被修改的总块数

    • 共享 - 数据库中被修改的共享块数(shared_blks_dirtied的总和)

    • 本地 - 数据库中被修改的本地块数(local_blks_dirtied的总和)

  • 临时块数 - 用于操作(例如连接和排序)的块数

    • 读取 - 读取的块数(temp_blks_read的总和)

    • 写入 - 写入的块数(temp_blks_written的总和)

  • 本地块数 - 用于临时表的块数

    • 读取 - 读取的块数(local_blks_read的总和)

    • 写入 - 写入的块数(local_blks_written的总和)

  • 语句数 - 捕获的语句的总数

  • WAL 大小 - 语句生成的 WAL 总量(wal_bytes的总和)

E.20.7.1.5. 集群统计信息

此表包含来自 pg_stat_bgwriter 视图的数据

  • 计划检查点 - 完成的检查点总数,由于 checkpoint_timeout 参数而按计划完成(checkpoints_timed 字段)

  • 请求检查点 - 其他检查点的总数:由于 max_wal_sizearchive_timeout 和 CHECKPOINT 命令的值而触发(checkpoints_req 字段)

  • 检查点写入时间 (s) - 写入检查点花费的总时间(checkpoint_write_time 字段)

  • 检查点同步时间 (s) - 同步检查点花费的总时间(checkpoint_sync_time 字段)

  • 检查点缓冲区写入数 - 被检查点进程写入的缓冲区总数(buffers_checkpoint 字段)

  • 后台缓冲区写入数 - 被后台写进程写入的缓冲区总数(buffers_clean 字段)

  • 后端缓冲区写入数 - 被后端进程写入的缓冲区总数(buffers_backend 字段)

  • 后端 fsync 调用数 - 后端进程 fsync 调用的总数(buffers_backend_fsync 字段)

  • Bgwriter 中断(缓冲区过多) - 由于达到 bgwriter_lru_maxpages 参数的值而导致的背景写进程中断总数。

  • 分配的缓冲区数量 - 已分配的缓冲区总数(buffers_alloc字段)

  • WAL 生成量 - WAL 生成的总量(基于pg_current_wal_lsn()

  • 已归档的 WAL 段数 - 已归档的 WAL 段数(基于pg_stat_archiver视图中的archived_count字段)

  • 归档失败的 WAL 段数 - WAL 段归档失败的次数(基于pg_stat_archiver视图中的failed_count字段)

E.20.7.1.6. 表空间统计信息

此表包含有关表空间大小和增长的信息:

  • 表空间 - 表空间名称

  • 路径 - 表空间路径

  • 大小 - 报告间隔内最后一次采样时的表空间大小

  • 增长 - 报告间隔内的表空间增长量

E.20.7.2. 等待事件统计信息

此报告部分包含按等待时间排序的报告间隔内顶部等待事件统计信息表。

E.20.7.2.1. 主要等待事件类别

  • IO - SQL查询时产生的各种文件读写活动。

  • LW Lock - 访问某些需要LW lock的变量或获取LW lock时计数。

E.20.7.2.2. Main wait event categories

  • WALSync - XLOG文件Fsync操作。

  • WALWrite - 写页至XLOG文件。

  • LockManager - 用于预测锁定共享哈希表以减少竞态。

  • WALInsert - LW lock,插入WAL。

  • DataFileExtend - 为表增加一个块。

  • DataFileRead - 读取一个表产生块读。

  • DataFileTruncate - 将关系截断为指定块数。

  • BufFileRead - 加载数据至缓冲区。

  • ProcArray - LW lock,多进程模型下对内存访问时,涉及到的有 ShmemVariableCache,MyPgXact,procArray。

  • RelationMapRead - 从共享或本地MAP文件加载数据。

  • SLRUSync - 缓冲区写入磁盘。

  • SLRUWrite - 写缓冲区后写入磁盘。

  • RegisterSyncRequest - 本地注册的同步请求。

  • XidGen - LW lock,设置并返回下一个 Transaction ID。

  • XactSLRU - LW lock,涉及xlog, clog相关内存。

E.20.7.2.3. 按等待时间排序的顶部等待事件类型

此表包含按等待时间排序的顶部lt_profile.topn等待事件类型。

  • 等待事件类型 - 等待事件类型,每种类型可能包含多个等待事件。

  • 等待时间(秒) - 此类型所有等待事件的总等待时间。

  • %总等待时间 - 此类型的总等待时间占群集中所有事件总等待时间的百分比。

E.20.7.2.4. 按等待时间排序的顶部等待事件

此表包含按等待时间排序的顶部lt_profile.topn等待事件。

  • 等待事件 - 进程正在等待的具体事件。

  • 等待事件类型 - 此事件的类型。

  • 等待时间(秒) - 所有此事件的总等待时间。

  • %总等待时间 - 所有此事件的总等待时间占群集中所有事件总等待时间的百分比。

E.20.7.3. SQL查询统计信息

此报告部分包含按多个重要统计信息排序的报告间隔内顶部语句表。如果在采样时可用,数据将从pg_stat_statements视图中获取。

E.20.7.3.1. 按经过时间排序的顶部 SQL

此表包含按经过时间total_plan_time + total_exec_time排序的顶部lt_profile.topn语句,数据从pg_stat_statements视图中获取。

  • 查询 ID - 数据库、用户和查询文本的哈希值作为查询标识符。与ltcenter工具兼容。十六进制表示的本地pg_stat_statements字段queryid以方括号形式呈现。

  • SQL 文本 - 完整查询的前 100 个字符。

  • 数据库 - 语句所在的数据库名称(从dbid字段派生)

  • %总时间 - 此语句的总时间占群集中所有语句总时间的百分比

  • 时间(秒) - 此语句的执行时间(秒)

    • 经过时间 - 执行此语句所花费的总时间(total_plan_time + total_exec_time

    • 计划 - 执行此语句的计划时间(total_plan_time字段)

    • 执行 - 执行此查询所花费的时间(total_exec_time字段)

  • I/O 时间(秒)

    • Read - 读取块所花费的时间(blk_read_time 字段)

    • Write - 写入块所花费的时间(blk_write_time 字段)

  • Plans - 语句被执行计划的次数(plans 字段)

  • Executions - 语句被执行的次数(calls 字段)

E.20.7.3.2. 计划时间最长的 SQL

按照 pg_stat_statements 视图中的 total_plan_time 字段对前 lt_profile.topn 个语句进行排序

  • Query ID - 数据库、用户和查询文本的哈希值表示的查询标识符。与 ltcenter 工具兼容。原生 pg_stat_statements 字段 qieryid 以十六进制表示,显示在方括号中。

  • SQL Text - 完整查询语句的前100个字符。

  • Database - 语句所在的数据库名称(从 dbid 字段派生而来)

  • 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 字段)

E.20.7.3.3. 执行时间最长的 SQL

按照 pg_stat_statements 视图中的 total_time (或 total_exec_time)字段对前 lt_profile.topn 个语句进行排序

  • Query ID - 数据库、用户和查询文本的哈希值表示的查询标识符。与 ltcenter 工具兼容。原生 pg_stat_statements 字段 qieryid 以十六进制表示,显示在方括号中。

  • SQL Text - 完整查询语句的前100个字符。

  • Database - 语句所在的数据库名称(从 dbid 字段派生而来)

  • Exec (s) - 执行该语句所花费的时间(total_exec_time 字段)

  • %Elapsed - 该语句的执行时间占语句总时间的百分比

  • %Total - 该语句的执行时间占集群中所有语句总执行时间的百分比

  • 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 字段)

E.20.7.3.4. 按执行次数排名的 SQL

pg_stat_statements 视图的 calls 字段排名,取前 lt_profile.topn 条 SQL 语句

  • Query ID - 数据库、用户和查询文本的哈希值,作为查询的标识符。与 ltcenter 工具兼容。方括号中显示十六进制表示的 pg_stat_statements 的原生字段 queryid

  • SQL Text - 完整查询的前100个字符。

  • Database - 语句所在的数据库名称(从 dbid 字段派生)

  • 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 字段)

E.20.7.3.5. 按I/O等待时间排名的 SQL

按读写时间(blk_read_time + blk_write_time)排名,取前 lt_profile.topn 条 SQL 语句

  • Query ID - 数据库、用户和查询文本的哈希值,作为查询的标识符。与 ltcenter 工具兼容。方括号中显示十六进制表示的 pg_stat_statements 的原生字段 queryid

  • SQL Text - 完整查询的前100个字符。

  • Database - 语句所在的数据库名称(从 dbid 字段派生)

  • IO(s) - 语句读写(I/O)所花费的时间,以秒为单位(blk_read_time + blk_write_time 字段)

  • Read(s) - 语句读取所花费的时间,以秒为单位(blk_read_time 字段)

  • Write(s) - 语句写入所花费的时间,以秒为单位(blk_write_time 字段)

  • %Total - 此语句的 I/O 时间占集群中所有语句 I/O 时间的百分比

  • Reads - 由此语句读取的块数,分为三个子列:

    • Shared - 共享读取次数(shared_blks_read 字段)

    • Local - 本地读取次数(local_blks_read 字段)

    • Temp - 读取临时表(temp_blks_read 字段)

  • Writes - 语句写入的块数,分为三个子列:

    • Shared - 共享写入(shared_blks_written 字段)

    • Local - 本地写入(local_blks_written 字段)

    • Temp - 临时表写入(temp_blks_written 字段)

  • Elapsed(s) - 执行此查询所花费的时间,以秒为单位(total_timetotal_exec_time 字段)

  • Executions - 该语句的执行次数(calls 字段)

E.20.7.3.6. 按共享获取的块数排序的顶级 SQL

按读取和命中块排序的前 lt_profile.topn 条语句,有助于检测最多数据处理的语句。

  • Query ID - 由数据库、用户和查询文本的哈希值构成的查询标识符。与 ltcenter 实用程序兼容。用十六进制表示的 pg_stat_statements 原生字段 qieryid 以方括号的形式显示。

  • SQL Text - 完整查询的前 100 个字符。

  • Database - 语句所在数据库的名称(从 dbid 字段派生)

  • Fetched - 获取的块数(表达式:shared_blks_hit + shared_blks_read

  • %Total - 该语句获取的块数占整个集群所有语句获取的块数的百分比

  • Hits(%) - 从缓存中获取的块数在所有获取的块数中所占的百分比

  • Elapsed(s) - 执行此语句所花费的时间,以秒为单位(total_timetotal_exec_time+total_plan_time 字段)

  • Rows - 语句检索或影响的行数(rows 字段)

  • Executions - 该语句的执行次数(calls 字段)

E.20.7.3.7. 按共享读取的块数排序的顶级 SQL

按共享读取次数排序的前 lt_profile.topn 条语句,有助于检测最耗费读取的语句。

  • Query ID - 由数据库、用户和查询文本的哈希值构成的查询标识符。与 ltcenter 实用程序兼容。用十六进制表示的 pg_stat_statements 原生字段 qieryid 以方括号的形式显示。

  • SQL Text - 完整查询的前 100 个字符。

  • Database - 语句所在数据库的名称(从 dbid 字段派生)

  • Reads - 该语句的共享读取块数(shared_blks_read 字段)

  • %Total - 该语句的共享读取块数占整个集群所有语句共享读取块数的百分比

  • Hits(%) - 从缓存中获取的块数在所有获取的块数中所占的百分比

  • Elapsed(s) - 执行此语句所花费的时间,以秒为单位(total_timetotal_exec_time+total_plan_time 字段)

  • Rows - 语句检索或影响的行数(rows 字段)

  • Executions - 该语句的执行次数(calls 字段)

E.20.7.3.8. 按共享脏块数排序的顶级 SQL

按共享脏缓冲区计数排序的前 lt_profile.topn 条语句,可帮助检测最常更改数据的语句。

  • Query ID - 数据库、用户和查询文本的哈希标识符。 兼容 ltcenter 工具。以十六进制表示的 pg_stat_statements 原生字段 qieryid 在方括号中显示。

  • SQL文本 - 完整查询的前100个字符。

  • 数据库 - 语句所在的数据库名称(从 dbid 字段派生)

  • 脏数据块数 - 该语句修改的共享块数(shared_blks_dirtied 字段)

  • %总共 - 该语句修改的共享块数占整个集群所有语句修改的共享块数的百分比

  • 命中率(%) - 从所有获取的块中,从缓存中获取的块的百分比

  • 耗时(s) - 该语句执行的时间,以秒为单位(total_timetotal_exec_time+total_plan_time 字段)

  • 行数 - 语句检索或影响的行数(rows 字段)

  • 执行次数 - 该语句执行的次数(calls 字段)

E.20.7.3.9. 按共享块数排序的前 SQL

按写入块数排序的必须执行写入操作的前 lt_profile.topn 条语句。

  • Query ID - 数据库、用户和查询文本的哈希标识符。 兼容 ltcenter 工具。以十六进制表示的 pg_stat_statements 原生字段 qieryid 在方括号中显示。

  • SQL文本 - 完整查询的前100个字符。

  • 数据库 - 语句所在的数据库名称(从 dbid 字段派生)

  • 写入块数 - 该语句写入的块数( shared_blks_written 字段)

  • %总共 - 该语句写入的块数占整个集群所有语句写入的块数的百分比

  • %后端写入 - 该语句写入的块数占所有后端写入的块数的百分比( pg_stat_bgwriter 视图的 buffers_backend 字段)

  • 命中率(%) - 从所有获取的块中,从缓存中获取的块的百分比

  • 耗时(s) - 该语句执行的时间,以秒为单位( total_time total_exec_time+total_plan_time 字段)

  • 行数 - 语句检索或影响的行数(rows 字段)

  • 执行次数 - 该语句执行的次数(calls 字段)

E.20.7.3.10. 按WAL大小排序的前SQL

按生成的WAL大小排序的前lt_profile.topn 条语句(自 lt_stat_statements v1.8 版本起可用)

  • Query ID - 数据库、用户和查询文本的哈希标识符。 兼容 ltcenter 工具。以十六进制表示的 pg_stat_statements 原生字段 qieryid 在方括号中显示。

  • SQL文本 - 完整查询的前100个字符。

  • 数据库 - 语句所在的数据库名称(从 dbid 字段派生)

  • WAL - 语句生成的 WAL 数量 (wal_bytes 字段)

  • %Total - 语句生成的 WAL 数量相对于集群总 WAL 数量的百分比 (pg_current_wal_lsn() 增量)

  • Dirtied - 语句脏数据块的数量 (shared_blks_dirtied 字段)

  • WAL full page images - 语句生成的 WAL 全页镜像的总数量 (wal_fpi 字段)

  • WAL records - 语句生成的 WAL 字节数量总和 (wal_bytes 字段)

E.20.7.3.11. 按临时空间使用量排名的 SQL

按照临时 I/O 排序的前 lt_profile.topn 条语句,计算方式为 temp_blks_readtemp_blks_writtenlocal_blks_readlocal_blks_written 字段的总和

  • Query ID - 查询标识符,由数据库、用户和查询文本的哈希值生成。与 ltcenter 实用程序兼容。用十六进制表示的原生 pg_stat_statements 字段 queryid 在方括号中显示。

  • SQL Text - 完整查询的前 100 个字符。

  • Database - 语句所在数据库名称(从 dbid 字段派生)

  • Local fetched - 检索的本地数据块数量(表达式为:local_blks_hit + local_blks_read

  • Hits(%) - 从临时缓冲区中获取的本地数据块在所有本地数据块中的百分比

  • Local blocks - 临时表中使用的块的 I/O 统计信息

    • Write - 写入的本地数据块数量(local_blks_written

    • %Total - 该语句的 local_blks_written 占集群中所有语句的总 local_blks_written 的百分比

    • Read - 读取的本地数据块数量(local_blks_read

    • %Total - 该语句的 local_blks_read 占集群中所有语句的总 local_blks_read 的百分比

  • Temp blocks - 操作中使用的块的 I/O 统计信息(例如排序和连接)

    • Write - 写入的临时数据块数量(temp_blks_written

    • %Total - 该语句的 temp_blks_written 占集群中所有语句的总 temp_blks_written 的百分比

    • Read - 读取的临时数据块数量(temp_blks_read

    • %Total - 该语句的 temp_blks_read 占集群中所有语句的总 temp_blks_read 的百分比

  • Elapsed(s) - 语句执行时间,以秒为单位(total_timetotal_exec_time+total_plan_time 字段)

  • Rows - 语句检索或影响的行数(rows 字段)

  • Executions - 该语句的执行次数(calls 字段)

E.20.7.3.12. 完整的 SQL 文本列表

报告中提到的所有语句的查询文本。您可以在任何统计表中使用 Query ID 链接进入并查看查询文本。

E.20.7.4. 模式对象统计信息

报告的此部分包含使用统计收集器视图的顶级数据库对象。

E.20.7.4.1. 按估计顺序扫描的数据量排序的顶级表

按估计顺序扫描读取的数据库顶级表排序。 基于pg_stat_all_tables视图。您可以在此搜索表,可能在其上缺少一些索引。

  • Database - 表所在的数据库名称

  • Tablespace - 表所在的表空间名称

  • Schema - 表所在的模式名称

  • Table - 表名称

  • ~SeqBytes - 通过顺序扫描读取的估计数据量。 计算方式为报告样本中所有relation size乘以seq_scan的总和。

  • SeqScan - 表上执行的顺序扫描次数(seq_scan字段)

  • IndexScan - 在此表上启动的索引扫描次数(idx_scan字段)

  • IndexFetch - 由索引扫描获取的活跃行数(idx_tup_fetch字段)

  • Inserted - 插入的行数(n_tup_ins字段)

  • Updated - 更新的行数(包括HOT)(n_tup_upd字段)

  • Deleted - 删除的行数(n_tup_del字段)

  • HOT Updated - HOT更新的行数(n_tup_hot_upd字段)

E.20.7.4.2. 按获取的块排序的顶级表

获取的块是从磁盘(读取)或共享缓冲区(命中)中处理的块。 此列表中的表按表关系、其索引、表的TOAST(如果存在)以及TOAST索引(如果存在)的获取块总和排序。 此部分可以让您关注具有过多块处理的表。基于pg_statio_all_tables视图中的数据。

  • Database - 表所在的数据库名称

  • Tablespace - 表所在的表空间名称

  • Schema - 表所在的模式名称

  • Table - 表名称

  • Heap - 关系块获取的统计信息(heap_blks_read + heap_blks_hit

  • Index - 获取所有关系索引块的统计信息(idx_blks_read + idx_blks_hit

  • TOAST - 获取TOAST表块的统计信息(toast_blks_read + toast_blks_hit

  • TOAST-Index - 获取TOAST索引块的统计信息(tidx_blks_read + tidx_blks_hit

此表中的每个统计字段都分为两列:

  • Blocks - 获取关系堆、索引、TOAST或TOAST索引的块数

  • %Total - 获取关系堆、索引、TOAST或TOAST索引的块数,作为整个集群中所有块获取的百分比

E.20.7.4.3. 按读取的块排序的顶级表

按块读取排序的顶级表。此列表中的表按表、其索引、表的TOAST(如果存在)以及TOAST索引(如果存在)的块读取总和排序。此部分可以让您关注具有过多块读取的表。基于pg_statio_all_tables视图中的数据。

  • Database - 表所在的数据库名称

  • Tablespace - 表所在的表空间名称

  • Schema - 表所在的模式名称

  • Table - 表名称

  • Heap - 关于关系的块读取统计信息(heap_blks_read

  • Index - 关于所有关系索引块读取的统计信息(idx_blks_read

  • TOAST - 关于TOAST表块读取的统计信息(toast_blks_read

  • TOAST-Index - 关于TOAST索引块读取的统计信息(tidx_blks_read

此表中的每个读取统计信息均分为两列:

  • Blocks - 关系heap、index、TOAST或TOAST index的块读取数量

  • %Total - 关系heap、index、TOAST或TOAST index的块读取,作为整个集群中所有块读取的百分比

E.20.7.4.4. Top DML表

按DML影响行数排序的前几个表,即n_tup_insn_tup_updn_tup_del的总和(包括TOAST表)。

  • Database - 表所在的数据库名称

  • Tablespace - 表所在的表空间名称

  • Schema - 表所在的schema名称

  • Table - 表名

  • Inserted - 插入的行数(n_tup_ins字段)

  • Updated - 更新的行数(包括HOT)(n_tup_upd字段)

  • Deleted - 删除的行数(n_tup_del字段)

  • HOT Updated - HOT更新的行数(n_tup_hot_upd字段)

  • SeqScan - 在表上执行的顺序扫描次数(seq_scan字段)

  • SeqFetch - 通过顺序扫描获取的活跃行数(seq_tup_read字段)

  • IndexScan - 在此表上启动的索引扫描次数(idx_scan字段)

  • IndexFetch - 通过索引扫描获取的活跃行数(idx_tup_fetch字段)

E.20.7.4.5. 按更新/删除元组排序的前几个表

按引起自动清理负载操作数量排序的前几个表,即n_tup_updn_tup_del的总和(包括TOAST表)。根据提供的清理和分析运行统计信息,考虑微调与清理相关的参数。

  • Database - 表所在的数据库名称

  • Tablespace - 表所在的表空间名称

  • Schema - 表所在的schema名称

  • Table - 表名

  • 更新 - 更新的行数(包括HOT)(n_tup_upd字段)

  • HOT更新 - HOT更新的行数(n_tup_hot_upd字段)

  • 删除 - 删除的行数(n_tup_del字段)

  • 清理 - 手动清理此表的次数(不包括VACUUM FULL)(vacuum_count字段)

  • 自动清理 - 自动清理守护程序清理此表的次数(autovacuum_count字段)

  • 分析 - 手动分析此表的次数(analyze_count字段)

  • 自动分析 - 自动清理守护程序分析此表的次数(autoanalyze_count字段)

E.20.7.4.6. 增长最快的表

按增长排序的顶部表

  • 数据库 - 表所在的数据库名称

  • 表空间 - 表所在的表空间名称

  • 架构 - 表所在的模式名称

  • - 表名称

  • 大小 - 表大小,即报告间隔内最后一次采样时的大小

  • 增长 - 表增长

  • 插入 - 插入的行数(n_tup_ins字段)

  • 更新 - 更新的行数(包括HOT)(n_tup_upd字段)

  • 删除 - 删除的行数(n_tup_del字段)

  • HOT更新 - HOT更新的行数(n_tup_hot_upd字段)

E.20.7.4.7. 按读取的块排序的索引排名

读取的块是正在从磁盘(读取)或共享缓存区(命中)中处理的块。基于pg_statio_all_indexes视图的数据。

  • 数据库 - 索引所在的数据库名称

  • 表空间 - 索引所在的表空间名称

  • 架构 - 索引所在的模式名称

  • - 表名称

  • 索引 - 索引名称

  • 扫描 - 在索引上执行的扫描次数(idx_scan字段)

  • - 从此索引中读取的块(idx_blks_read + idx_blks_hit

  • %总计 - 该索引读取的块数,占整个集群读取的所有块数的百分比

E.20.7.4.8. 按读取的块数排序的索引排名

按块读取排序的顶部索引。基于pg_statio_all_indexes视图的数据。

  • 数据库 - 索引所在的数据库名称

  • 表空间 - 索引所在的表空间名称

  • 架构 - 索引所在的模式名称

  • - 表名称

  • 索引 - 索引名称

  • 扫描 - 在索引上执行的扫描次数(idx_scan 字段)

  • 块读取 - 从该索引读取的磁盘块数(idx_blks_read

  • %总数 - 该索引的块读取占整个集群所有块读取的百分比

  • 命中率(%) - 该索引获取的缓存块在所有获取该索引的块中所占的百分比

E.20.7.4.9. 增长最快的索引

按增长排序的前索引

  • 数据库 - 索引所在的数据库名称

  • 表空间 - 索引所在的表空间名称

  • 模式 - 索引所在的模式名称

  • - 表名称

  • 索引 - 索引名称

  • 索引 - 索引统计信息

    • 大小 - 索引大小,报告间隔中最后一次采样时的大小

    • 增长 - 报告间隔期间的索引增长

  • - 底层表的统计信息

    • 插入 - 插入到底层表中的行数(n_tup_ins 字段)

    • 更新 - 在底层表中更新的行数(不包括HOT更新)(n_tup_upd - n_tup_hot_upd

    • 删除 - 从底层表中删除的行数(n_tup_del 字段)

E.20.7.4.10. 未使用的索引

报告间隔期间未被扫描的索引,按照底层表上的DML操作排序,可能导致索引支持。排除约束索引。

  • 数据库 - 索引所在的数据库名称

  • 表空间 - 索引所在的表空间名称

  • 模式 - 索引所在的模式名称

  • - 表名称

  • 索引 - 索引名称

  • 索引 - 索引统计信息

    • 大小 - 索引大小,报告间隔中最后一次采样时的大小

    • 增长 - 报告间隔期间的索引增长

  • Table - 底层表的统计信息

    • Inserted - 底层表中插入的行数(n_tup_ins 字段)

    • Updated - 底层表中更新的行数(不包括HOT更新)(n_tup_upd - n_tup_hot_upd

    • Deleted - 底层表中删除的行数(n_tup_del 字段)

E.20.7.5. 用户函数统计信息

本报告部分根据pg_stat_user_functions视图,列出了集群中最常用的函数。

E.20.7.5.1. 按总时间排序的常用函数

按经过的时间排序的常用函数。

  • Database - 函数所在的数据库名称

  • Schema - 函数所在的 schema 名称

  • Function - 函数名称

  • Executions - 调用此函数的次数(calls 字段)

  • Time (s) - 函数时间统计,单位为秒

    • Total - 此函数和所有由它调用的其他函数所花费的总时间(total_time 字段)

    • Self - 此函数本身所花费的总时间,不包括由它调用的其他函数(self_time 字段)

    • Mean - 单次函数执行的平均时间

    • Mean self - 单次函数执行的平均 self 时间

E.20.7.5.2. 按执行次数排序的常用函数

按执行次数排序的常用函数。

  • Database - 函数所在的数据库名称

  • Schema - 函数所在的 schema 名称

  • Function - 函数名称

  • Executions - 调用此函数的次数(calls 字段)

  • Time (s) - 函数时间统计,单位为秒

    • Total - 此函数和所有由它调用的其他函数所花费的总时间(total_time 字段)

    • Self - 此函数本身所花费的总时间,不包括由它调用的其他函数(self_time 字段)

    • Mean - 单次函数执行的平均时间

    • Mean self - 单次函数执行的平均 self 时间

E.20.7.5.3. 按总时间排序的常用触发器函数

按经过的时间排序的常用触发器函数。

  • Database - 函数所在的数据库名称

  • Schema - 函数所在的 schema 名称

  • Function - 函数名称

  • Executions - 调用此函数的次数(calls 字段)

  • Time (s) - 函数时间统计,单位为秒

    • Total - 此函数和所有由它调用的其他函数所花费的总时间(total_time 字段)

    • Self - 此函数本身所花费的总时间,不包括由它调用的其他函数(self_time 字段)

    • Mean - 单次函数执行的平均时间

    • Mean self - 单次函数执行的平均 self 时间

E.20.7.6. Vacuum 相关统计信息

E.20.7.6.1. 按 VACUUM 操作排序的顶级表

按处理的 VACUUM(手动和自动)排序的表格排名

  • Database - 表格所在的数据库名称

  • Tablespace - 表格所在的表空间名称

  • Schema - 表格所在的 schema 名称

  • Table - 表格名称

  • Vacuum count - 手动 VACUUM(不包括 VACUUM FULL)的次数,对此表进行了多少次清理(vacuum_count 字段)

  • Autovacuum count - 自动 VACUUM 守护程序对此表进行过多少次清理(autovacuum_count 字段)

  • Inserted - 插入的行数(n_tup_ins 字段)

  • Updated - 更新的行数(包括 HOT 更新)(n_tup_upd 字段)

  • Deleted - 删除的行数(n_tup_del 字段)

  • HOT Updated - HOT 更新的行数(n_tup_hot_upd 字段)

E.20.7.6.2. 按分析操作排序的表格排名

按分析运行(手动和自动)次数排序的表格排名

  • Database - 表格所在的数据库名称

  • Tablespace - 表格所在的表空间名称

  • Schema - 表的模式名称

  • Table - 表格名称

  • Analyze count - 手动分析此表的次数(analyze_count 字段)

  • Autoanalyze count - 自动 VACUUM 守护程序分析此表的次数(autoanalyze_count 字段)

  • Inserted - 插入的行数(n_tup_ins 字段)

  • Updated - 更新的行数(包括 HOT 更新)(n_tup_upd 字段)

  • Deleted - 删除的行数(n_tup_del 字段)

  • HOT Updated - HOT 更新的行数(n_tup_hot_upd 字段)

E.20.7.6.3. 按估计 VACUUM I/O 负载排序的索引排名

此表提供了由表格索引引起的隐式 VACUUM 负载的估计值。以下是按底层表格上执行的 VACUUM 次数乘以索引大小排序的索引排名。

  • Database - 索引所在的数据库名称

  • Tablespace - 索引所在的表空间名称

  • Schema - 索引所在的 schema 名称

  • Table - 表格名称

  • Index - 索引名称

  • ~Vacuum bytes - 估计的 VACUUM 负载,计算公式为 (vacuum_count + autovacuum_count) * index_size

  • Vacuum count - 手动 VACUUM(不包括 VACUUM FULL)的次数,对此表进行了多少次清理(vacuum_count 字段)

  • Autovacuum count - 自动 VACUUM 守护程序对此表进行过多少次清理(autovacuum_count 字段)

  • Index size - 报告期间的平均索引大小

  • Relsize - 报告期间的平均关系大小

E.20.7.6.4. 按死元组比率排序的表格排名

此部分包含最后一次 VACUUM 运行的修改后的表格。统计数据有效于报告期间的最后一个样本。基于 pg_stat_all_tables 视图。

按死元组比率排序,大小为 5 MB 及以上的表格排名。

  • Database - 表格所在的数据库名称

  • Schema - 表格所在的 schema 名称

  • Table - 表格名称

  • Live - 估计的活跃行数(n_live_tup

  • Dead - 估计的死亡行数(n_dead_tup

  • %Dead - 表格中死亡行数占表格所有行数的百分比

  • Last AutoVacuum - 自动 VACUUM 守护程序最后一次清理此表的时间(last_autovacuum

  • Size - 表格大小,即最后一次报告样本时的大小。

E.20.7.6.5. 按修改元组比率排序的表格排名

此部分包含最后一次 VACUUM 运行的修改后的表格。统计数据有效于报告期间的最后一个样本。基于 pg_stat_all_tables 视图。

按修改元组比率排序的大小为5MB及以上的顶级表。

  • Database - 表所在的数据库名称。

  • Schema - 表所在的模式名称。

  • Table - 表名。

  • Live - 估计的活跃行数(n_live_tup)。

  • Dead - 估计的死亡行数(n_dead_tup)。

  • Mod - 自上次分析此表以来修改的行数的估计值(n_mod_since_analyze)。

  • %Mod - 表中修改的行数占表中所有行的百分比。

  • Last AutoAnalyze - 此表上次由自动清理进程分析的时间。

  • Size - 表格大小,即最后一次报告样本时的大小。

E.20.7.7. 报告间隔期间的群集设置

报告的此部分包含LightDB GUC参数和函数version()pg_postmaster_start_time()pg_conf_load_time()以及pg_control_system()函数的system_identifier字段在报告间隔期间的值。

  • Setting - 参数名称。

  • reset_val - pg_settings视图的reset_val字段。加粗字体用于显示在报告间隔期间更改的设置。

  • Unit - 设置单位。

  • Source - 定义此设置的配置文件,分号后的行号。

  • Notes - 此字段将包含在报告间隔期间首次观察到此值的样本的时间戳。

E.20.7.8. 报告间隔期间的内核设置

报告的此部分包含几个重要的Linux内核参数。

  • Setting - 参数名称。

  • Value - 参数的值。

  • Source - 定义此设置的配置文件。

E.20.7.9. 需要记住的内容...

  1. LightDB在执行完成之后收集执行统计信息。如果语句的单次执行持续多个样本,它将仅影响最后一个样本(在完成时)。您无法获取仍在运行的语句的统计信息。此外,像vacuum和checkpointer这样的维护流程仅在完成时更新统计信息。

  2. 重置任何LightDB统计信息可能会影响下一个样本的准确性。

  3. 对关系的独占锁与计算关系大小冲突。如果任何会话持有AccessExclusiveLock,样本将不会收集这些关系的大小信息。但是,会话可以在样本处理期间对关系进行AccessExclusiveLock。为了解决这个问题,将lock_timeout设置为3秒,因此如果take_sample()函数在3秒内无法获取锁,它将失败,不会生成样本。

E.20.8. PSH报告的部分

本部分描述了报告表及其列。

E.20.8.1. 最常见的等待事件

E.20.8.1.1. 最常见的用户事件

此表包含按等待时间排序的前lt_profile.topn个用户等待事件。

  • Wait Event - 进程正在等待的特定事件。

  • Wait Event Type - 此事件的类型。

  • Wait Time(s) - 所有此事件的总等待时间。

  • %Total Wait Time - 所有此事件的总等待时间与群集中所有事件的总等待时间的百分比。

E.20.8.1.2. 最常见的后台事件

此表包含按等待时间排序的前lt_profile.topn个后台等待事件。

  • Wait Event - 进程正在等待的特定事件。

  • Wait Event Type - 此事件的类型。

  • Wait Time(s) - 所有此事件的总等待时间。

  • %Total Wait Time - 所有此事件的总等待时间与群集中所有事件的总等待时间的百分比。

E.20.8.2. 最常见的SQL语句

E.20.8.2.1. 带顶部事件的顶部SQL

按等待时间排序的顶部等待事件,用于按pg_stat_statements视图的 total_exec_time字段排序的顶部语句。

  • 查询ID - 数据库、用户和查询文本的哈希值作为查询标识符。与 ltcenter实用程序兼容。在方括号中显示十六进制表示的pg_stat_statements 字段qieryid

  • SQL文本 - 完整查询的前100个字符。

  • Exec(s) - 执行此语句所花费的时间(total_exec_time 字段)。

  • %总计 - 此语句的执行时间占群集中所有语句的总经过时间的百分比

  • 等待事件 - 进程等待的具体事件。

  • 等待时间(s) - 此查询中事件的总等待时间。

E.20.8.2.2. SQL文本的完整列表

报告中提到的所有语句的查询文本。您可以在任何统计表格中使用查询ID链接进入该页面,查看查询文本。