关键字:
统计信息、GUC参数、stats collector 进程
1.统计信息概述
统计信息用于记录数据库内部的活动状态,包括:表和索引的访问次数、表和索引的磁盘块读写块数、表的记录总行数、表的清理和分析动作信息、实时等待事件、累积式等待事件、TOP SQL、主机环境(CPU、IO、内存、网络)、后台写和检查点统计、LWLock、登录、事务、死锁等。 统计信息的作用在于:
(1)观察数据内部当前状态(pg_stat_activity、pg_stat_replication、pg_stat_progress_vacuum、pg_locks...)
(2)观察数据内部累积状态(pg_stat_database、pg_stat_all_tables、pg_stat_all_indexes、pg_stat_statements...)
(3)是性能管理组件的重要支撑(KWR、KDDM、KSH)
(4)是性能分析和优化的重要手段(监控→诊断→建议→应用)
统计信息按不同方式,可以分为以下类别:
(1)按统计时效分
①动态统计信息:pg_stat_activity, pg_stat_ssl...
②累积式统计信息:pg_stat_all_tables...
③实时累积式统计信息:pg_stat_statements...
(2)按统计范围分
①实例级统计信息:pg_stat_bgwriter, pg_stat_database...
②库级统计信息:pg_stat_all_tables, pg_stat_all_indexes...
③SQL级统计信息:pg_sql_sqltime, pg_stat_sqlwait, pg_stat_sqlio...
(3)按模块分
①内核统计信息:pg_stat_, pg_statio_...
②插件统计信息:pg_stat_statements, pg_buffercache, pg_qualstats...
2.GUC参数
统计开关 | 说明 |
---|---|
track_activites | 布尔型,监控各服务器进程当前执行状态 |
track_activity_query_size | 数值型,控制 pg_stat_activity 中query 的最大长度 |
track_counts | 布尔型,是否启用在数据库活动上的统计收集 |
track_functions | 字符型,启用对用户自定义函数的统计 |
track_io_timing | 布尔型,启用对块读写次数、时间的统计 |
track_sql | 布尔型,统计 sqltime, sqlwait, sqlio |
track_instance | 布尔型,统计 instio, instlock, instevent |
track_wait_timing | 布尔型,跟踪 SQL、Instance 各统计项的时间 |
pg_stat_statements.track | 跟踪TOP SQL的级别:'none' |
stats_temp_directory | 读取统计信息的临时统计文件路径,默认pg_stat_temp |
3.技术原理
(1)架构图 - 本地缓存、异步更新
(2)报告统计信息到本地
(3)汇总统计信息到 stats collector 进程
(4)查询统计信息
(5)统计信息文件和目录