PostgreSQL 之 统计信息

PG用于收集统计信息的进程

stats collector process    

源码路径 "src/backend/postmaster/pgstat.c"

 

统计信息的存放地

启动时, 读入已存在的统计文件, 或初始化0. 数据库运行过程中存储在内存和temp文件;

启动时 : shared buffer -> "src/backend/postmaster/pgstat.c" -> PgstatCollectorMain -> pgstat_read_statsfiles

 

数据库关闭时保存到非易失存储

 

postgresql.conf ->stats_temp_directory , 推荐配置在高速磁盘或内存文件系统中。

数据库正常关闭时会把统计信息从tmp目录拷贝到$PGDATA/pg_stat目录中, 确保统计信息不会丢失。

 

pg_stat开头的统计表和试图是否产生统计数据,主要由以下参数决定:  

track_activities:是否收集当前正在执行的SQL,默认为on  

track_counts:  是否收集表和索引上的统计信息,默认为on  

track_functions:可以取allplnone,如果是pl则只收集pl/pgsql写的函数的统计信息all表示收集所有类型的函数,包括C语言和SQL写的函数。默认为none

track_io_timing:是否收集I/O的时间信息。默认为off

参数名

作用

track_activities (boolean)          

收集SQL执行开始时间以及SQL语句的内容. 默认打开.

track_activity_query_size (integer) 

指定统计信息中允许存储的SQL长度, 超出长度的SQL被截断. 默认1024. pg_stat_activity.query

track_counts (boolean)              

收集数据库的活动信息(如表新增的行数, 删除的行数等), autovacuum进程需要用到这部分信息. 必须开启

track_io_timing (boolean)           

收集IO操作的时间开销,因为需要不断的调用系统当前时间,所以某些系统中会带来极大的负面影响.被用于pg_stat_database, pg_stat_statements 显示IO时间. (使用pg_test_timing测试时间统计的影响)

track_functions (enum)              

跟踪函数的调用次数和时间开销. 可配置pl(仅包括plpgsql函数), all(包括SQL,C,plpgsql函数), off

update_process_title (boolean)      

每次服务端process接收到新的SQL时更新command状态. (ps命令可见)

log_statement_stats (boolean)       

类似unix的getrusage()操作系统函数, 用于收集SQL语句级的资源开销统计. 

包含以下3种层面的全部. 

log_parser_stats (boolean)     

同上, 但是只包含SQL parser部分的资源开销统计.      

log_planner_stats (boolean)     

同上, 但是只包含SQL planner部分的资源开销统计.  

log_executor_stats (boolean)    

同上, 但是只包含SQL executor部分的资源开销统计.

 

各个对象级别的统计信息视图:  

pg_stat_database  

pg_stat_all_tables  

pg_stat_sys_tables  

pg_stat_user_tables  

pg_stat_all_indexes  

pg_stat_sys_indexes  

pg_stat_user_indexes

 

数据库内函数调用统计信息(调用次数及其他信息)的视图

pg_stat_user_functions         

 

各个对象上发生I/O情况的统计视图:  

pg_statio_all_tables  

pg_statio_sys_tables  

pg_statio_user_tables  

pg_statio_all_indexes  

pg_statio_sys_indexes  

pg_statio_user_indexes  

pg_statio_all_sequences  

pg_statio_sys_sequences  

pg_statio_user_sequences  

 

相关sql参考:

查看所有系统表

 select relkind,relname from pg_class where relnamespace = (select oid from pg_namespace where nspname='pg_catalog') and relkind='v' order by 1,2;

 

查看所有系统视图

select relkind,relname from pg_class where relnamespace = (select oid from pg_namespace where nspname='pg_catalog') and relkind='v' order by 1,2;  

 

查看或重置统计信息的函数

函数名称 参数类型 说明
pg_stat_get_activity(integer) setof record 返回具有指定 PID 的后端相关的一个记录,或者在指定NULL的情况下为系统中每一个活动后端返回一个记录。被返回的域是pg_stat_activity视图中的那些域的一个子集。
pg_stat_get_snapshot_timestamp() 带时区的时间戳 返回当前统计信息快照的时间戳
pg_stat_clear_snapshot() void 抛弃当前的统计快照
pg_stat_reset() void 把用于当前数据库的所有统计计数器重置为零(默认要求超级用户权限,但这个函数的 EXECUTE 可以被授予给其他人)。
pg_stat_reset_shared(text) void 把某些集簇范围的统计计数器重置为零,具体哪些取决于参数(默认要求超级用户权限,但这个函数的 EXECUTE 可以被授予给其他人)。 调用pg_stat_reset_shared('bgwriter')pg_stat_bgwriter 视图中显示的所有计数器清零。调用pg_stat_reset_shared('archiver') 将会把pg_stat_archiver视图中展示的所有计数器清零。
pg_stat_reset_single_table_counters(oid) void 把当前数据库中用于单个表或索引的统计数据重置为零(默认要求超级用户权限,但这个函数的 EXECUTE 可以被授予给其他人)
pg_stat_reset_single_function_counters(oid) void 把当前数据库中用于单个函数的统计信息重置为零(默认要求超级用户权限,但这个函数的 EXECUTE 可以被授予给其他人)

 by 波罗

你可能感兴趣的:(Highgo,DB,PostgreSQL)