这个LightDB的扩展可以帮助你找出在你的LightDB数据库中耗费最多资源的活动。
这个扩展基于LightDB的统计视图和扩展lt_stat_statements、lt_stat_activity和system_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所在的群集的服务器。
扩展由四个部分组成:
历史存储库是采样数据的存储。存储库是一个扩展表的集合。
样本管理引擎是一组用于获取样本和通过从中删除过时的样本数据来支持存储库的函数。
报告引擎是一组用于生成基于历史存储库数据的报告的函数。
管理函数允许您创建并管理服务器和基线。
监测的服务器列表 (LightDB集群)。
Table E.4. servers
Columns
列类型 描述 |
---|
服务器ID |
服务器名称 |
服务器描述 |
服务器创建时间,默认为创建时函数now()的值 |
排除的数据库 |
是否开启,默认开启 |
用于dblink的Connstr |
全局设置max_sample_age 将被此值重写,如果此值被设置 |
上次采样ID,默认为0 |
开始采样时间 |
采样持续时间 |
采样时间间隔 |
采样列表。
Table E.5. samples
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
采样时间 |
服务器硬件配置信息 (通过system_stats收集)。信息包含CPU数量,线程数,核心数,插槽数,内存信息。
Table E.6. sample_server_hardware
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
系统的 CPU 架构 |
CPU架构的字节顺序 |
CPU数量 |
单核CPU线程数 |
一个插槽CPU核心数 |
系统插槽数量 |
厂家ID |
CPU系列 |
型号 |
型号名称 |
CPU频率(单位 mhz) |
一级数据缓存 |
一级指令缓存 |
二级缓存 |
三级缓存 |
问题内存大小 |
内存交换区大小 |
集群配置信息。
Table E.7. sample_cluster_instance
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
主机名 (参考 servers.server_name) |
集群名 (参考 current_setting('cluster_name')) |
角色,主 如果 pg_is_in_recovery() = false, 否则为备 |
LightDB版本号,示例:LightDB 13.8-23.1 |
启动时间 |
采样内核设置。
Table E.8. sample_kernel_settings
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
名称 |
值 |
源文件 |
采样CPU使用情况,通过分析/proc/stat产生统计数据。
Table E.9. sample_cpu_usage
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
用户CPU |
系统CPU |
闲置CPU |
IO等待 |
采样内存使用情况。
Table E.10. sample_db_memory_usage
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
共享内存大小(单位:字节) |
本地内存大小(单位:字节) |
采样设置。
Table E.11. sample_settings
Columns
列类型 描述 |
---|
服务器ID |
第一次登入时间 |
设置范围. pg_settings 取值为1,其它 adm 函数取值为2 |
名称 |
设置 |
重置值 |
启动值 |
单元 |
源文件 |
源行 |
重启标识挂起状态 |
各函数采样时间。
Table E.12. sample_timings
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
采样事件 |
此事件的时间开销 |
Baselines 设置。
Table E.13. baselines
Columns
列类型 描述 |
---|
服务器ID |
Baseline 采样ID |
Baseline 采样名字 |
此baseline采样需要保存的截止时间 |
Baseline 采样列表。
Table E.14. bl_samples
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
Baseline ID |
SQL语句列表。
Table E.15. stmt_list
Columns
列类型 描述 |
---|
服务器ID |
查询ID的MD5 |
查询SQL文本 |
数据库采样统计。
Table E.16. sample_stat_database
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
数据库ID |
数据库 |
提交事务数 |
回滚事务数 |
块读数 |
块命中数 |
元组返回数 |
元组获取数 |
元组插入数 |
元组更新数 |
元组删除数 |
总冲突数,包含表空间,锁,快照,缓存,启动死锁 |
临时文件 |
临时文件大小(单位:字节) |
死锁 |
块读取时间 |
块写入时间 |
上次重置统计的时间 |
数据库大小 |
数据库大小变化 |
真,则为模板数据库 |
SQL语句的采样统计。
Table E.17. sample_statements
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
执行此条SQL的用户OID |
执行此条语句的数据库OID |
内部HASH码, 通过SQL解析树计算所得 |
查询MD5, 通过计算SQL文本计算所得 |
SQL计划次数( 开启 lt_stat_statements.track_planning 有效, 否则为零) |
SQL计划总时间(单位:毫秒,开启 lt_stat_statements.track_planning 有效, 否则为零) |
SQL计划最短时间(单位:毫秒,开启 lt_stat_statements.track_planning 有效, 否则为零) |
SQL计划最长时间(单位:毫秒,开启 lt_stat_statements.track_planning 有效, 否则为零) |
SQL计划平均时间(单位:毫秒,开启 lt_stat_statements.track_planning 有效, 否则为零) |
SQL计划标准差(单位:毫秒,开启 lt_stat_statements.track_planning 有效, 否则为零) |
SQL执行总次数 |
SQL执行总时间(单位:毫秒) |
SQL执行最短时间(单位:毫秒) |
SQL执行最长时间(单位:毫秒) |
SQL执行平均时间(单位:毫秒) |
SQL执行时间标准差(单位:毫秒) |
SQL执行时获取或影响到的总行数 |
此SQL总共享块缓存命中次数 |
此SQL总共享块缓存读取次数 |
此SQL总共享块缓存dirtied次数 |
此SQL总共享块写入次数 |
此SQL总本地块命中次数 |
此SQL总本地块读取次数 |
此SQL总本地块dirtied次数 |
此SQL总本地块写入次数 |
此SQL总临时块读取次数 |
此SQL总临时块写入次数 |
读取块总时间(单位:in milliseconds,需 track_io_timing 开启, 否则为0) |
写入块总时间(单位:in milliseconds,需 track_io_timing 开启, 否则为0) |
此SQL产生的总WAL records数 |
此SQL产生的总WAL满页数 |
此SQL产生的WAL总大小(单位:字节) |
以数据库为分组的总的采样统计信息。
Table E.18. sample_statements_total
Columns
列类型 描述 |
---|
服务器ID |
执行此条语句的数据库OID |
SQL计划次数( 开启 lt_stat_statements.track_planning 有效, 否则为零) |
SQL计划总时间(单位:毫秒,开启 lt_stat_statements.track_planning 有效, 否则为零) |
SQL执行总次数 |
SQL执行总时间(单位:毫秒) |
SQL执行时获取或影响到的总行数 |
此SQL总共享块缓存命中次数 |
此SQL总共享块缓存读取次数 |
此SQL总共享块缓存dirtied次数 |
此SQL总共享块写入次数 |
此SQL总本地块命中次数 |
此SQL总本地块读取次数 |
此SQL总本地块dirtied次数 |
此SQL总本地块写入次数 |
此SQL总临时块读取次数 |
此SQL总临时块写入次数 |
读取块总时间(单位:in milliseconds,需 track_io_timing 开启, 否则为0) |
写入块总时间(单位:in milliseconds,需 track_io_timing 开启, 否则为0) |
此SQL产生的总WAL records数 |
此SQL产生的总WAL满页数 |
此SQL产生的WAL总大小(单位:字节) |
总SQL数 |
总的等待事件采样统计。
Table E.19. sample_wait_event_total
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
当前事件的后台进程ID |
当前事件的查询ID |
等待事件类型 |
等待事件子类型 |
自上次采样后,此类型事件总计时 |
后台进程状态 |
采样时采集到的表空间。
Table E.20. tablespaces_list
Columns
列类型 描述 |
---|
服务器ID |
表空间OID |
表空间名字 |
表空间路径 |
表空间采样统计,数据来源于函数pg_tablespace_size(oid)。
Table E.21. sample_stat_tablespaces
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
表空间OID |
表空间总磁盘占用(单位:字节) |
自上次采样后,表空间变化大小(单位:字节) |
此服务器数据库中的表列表。
Table E.22. tables_list
Columns
列类型 描述 |
---|
服务器ID |
数据库OID |
表OID |
表类型 |
此表的toast表OID |
表的模式名称 |
表的名字 (参考:pg_class.relname) |
表采样统计。
Table E.23. sample_stat_tables
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
数据库OID |
表OID |
表空间OID |
自上次采样后,顺序扫描次数差 |
自上次采样后,顺序元组读取差 |
自上次采样后,索引扫描差 |
自上次扫描后,元组读取差 |
自上次扫描后,插入元组数量差 |
自上次扫描后,更新元组数量差 |
自上次扫描后,更新元组数量差 |
自上次扫描后,热更元组数量差 |
在线元组数 |
无效元组数 |
自analyze后,修改的数量 |
自vacuum后,插入的数量 |
上次vacuum时间 |
上次autovacuum时间 |
上次analyze时间 |
上次autoanalyze时间 |
自上次采样后,vacumm数量差 |
自上次采样后,autovacumm数量差 |
自上次采样后,analyze数量差 |
自上次采样后,auto analyze 数量差 |
自上次采样后,堆块读取数量差 |
自上次采样后,堆块命中数量差 |
自上次采样后,索引块读取数量差 |
自上次采样后,toast块读取数量差 |
自上次采样后,toast块命中数量差 |
自上次采样后,toast块命中数量差 |
自上次采样后,toast索引块命中数量差 |
Toast表大小 |
自上次采样后,toast表大小差 |
表采样统计,以服务器,采样ID,数据库ID,表类型,表空间ID为组。
Table E.24. sample_stat_tables_total
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
数据库OID |
表空间OID |
表类型 |
自上次采样,总顺序扫描数 |
自上次采样,总元组读取数 |
自上次采样,总索引扫描数 |
自上次采样,总索引元组获取数 |
自上次采样,总元组插入数 |
自上次采样,总元组更新数 |
自上次采样,总元组删除数 |
自上次采样,总元组热更数 |
采样ID |
自上次采样,总vacuum数 |
自上次采样,总autovacuum数 |
自上次采样,总analyze数 |
自上次采样,总 auto analyze 数 |
自上次采样,总堆块读取数 |
自上次采样,总堆块命中数 |
自上次采样,总的索引块读取数 |
自上次采样,总的索引块命中数 |
自上次采样,总的toast块读取数 |
自上次采样,总的toast块命中数 |
自上次采样,总的toast索引块读取数 |
自上次采样,总的toast索引块命中数 |
自上次采样,磁盘空间占用差 |
采样索引列表,包含索引名字,模式。
Table E.25. indexes_list
Columns
列类型 描述 |
---|
服务器ID |
数据库ID |
索引OID |
此索引所在的表的OID |
表模式 |
表名字 |
索引采样统计。
Table E.26. samples
Columns
列类型 描述 |
---|
服务器ID |
数据库OID |
表空间OID |
自上次采样,索引扫描差 |
自上次采样,索引元组读取差 |
自上次采样,索引元组获取差 |
自上次采样,索引块读取差 |
自上次采样,索引块命中差 |
索引当前占用的磁盘空间 |
自上次采样,索引占用空间差 |
真,如果是唯一索引 |
索引采样统计。以服务器ID,采样ID,数据库ID,表空间ID分组。
Table E.27. sample_stat_indexes_total
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
数据库OID |
表空间OID |
自上次采样,总索引扫描数 |
自上次采样,总索引元组读取数 |
自上次采样,总索引元组获取数 |
自上次采样,总索引块读取数 |
自上次采样,总索引块命中数 |
自上次采样,索引占用空间差 |
采样函数列表。
Table E.28. funcs_list
Columns
列类型 描述 |
---|
服务器ID |
数据库OID |
函数OID (参考:pg_proc.oid) |
函数模式 (参考 pg_namespace.schemaname) |
函数名 (参考 pg_proc.proname) |
函数参数 |
用户函数采样统计。
Table E.29. sample_stat_user_functions
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
数据库OID |
函数OID (参考 pg_proc.oid) |
自上次采样,函数调用差 |
自上次采样,函数总调用差 |
自上次采样,函数自身调用差 |
真,如果函数为触发器 |
用户函数采样统计,以服务器ID,采样ID,数据库尖,触发函数分组。
Table E.30. samples
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
数据库OID |
自上次采样,调用次数 |
自上次采样,总调用次数 |
真,如果函数为触发器 |
集群采样统计。
Table E.31. sample_stat_cluster
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
自上次采样,checkpoint数量差 |
自上次采样,请求的checkpoint数量差 |
自上次采样,累积checkpoint写时间差(单位:毫秒) |
自上次采样,累积checkpoint同步时间差(单位:毫秒) |
自上次采样,checkpoint写缓存时间差(单位:毫秒) |
自上次采样,脏缓存写入数量差 |
自上次采样,最大写入差 (当 written >= bgwriter_lru_maxpages 时计1) |
自上次采样,后台请求写入缓存数量差 |
自上次采样,后台fsync次数差 |
自上次采样,缓存分配差 |
pg stat上次重置时间 |
自上次采样,WAL大小差 (wal_size 通过 pg_wal_lsn_diff计算) |
归档采样统计,包含成功或失败的次数及时间。
Table E.32. sample_stat_archiver
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
上次归档成功数 |
上次归档 wal 文件 |
Last archive timestamp |
上次归档失败数 |
上次归档 wal 文件 |
上次归档失败时间 |
上次归档的重置时间 |
表磁盘空间计算采样统计。
Table E.33. sample_stat_tables_failures
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
数据库OID |
表OID(参考 pg_class.oid) |
真,计算表磁盘空间成功 |
真,计算toast表磁盘空间失败 |
索引失败采样统计。
Table E.34. sample_stat_indexes_failures
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
数据库OID |
索引OID (参考 pg_index.indexrelid) |
真,计算索引磁盘空间失败 |
此表用于将后台进程类型的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
列类型 描述 |
---|
后台类型ID |
后台类型显示文本 |
此关用于将开销类型的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
列类型 描述 |
---|
开销ID |
开销显示文本 |
此表用于关联事件ID和事件显示文本。自 Available since LightDB 23.2 ,lt_profile 0.3.7 可用。
Table E.37. lt_stat_wait_evt_id_text
Columns
列类型 描述 |
---|
事件类型ID |
事件类型显示文本 |
此表用于关联子子件事ID以及子事件显示文本。自 LightDB 23.2 ,lt_profile 0.3.7 可用。
Table E.38. lt_stat_wait_evt_sub_id_text
Columns
列类型 描述 |
---|
子事件ID (参考 lt_stat_wait_evt_id_text.evt_id) |
事件ID |
子事件显示文本 |
各事件累积时间开销统计,包含 DB Time, DB Wait。默认情况下新的采样数据每秒采样一次,然后插入此表。自 LightDB 23.2 ,lt_profile 0.3.7 。
Table E.39. lt_stat_cost_1s
Columns
列类型 描述 |
---|
后台进程类型ID |
采样开销类型ID |
采样事件ID |
采样子事件ID |
总开销(单位:微秒) |
数据库等待事件采样统计,默认以1分钟为间隔进行归档。触发函数“collect_activity_profile” ,自 LightDB 23.2 ,lt_profile 0.3.7。
Table E.40. lt_stat_cost_60s
Columns
列类型 描述 |
---|
后台进程类型ID |
采样开销类型ID |
采样事件ID |
采样子事件ID |
总开销时间(单位:微秒) |
数据库等待事件采样统计,默认以10分钟为间隔进行归档。触发函数“collect_activity_profile” ,自 LightDB 23.2 ,lt_profile 0.3.7。
Table E.41. lt_stat_cost_600s
Columns
列类型 描述 |
---|
服务器ID |
采样ID |
后台进程类型ID |
采样开销类型ID |
采样事件ID |
采样子事件ID |
总开销时间(单位:微秒) |
尽管通常将lt_profile安装在目标集群中,但它也可以从其他集群中收集性能数据。因此,我们有lt_profile数据库和服务器的先决条件。
lt_profile扩展依赖于plpgsql, dblink 和 ltfce 扩展。
考虑设置以下统计收集器参数:
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字段的准确性。
最简单的方法是将所有内容都安装在数据库的公共模式中:
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设置。
使用超级用户权限使用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;
创建一个用于连接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;
非超级用户无法在没有密码的情况下建立连接。提供密码的最佳方法是使用密码文件。
注意:lt_profile将连接到服务器上的所有数据库,因此密码文件必须使用通配符作为数据库名称。
作为一种不安全的方式,您可以在连接字符串中提供密码:
select server_connstr('local','dbname=postgres port=5432 user=profile_mon password=pwd_mon');
您可以在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将跟踪详细的样本采取时间。
安装后,扩展将创建一个启用的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');
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参数将扩展报告边界到最近收集到关系大小数据的样本。计算表的顺序扫描容量和索引的显式清理负载需要关系大小。当使用稀有关系大小收集时,相应的报告部分数据基于线性插值。
每个样本都包含有关自上一个样本以来数据库工作负载的统计信息。
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_reset、clustats_reset 和 archstats_reset 通常为 null,但如果自上一个样本以来发生了重置,则会包含 pg_stat_database、pg_stat_bgwriter 和 pg_stat_archiver 的统计信息重置时间戳。采样收集函数还支持服务器存储库 - 它将根据 保留策略 删除过时的样本和基线。
您必须创建至少 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)
我们无法永远存储样本数据,因此我们有一个保留策略。您可以在三个层面上定义保留:
在 lightdb.conf 文件中设置参数 lt_profile.max_sample_age。这是一个通用的保留策略,如果没有其他保留策略被定义,则该策略生效。
在创建服务器时,可以定义服务器的 max_sample_age 设置,或使用 set_server_max_sample_age() 函数为现有服务器设置。此设置将覆盖特定服务器的全局 lt_profile.max_sample_age 设置。
创建一个基线(见下文)。基线将以最高优先级覆盖包含样本的保留期。
使用 show_samples() 函数获取存储库中现有样本的列表。此函数将显示检测到的统计信息重置时间。
当参数 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 - 删除过时的基线和样本。
基线是一个命名的样本序列,具有自己的保留设置。基线可以用作报告构建函数的样本间隔。未定义的基线保留意味着无限保留。您可以使用基线保存关于某个时间段内数据库工作负载的信息。例如,您可能希望保存在负载测试期间收集的样本,或者在您的系统上进行定期负载以供以后参考。基线管理函数:
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');
可以从lt_profile扩展的实例中导出收集的样本,然后加载到另一个实例中。 当您想要将服务器从一个实例移动到另一个实例时,或者当您需要将收集的数据发送给支持团队时,此功能非常有用。
使用函数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_id和max_sample_id - 导出边界样本标识符(包括)。 min_sample_id边界的空值导出所有样本,直到max_sample_id, max_sample_id边界的空值导出自min_sample_id以来的所有样本。
obfuscate_queries - 仅在您想要隐藏查询文本时使用此参数 - 它们将导出为MD5哈希值。
数据只能从本地表格导入,因此需要先加载先前导出的数据。在我们的情况下,使用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表格。
报告是由报告函数生成的HTML标记,其中包含有关报告间隔期间实例工作量的统计信息。
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 - 文本备忘录,将包含在报告中作为报告描述。
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浏览器查看报告文件。
本节描述了报告表及其列。
包含CPU使用情况统计数据,例如报告开头和结尾的用户CPU、系统CPU、空闲CPU和IOWait。
%User - 用户CPU百分比
%System - 系统CPU百分比
%Idle - 空闲CPU百分比
%IO Wait - IOWait CPU百分比
包含LightDB在报告开头和结尾的内存使用情况统计数据。
主机内存(MB) - 主机的总物理内存
共享内存使用(MB) - LightDB使用的共享内存,由LightDB服务器的所有进程使用
本地内存使用(MB) - LightDB使用的本地内存,由每个后端进程为自己的使用分配
用于共享内存+本地内存的主机内存使用率(%) - 共享内存和本地内存占主机总内存的百分比
包含报告间隔期间每个数据库的统计数据,基于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()差异)
包含pg_stat_statements数据的每个数据库的聚合总统计数据(如果在报告间隔期间可用lt_stat_statements扩展)
数据库 - 数据库名称
调用 - 所有语句执行的总次数(calls的总和)
时间 (s) - 花费的时间(秒)
计划 - 花费的规划时间 (total_plan_time的总和) - 自lt_stat_statements 1.8版本后可用
执行 - 花费的执行时间 (total_time或 total_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的总和)
此表包含来自 pg_stat_bgwriter 视图的数据
计划检查点 - 完成的检查点总数,由于 checkpoint_timeout 参数而按计划完成(checkpoints_timed 字段)
请求检查点 - 其他检查点的总数:由于 max_wal_size、archive_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字段)
此表包含有关表空间大小和增长的信息:
表空间 - 表空间名称
路径 - 表空间路径
大小 - 报告间隔内最后一次采样时的表空间大小
增长 - 报告间隔内的表空间增长量
此报告部分包含按等待时间排序的报告间隔内顶部等待事件统计信息表。
IO - SQL查询时产生的各种文件读写活动。
LW Lock - 访问某些需要LW lock的变量或获取LW lock时计数。
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相关内存。
此表包含按等待时间排序的顶部lt_profile.topn等待事件类型。
等待事件类型 - 等待事件类型,每种类型可能包含多个等待事件。
等待时间(秒) - 此类型所有等待事件的总等待时间。
%总等待时间 - 此类型的总等待时间占群集中所有事件总等待时间的百分比。
此表包含按等待时间排序的顶部lt_profile.topn等待事件。
等待事件 - 进程正在等待的具体事件。
等待事件类型 - 此事件的类型。
等待时间(秒) - 所有此事件的总等待时间。
%总等待时间 - 所有此事件的总等待时间占群集中所有事件总等待时间的百分比。
此报告部分包含按多个重要统计信息排序的报告间隔内顶部语句表。如果在采样时可用,数据将从pg_stat_statements视图中获取。
此表包含按经过时间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 字段)
按照 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 字段)
按照 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 字段)
按 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_time 或 mean_exec_time 字段)
Min(ms) - 语句执行的最短时间,以毫秒为单位(min_time 或 min_exec_time 字段)
Max(ms) - 语句执行的最长时间,以毫秒为单位(max_time 或 max_exec_time 字段)
StdErr(ms) - 语句执行所花费时间的总体标准差,以毫秒为单位(stddev_time 或 stddev_exec_time 字段)
Elapsed(s) - 执行此查询所花费的时间,以秒为单位(total_time 或 total_exec_time 字段)
按读写时间(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_time 或 total_exec_time 字段)
Executions - 该语句的执行次数(calls 字段)
按读取和命中块排序的前 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_time 或 total_exec_time+total_plan_time 字段)
Rows - 语句检索或影响的行数(rows 字段)
Executions - 该语句的执行次数(calls 字段)
按共享读取次数排序的前 lt_profile.topn 条语句,有助于检测最耗费读取的语句。
Query ID - 由数据库、用户和查询文本的哈希值构成的查询标识符。与 ltcenter 实用程序兼容。用十六进制表示的 pg_stat_statements 原生字段 qieryid 以方括号的形式显示。
SQL Text - 完整查询的前 100 个字符。
Database - 语句所在数据库的名称(从 dbid 字段派生)
Reads - 该语句的共享读取块数(shared_blks_read 字段)
%Total - 该语句的共享读取块数占整个集群所有语句共享读取块数的百分比
Hits(%) - 从缓存中获取的块数在所有获取的块数中所占的百分比
Elapsed(s) - 执行此语句所花费的时间,以秒为单位(total_time 或 total_exec_time+total_plan_time 字段)
Rows - 语句检索或影响的行数(rows 字段)
Executions - 该语句的执行次数(calls 字段)
按共享脏缓冲区计数排序的前 lt_profile.topn 条语句,可帮助检测最常更改数据的语句。
Query ID - 数据库、用户和查询文本的哈希标识符。 兼容 ltcenter 工具。以十六进制表示的 pg_stat_statements 原生字段 qieryid 在方括号中显示。
SQL文本 - 完整查询的前100个字符。
数据库 - 语句所在的数据库名称(从 dbid 字段派生)
脏数据块数 - 该语句修改的共享块数(shared_blks_dirtied 字段)
%总共 - 该语句修改的共享块数占整个集群所有语句修改的共享块数的百分比
命中率(%) - 从所有获取的块中,从缓存中获取的块的百分比
耗时(s) - 该语句执行的时间,以秒为单位(total_time 或 total_exec_time+total_plan_time 字段)
行数 - 语句检索或影响的行数(rows 字段)
执行次数 - 该语句执行的次数(calls 字段)
按写入块数排序的必须执行写入操作的前 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 字段)
按生成的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 字段)
按照临时 I/O 排序的前 lt_profile.topn 条语句,计算方式为 temp_blks_read、temp_blks_written、local_blks_read 和 local_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_time 或 total_exec_time+total_plan_time 字段)
Rows - 语句检索或影响的行数(rows 字段)
Executions - 该语句的执行次数(calls 字段)
报告中提到的所有语句的查询文本。您可以在任何统计表中使用 Query ID 链接进入并查看查询文本。
报告的此部分包含使用统计收集器视图的顶级数据库对象。
按估计顺序扫描读取的数据库顶级表排序。 基于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字段)
获取的块是从磁盘(读取)或共享缓冲区(命中)中处理的块。 此列表中的表按表关系、其索引、表的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索引的块数,作为整个集群中所有块获取的百分比
按块读取排序的顶级表。此列表中的表按表、其索引、表的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的块读取,作为整个集群中所有块读取的百分比
按DML影响行数排序的前几个表,即n_tup_ins、n_tup_upd和n_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字段)
按引起自动清理负载操作数量排序的前几个表,即n_tup_upd和n_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字段)
按增长排序的顶部表
数据库 - 表所在的数据库名称
表空间 - 表所在的表空间名称
架构 - 表所在的模式名称
表 - 表名称
大小 - 表大小,即报告间隔内最后一次采样时的大小
增长 - 表增长
插入 - 插入的行数(n_tup_ins字段)
更新 - 更新的行数(包括HOT)(n_tup_upd字段)
删除 - 删除的行数(n_tup_del字段)
HOT更新 - HOT更新的行数(n_tup_hot_upd字段)
读取的块是正在从磁盘(读取)或共享缓存区(命中)中处理的块。基于pg_statio_all_indexes视图的数据。
数据库 - 索引所在的数据库名称
表空间 - 索引所在的表空间名称
架构 - 索引所在的模式名称
表 - 表名称
索引 - 索引名称
扫描 - 在索引上执行的扫描次数(idx_scan字段)
块 - 从此索引中读取的块(idx_blks_read + idx_blks_hit)
%总计 - 该索引读取的块数,占整个集群读取的所有块数的百分比
按块读取排序的顶部索引。基于pg_statio_all_indexes视图的数据。
数据库 - 索引所在的数据库名称
表空间 - 索引所在的表空间名称
架构 - 索引所在的模式名称
表 - 表名称
索引 - 索引名称
扫描 - 在索引上执行的扫描次数(idx_scan 字段)
块读取 - 从该索引读取的磁盘块数(idx_blks_read)
%总数 - 该索引的块读取占整个集群所有块读取的百分比
命中率(%) - 该索引获取的缓存块在所有获取该索引的块中所占的百分比
按增长排序的前索引
数据库 - 索引所在的数据库名称
表空间 - 索引所在的表空间名称
模式 - 索引所在的模式名称
表 - 表名称
索引 - 索引名称
索引 - 索引统计信息
大小 - 索引大小,报告间隔中最后一次采样时的大小
增长 - 报告间隔期间的索引增长
表 - 底层表的统计信息
插入 - 插入到底层表中的行数(n_tup_ins 字段)
更新 - 在底层表中更新的行数(不包括HOT更新)(n_tup_upd - n_tup_hot_upd)
删除 - 从底层表中删除的行数(n_tup_del 字段)
报告间隔期间未被扫描的索引,按照底层表上的DML操作排序,可能导致索引支持。排除约束索引。
数据库 - 索引所在的数据库名称
表空间 - 索引所在的表空间名称
模式 - 索引所在的模式名称
表 - 表名称
索引 - 索引名称
索引 - 索引统计信息
大小 - 索引大小,报告间隔中最后一次采样时的大小
增长 - 报告间隔期间的索引增长
Table - 底层表的统计信息
Inserted - 底层表中插入的行数(n_tup_ins 字段)
Updated - 底层表中更新的行数(不包括HOT更新)(n_tup_upd - n_tup_hot_upd)
Deleted - 底层表中删除的行数(n_tup_del 字段)
本报告部分根据pg_stat_user_functions视图,列出了集群中最常用的函数。
按经过的时间排序的常用函数。
Database - 函数所在的数据库名称
Schema - 函数所在的 schema 名称
Function - 函数名称
Executions - 调用此函数的次数(calls 字段)
Time (s) - 函数时间统计,单位为秒
Total - 此函数和所有由它调用的其他函数所花费的总时间(total_time 字段)
Self - 此函数本身所花费的总时间,不包括由它调用的其他函数(self_time 字段)
Mean - 单次函数执行的平均时间
Mean self - 单次函数执行的平均 self 时间
按执行次数排序的常用函数。
Database - 函数所在的数据库名称
Schema - 函数所在的 schema 名称
Function - 函数名称
Executions - 调用此函数的次数(calls 字段)
Time (s) - 函数时间统计,单位为秒
Total - 此函数和所有由它调用的其他函数所花费的总时间(total_time 字段)
Self - 此函数本身所花费的总时间,不包括由它调用的其他函数(self_time 字段)
Mean - 单次函数执行的平均时间
Mean self - 单次函数执行的平均 self 时间
按经过的时间排序的常用触发器函数。
Database - 函数所在的数据库名称
Schema - 函数所在的 schema 名称
Function - 函数名称
Executions - 调用此函数的次数(calls 字段)
Time (s) - 函数时间统计,单位为秒
Total - 此函数和所有由它调用的其他函数所花费的总时间(total_time 字段)
Self - 此函数本身所花费的总时间,不包括由它调用的其他函数(self_time 字段)
Mean - 单次函数执行的平均时间
Mean self - 单次函数执行的平均 self 时间
按处理的 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 字段)
按分析运行(手动和自动)次数排序的表格排名
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 字段)
此表提供了由表格索引引起的隐式 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 - 报告期间的平均关系大小
此部分包含最后一次 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 - 表格大小,即最后一次报告样本时的大小。
此部分包含最后一次 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 - 表格大小,即最后一次报告样本时的大小。
报告的此部分包含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 - 此字段将包含在报告间隔期间首次观察到此值的样本的时间戳。
报告的此部分包含几个重要的Linux内核参数。
Setting - 参数名称。
Value - 参数的值。
Source - 定义此设置的配置文件。
LightDB在执行完成之后收集执行统计信息。如果语句的单次执行持续多个样本,它将仅影响最后一个样本(在完成时)。您无法获取仍在运行的语句的统计信息。此外,像vacuum和checkpointer这样的维护流程仅在完成时更新统计信息。
重置任何LightDB统计信息可能会影响下一个样本的准确性。
对关系的独占锁与计算关系大小冲突。如果任何会话持有AccessExclusiveLock,样本将不会收集这些关系的大小信息。但是,会话可以在样本处理期间对关系进行AccessExclusiveLock。为了解决这个问题,将lock_timeout设置为3秒,因此如果take_sample()函数在3秒内无法获取锁,它将失败,不会生成样本。
本部分描述了报告表及其列。
此表包含按等待时间排序的前lt_profile.topn个用户等待事件。
Wait Event - 进程正在等待的特定事件。
Wait Event Type - 此事件的类型。
Wait Time(s) - 所有此事件的总等待时间。
%Total Wait Time - 所有此事件的总等待时间与群集中所有事件的总等待时间的百分比。
此表包含按等待时间排序的前lt_profile.topn个后台等待事件。
Wait Event - 进程正在等待的特定事件。
Wait Event Type - 此事件的类型。
Wait Time(s) - 所有此事件的总等待时间。
%Total Wait Time - 所有此事件的总等待时间与群集中所有事件的总等待时间的百分比。
按等待时间排序的顶部等待事件,用于按pg_stat_statements视图的 total_exec_time字段排序的顶部语句。
查询ID - 数据库、用户和查询文本的哈希值作为查询标识符。与 ltcenter实用程序兼容。在方括号中显示十六进制表示的pg_stat_statements 字段qieryid。
SQL文本 - 完整查询的前100个字符。
Exec(s) - 执行此语句所花费的时间(total_exec_time 字段)。
%总计 - 此语句的执行时间占群集中所有语句的总经过时间的百分比
等待事件 - 进程等待的具体事件。
等待时间(s) - 此查询中事件的总等待时间。
报告中提到的所有语句的查询文本。您可以在任何统计表格中使用查询ID链接进入该页面,查看查询文本。