监视数据库活动和分析性能
linux工具
# ps auxw |grep ^postgres
#/services/install/postgresql10/bin/postmaster -D /services/install/postgresql10/data
主服务器进程。
接下来的五个进程是主进程自动启动的后台工作进程
五个进程: checkpointer,writer,wal writer,autovacuum launcher, stats collector
其余每个进程都是处理一个客户端连接的服务器进程.
idle 等待客户端命令
idle in transaction(等待BEGIN块内的客户端)
waiting如果服务器进程当前正在等待另一个会话持有的锁,则附加
stats collector
支持收集和报告有关服务器活动的信息
配置: 在
postgresql.conf
文件中配置。参数
track_activities
可以监视任何服务器进程正在执行的当前命令。参数track_counts 控制是否收集有关表和索引访问的统计信息.
参数track_functions 可以跟踪用户定义函数的使用情况
参数track_io_timing 可以监视块读取和写入时间。
这些文件存储在stats_temp_directory参数指定的目录中pg_stat_tmp。
在服务器启动时执行恢复,将重置所有统计计数器.
查看统计信息
动态统计视图:
pg_stat_activity 每个服务器进程一行,显示与该进程的当前活动相关的信息,例如状态和当前查询。
pg_stat_replication 每个WAL发送器进程一行,显示有关复制到该发件人连接的备用服务器的统计信息。
pg_stat_wal_receiver 只有一行,显示来自该接收器连接服务器的WAL接收器的统计信息。
pg_stat_subscription 每个订阅至少一行,显示有关订阅工作人员的信息。
pg_stat_ssl 每个连接一行(常规和复制),显示有关此连接上使用的SSL的信息。
pg_stat_progress_vacuum 每个后端(包括autovacuum工作进程)运行一行VACUUM,显示当前进度
收集的统计视图:
pg_stat_archiver 仅限一行,显示有关WAL归档进程活动的统计信息。
pg_stat_bgwriter 仅一行,显示有关后台编写器进程活动的统计信息。
pg_stat_database 每个数据库一行,显示数据库范围的统计信息。
pg_stat_database_conflicts 每个数据库一行,显示由于与备用服务器上的恢复冲突而导致的查询取消的数据库范围统计信息。
pg_stat_all_tables 当前数据库中每个表的一行,显示有关对该特定表的访问的统计信息。
pg_stat_sys_tables 只显示系统表。
pg_stat_user_tables 只显示用户表。
pg_stat_xact_all_tables 此视图中不存在实时和死行数以及真空和分析操作的列。
pg_stat_xact_sys_tables 只显示系统表。
pg_stat_xact_user_tables 只显示用户表。
pg_stat_all_indexes 当前数据库中每个索引占一行,显示有关对该特定索引的访问的统计信息
pg_stat_sys_indexes 只显示系统表上的索引
pg_stat_user_indexes 只显示用户表的索引。
pg_statio_all_tables 显示该特定表上的I / O统计信息。
pg_statio_sys_tables 只显示系统表。
pg_statio_user_tables 只显示用户表。
pg_statio_all_sequences 显示有关该特定序列的I/O的统计信息
pg_stat_user_functions 显示有关该函数执行的统计信息
pg_stat_xact_user_functions 计数当前事务
视图详解:https://www.postgresql.org/docs/10/static/monitoring-stats.html
查看锁
监视数据库活动的工具是
pg_locks
系统表。它允许数据库管理员查看有关锁管理器中未完成锁的信息.查看当前未完成的所有锁,特定数据库中关系的所有锁,特定关系上的所有锁,或特定PostgreSQL会话持有的所有锁。
确定当前数据库中与最无锁的锁(可能是数据库客户端之间的争用源)之间的关系。
确定锁争用对整体数据库性能的影响,以及争用因整体数据库流量而变化的程度。
监视磁盘使用情况
查看任何表的磁盘使用情况:
SELECT pg_relation_filepath(oid),relpages from pg_class where relname='customer';
显示TOAST表使用的空间:
SELECT relname,relpages FROM pg_class,(SELECT reltoastrelid
FROM pg_class WHERE relname = 'customer') AS ss WHERE oid=ss.reltoastrelid OR oid = (SELECT ind
exrelid FROM pg_index WHERE indrelid = ss.reltoastrelid) ORDER BY relname;
显示索引大小
SELECT c2.relname,c2.relpages
FROM pg_class c,pg_class c2,pg_index i
WHERE c.relname = 'customer' AND
c.oid = i.indrelid AND
c2.oid = i.indexrelid
ORDER BY c2.relname;
查看最大的表和索引:
SELECT relname,relpages FROM pg_class ORDER BY relpages DESC;