• Postgresql数据库运维统计信息


    如果需要使用以下运维信息,需要如下几步

    • 修改postgresql.conf文件
    #shared_preload_libraries = ''  # (change requires restart)
    
    shared_preload_libraries = 'pg_stat_statements'
    
    • 1
    • 2
    • 3
    • 重启数据库
    • 创建扩展
    CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
    
    • 1

    1. 统计信息的收集维度配置

    1.1. 关键配置

    • track_activities : 收集SQL执行开始时间以及SQL语句的内容,默认打开
    • track_activity_query_size : 指定统计信息中允许存储的SQL长度,超出长度的SQL被截断,默认1024
    • track_counts : 收集数据库的活动信息(如新增的行数和删除的行数等)
    • track_io_timing : 收集IO操作的时间开销,因为需要不断的调用系统当前时间,所以某些系统中会带来极大的开销,从而带来极大的负面影响。
    • track_functions : 跟踪函数的调用次数和时间开销
    • update_process_title : 每次服务端process接收到新的SQL时更新command状态。
    • log_statement_stats (boolean) – 类似unix的getrusage()操作系统函数, 用于收集SQL语句级的资源开销统计. 包含以下3种层面的 全部. 因此配置了log_statement_stats就不需要配置以下选项.
    • log_parser_stats (boolean) – 同上, 但是只包含SQL parser部分的资源开销统计.
    • log_planner_stats (boolean) – 同上, 但是只包含SQL planner部分的资源开销统计.
    • log_executor_stats (boolean) – 同上, 但是只包含SQL executor部分的资源开销统计.

    1.2 其他配置

    在这里插入图片描述

    字段名字段类型字段信息描述
    pg_stat_get_backend_idset()setof integer当前活动后端ID号的集合(从1到活动后端数量)
    pg_stat_get_backend_activity(integer)text此后端最近查询的文本
    pg_stat_get_backend_activity_start(integer)timestamp with time zone最近一次查询开始的时间
    pg_stat_get_backend_client_addr(integer)inet与此后端连接的客户端的IP地址
    pg_stat_get_backend_client_port(integer)integer客户端用于通信的TCP端口号
    pg_stat_get_backend_dbid(integer)oid此后端所连接的数据库的OID
    pg_stat_get_backend_pid(integer)integer后端进程ID
    pg_stat_get_backend_start (integer)timestamp with time zone此过程开始的时间
    pg_stat_get_backend_userid(integer)oid登录到该后端用户的OID
    pg_stat_get_backend_waiting(integer)boolean如果此后端当前正在等待锁,则为True
    pg_stat_get_backend_xact_start(integer)timestamp with time zone如果此后端当前正在等待锁,则为True

    2. 常用的监控数据库活动的sql

    2.1. 调用次数倒序输出

    select * from pg_stat_statements order by calls desc limit 1 offset 0;
    
    • 1

    在这里插入图片描述

    2.2. 单次SQL执行时间倒序输出

    select * from pg_stat_statements order by total_exec_time/calls desc limit 10 offset 0;
    
    • 1

    在这里插入图片描述

    2.3. 按shared buffer “未命中块读” 倒序输出

    select * from pg_stat_statements order by shared_blks_read desc limit 10 offset 0;
    
    • 1

    在这里插入图片描述

    2.4. 获取CPU time Top20的统计结果

    export PGPORT=1921 
    export PGDATA=/data01/pgdata/1921/pg_root 
    export LANG=en_US.utf8 
    export PGHOME=/opt/pgsql 
    export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib 
    export DATE=`date +"%Y%m%d%H%M"` 
    export PATH=$PGHOME/bin:$PATH:. 
    export PGHOST=$PGDATA 
    export PGDATABASE=postgres 
    psql -A -x -c "select row_number() over() as rn, * from (select query,' calls:'||calls||' total_exec_time_s:'||round(total_exec_time::numeric,2)||' avg_time_ms:'||round(1000*(total_exec_time::numeric/calls),2) as stats from pg_stat_statements order by total_exec_time desc limit 20) t;" >/tmp/stat_query.log 2>&1 
    echo -e "$DATE avcp TOP20 query report yest"|mutt -s "$DATE avcp TOP20 query report yest" -a /tmp/stat_query.log digoal@126.com 
    psql -c "select pg_stat_statements_reset()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    crontab -e
    
    1 8 * * * /home/postgres/script/report.sh
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    2.5. 查看数据库级统计信息

    如数据库的 事务提交次数, 回滚次数, 未命中数据块读, 命中读, 行的统计信息(扫描, 输出,插入,更新,删除), 临时文件, 死锁, IOTIME等统计信息.

    select tup_returned,tup_fetched from pg_stat_database where datname ='generalquery_frame';
    
    • 1

    在这里插入图片描述

    字段名字段类型字段信息描述
    datidid数据库OID
    datanamename数据库Name
    numbackendsinteger当前连接到此数据库的后端数量。这是该视图中唯一返回反映当前状态的值的列;所有其他列返回自上次重置以来的累积值
    xact_commitbigint此数据库中已提交的事务数
    xact_rollbackbigint此数据库中已回滚的事务数
    blks_readbigint在此数据库中读取的磁盘块数目
    blks_hitbigint磁盘块已经在缓冲缓存中被发现的次数,因此不需要读取(这只包括在PostgreSQL缓冲区中的命中)缓存,而不是操作系统的文件系统缓存)
    tup_returnedbigint在此数据库中查询返回的行数
    tup_fetchedbigint在此数据库中查询获取的行数
    tup_insertedbigint查询在此数据库中插入的行数
    tup_updatedbigint此数据库中查询更新的行数
    tup_deletedbigint查询在此数据库中删除的行数
    conflictsbigint由于与此数据库中的恢复冲突而取消的查询数。冲突只发生在备用服务器上;参见pa_stat_database_conflicts获取细节。)
    temp_filesbigint查询在此数据库中创建的临时文件数。所有临时文件都会被计算在内,而不管临时文件是为什么创建的(例如:排序或散列),而不考虑日志临时文件的设置。
    temp_bytesbigint在此数据库中查询写入临时文件的数据总量。所有临时文件都会被计算在内,而不管临时文件的原因是什么创建,而不考虑日志临时文件设置。
    deadlocksbigint在此数据库中检测到的死锁数目
    blk_read_timedouble precision后端在此数据库中读取数据文件块所花费的时间,以毫秒为单位
    blk_write_timedouble precision后端在此数据库中写入数据文件块所花费的时间,以毫秒为单位
    stats_resettimestamp_with这些统计数据最后重置的时间

    2.6. 查看表级统计信息

    区分全表扫描和索引扫描的次数和输出的行, 以及DML的行数, 评估的当前活动行数和垃圾行数

    在这里插入图片描述

    字段名字段类型字段信息描述
    relidid数据库OID
    schemanamename该表所在的模式名称
    relnamename该表的名称
    heap_blks_readbigint从该表中读取的磁盘块数量
    heap_blks_hitbigint该表中的缓冲区命中数
    idx_blks_readbigint从该表的所有索引中读取的磁盘块数
    idx_blks_hitbigint该表上所有索引中的缓冲区命中数
    toast_blks_readbigint从该表的TOAST表中读取的磁盘块数量(如果有的话)
    toast_blks_hitbigint该表的TOAST表中的缓冲区命中次数(如果有的话)
    tidx_blks_readbigint从该表的TOAST表索引中读取的磁盘块数量(如果有的话)
    tidx_blks_hitbigint该表的TOAST表索引中的缓冲区命中数(如果有的话)

    2.7. 查看索引级统计信息

    在这里插入图片描述

    字段名字段类型字段信息描述
    relidoid索引表的OID
    indexrelidoid该索引的OID
    schemanamename此索引所在的模式的名称
    relnamename此索引的表名
    indexrelnamename该索引的名称
    idx_scanbigint在该索引上启动的索引扫描次数
    idx_tup_readbigint扫描该索引返回的索引条目数
    idx_tup_fetchbigint使用该索引进行简单索引扫描获取的活动表行数

    2.8. 表的IO级统计信息

    如heap主存储的块读(区分未命中shared buffer和命中shared buffer的统计)

    在这里插入图片描述

    字段名字段类型字段信息描述
    relidoid表的OID
    schemanamename该表所在的模式名称
    relnamename该表的名称
    heap_blks_readbigint从该表中读取的磁盘块数量
    heap_blks_hitbigint该表中的缓冲区命中数
    idx_blks_readbigint从该表的所有索引中读取的磁盘块数
    idx_blks_hitbigint该表上所有索引中的缓冲区命中数
    toast_blks_readbigint从该表的TOAST表中读取的磁盘块数量(如果有的话)
    toast_blks_hitbigint该表的TOAST表中的缓冲区命中次数(如果有的话)
    tidx_blks_readbigint从该表的TOAST表索引中读取的磁盘块数量(如果有的话)
    tidx_blks_hitbigint该表的TOAST表索引中的缓冲区命中数(如果有的话)

    2.9. 索引的IO级统计信息

    索引的块读(区分未命中shared buffer和命中shared buffer的统计)

    在这里插入图片描述

    字段名字段类型字段信息描述
    relidoid索引表的OID
    indexrelidoidOID of this index
    schemanamename该索引的OID
    relnamename此索引的表名
    indexrelnamename该索引的名称
    idx_blks_readbigint从该索引读取的磁盘块数目
    idx_blks_hitbigint这个索引中的缓冲区命中数

    2.10. 序列的IO级统计信息

    序列的块读(区分未命中shared buffer和命中shared buffer的统计)

    在这里插入图片描述

    字段名字段类型字段信息描述
    relidoid序列的OID
    schemanamename此序列所在的模式名称
    relnamename这个序列的名称
    blks_readbigint从这个序列中读取的磁盘块的数目
    blks_hitbigint这个序列中缓冲区命中的次数

    2.11. , 函数的统计信息

    调用次数, 总的时间开销.
    必须要先打开track_functions参数.

    在这里插入图片描述

    字段名字段类型字段信息描述
    funcidoid函数的OID
    schemanamename此函数所在的模式名称
    funcnamename此函数的名称
    callsbigint这个函数被调用的次数
    total timedouble precision在这个函数和它调用的所有其他函数中花费的总时间,以毫秒为单位
    self_timedouble precision在这个函数本身中花费的总时间,不包括它调用的其他函数,以毫秒为单位
  • 相关阅读:
    APP基本测试用例
    Java计算不同时区的时差
    商家收款码手续费太高了
    JavaEE之HTTP协议 Ⅰ
    branch与tag
    GitLab项目中添加用户,并设置其角色权限等
    bRPC works with iRDMA && ICE on Fedora 37
    解决2K/4K高分屏下Vmware等虚拟机下Kail Linux界面显示问题
    FBX文件结构解读【文本格式】
    个人数学建模算法库之线性规划模型
  • 原文地址:https://blog.csdn.net/a13407142317/article/details/134675633