zoukankan      html  css  js  c++  java
  • PostgreSQL 监控数据库活动

    监控数据库活动

    1. 标准Unix 工具

    [root@mysqlhq ~]# ps auxww | grep ^postgres
    postgres 12106 0.0 0.0 340060 15064 ? S Oct08 1:35 /usr/bin/postgres
    postgres 12107 0.0 0.0 192920 1576 ? Ss Oct08 0:03 postgres: logger process
    postgres 12109 0.0 0.0 340176 5964 ? Ss Oct08 0:03 postgres: checkpointer process
    postgres 12110 0.0 0.0 340060 2584 ? Ss Oct08 0:33 postgres: writer process
    postgres 12111 0.0 0.0 340060 5708 ? Ss Oct08 0:33 postgres: wal writer process
    postgres 12112 0.0 0.0 340460 2840 ? Ss Oct08 1:19 postgres: autovacuum launcher process
    postgres 12113 0.0 0.0 195320 1936 ? Ss Oct08 2:05 postgres: stats collector process
    postgres 22688 0.0 0.0 344716 11720 ? Ss Nov28 0:00 postgres: postgres exampledb 10.15.7.115(52996) idle
    postgres 24956 0.0 0.0 116136 2952 pts/2 S+ Nov29 0:01 -bash
    postgres 31369 0.0 0.0 341100 6112 ? Ss Nov27 0:00 postgres: postgres postgres 10.15.7.115(50552) idle
    postgres 31386 0.0 0.0 341308 6316 ? Ss Nov27 0:02 postgres: postgres postgres 10.15.7.115(50560) idle
    postgres 31408 0.0 0.0 341220 6888 ? Ss Nov27 0:00 postgres: postgres postgres 10.15.7.115(50565) idle
    postgres 31409 0.0 0.0 341144 6492 ? Ss Nov27 0:00 postgres: postgres postgres 10.15.7.115(50566) idle
    postgres 31982 0.0 0.0 116040 2684 pts/1 S Nov27 0:00 -bash
    postgres 32042 0.0 0.0 184016 3820 pts/1 S+ Nov27 0:00 psql
    postgres 32043 0.0 0.0 341204 6516 ? Ss Nov27 0:03 postgres: postgres postgres [local] idle
    /usr/bin/postgres// 服务主进程
    postgres: writer process //下面5分进程由主进程自动启动的后台工作者进程
    剩下的每一个进程都是处理一个客户端的服务进程,显示
    postgres: postgres postgres 10.15.7.115(50552) idle //postgres: user database host activity
    如果存在堵塞或者等待情况,查看 pg_locks 系统视图
    如果已经配置了cluster_name, 那么在ps输出中也会显示集群名称
    -bash-4.2$ psql -c 'SHOW cluster_name'
    cluster_name
    --------
    xxx
    $ ps aux|grep xxx

    2. 统计收集器

    PostgreSQL的统计收集器是一个支持收集和报告服务器活动信息的子系统。
    目前,这个收集器可以对表和索引的访问计数, 计数可以按磁盘块和个体行来进行。
    它还跟踪每个表中的总行数、每个表的清理和分析动作的信息。 它也统计调用用户定义函数的次数以及在每次调用中花费的总时间。
    2.1. 统计收集配置
    因为统计收集给查询执行增加了一些负荷,系统可以被配置为收集或不收集信息。由配置参数控制的,它们通常在postgresql.conf中设置
    参数track_activities启动监控当前被任意服务器进程执行的命令。
    参数track_counts控制是否收集关于表和索引访问的统计信息。
    参数track_functions启用对用户定义函数使用的跟踪。
    参数track_io_timing启动对块读写次数的监控。
    可以在单个会话中使用 SET命令打开或关闭它们
    统计收集器通过临时文件将收集到的信息传送给其他PostgreSQL进程。这些文件存储在stats_temp_directory参数命名的目录中, 默认是pg_stat_tmp。
    [root@mysqlhq pg_stat_tmp]# pwd
    /var/lib/pgsql/data/pg_stat_tmp
    [root@mysqlhq pg_stat_tmp]# ll
    total 92
    -rw------- 1 postgres postgres 3892 Nov 30 15:15 db_0.stat
    -rw------- 1 postgres postgres 17412 Nov 30 15:15 db_13295.stat
    -rw------- 1 postgres postgres 21806 Nov 30 15:15 db_16385.stat
    -rw------- 1 postgres postgres 17074 Nov 30 15:15 db_1.stat
    -rw------- 1 postgres postgres 20454 Nov 30 15:15 db_24598.stat
    -rw------- 1 postgres postgres 1162 Nov 30 15:15 global.stat
    为了得到更好的性能,stats_temp_directory可以指向一个基于 RAM 的文件系统来降低物理 I/O 需求。
    2.2. 查看统计信息
    在使用统计信息监控收集的数据时,你必须了解这些信息并非是实时更新的。 每个独立的服务器进程
    只在进入闲置状态之前才向收集器传送新的统计计数;因此正在进行的查询或事务并不影响显示出来的总数。
    同样,收集器本身也最多每 PGSTAT_STAT_INTERVAL毫秒(缺省为 500ms, 除非在编译服务器的时候修改过)发
    送一次新的报告。因此显示的信息总是落后于实际活动。 但是由track_activities收集的当前查询信息总是最新的。
    动态统计视图
    pg_stat_activity 每个服务器进程一行,显示与那个进程的当前活动相关的信息,例如状态和当前查询。详见pg_stat_activity。
    pg_stat_replication 每个WAL发送者进程一行,显示与到该发送者连接到的后备服务器的复制相关的统计信息。 详见pg_stat_replication。
    pg_stat_ssl 每个连接(普通或复制)一行,显示关于该连接中使用的SSL的信息。 详细信息请参阅pg_stat_ssl。
    收集的统计视图
    pg_stat_archiver 只有一行,显示有关 WAL 归档进程活动的统计信息。 详见pg_stat_archiver。
    pg_stat_bgwriter 只有一行,显示有关后台写进程活动的统计信息。 详见pg_stat_bgwriter。
    pg_stat_database 每个数据库一行,显示数据库范围的统计信息。 详见pg_stat_database。
    pg_stat_database_conflicts 每个数据库一行,显示数据库范围内由于与后备服务器上的恢复冲突而取消的查询有关的统计信息。 详见pg_stat_database_conflicts。
    pg_stat_all_tables 当前数据库中每个表一行,显示有关访问指定表的统计信息。 详见pg_stat_all_tables。
    pg_stat_sys_tables 和pg_stat_all_tables一样,但只显示系统表。
    pg_stat_user_tables 和pg_stat_all_tables一样,但只显示用户表。
    pg_stat_xact_all_tables 和pg_stat_all_tables相似,但计数动作只在当前事务内发生 (还没有被包括在pg_stat_all_tables和相关视图中)。此视图中不存在活行和死行数以及清理和分析操作的列。
    pg_stat_xact_sys_tables 和pg_stat_xact_all_tables一样,但只显示系统表。
    pg_stat_xact_user_tables 和pg_stat_xact_all_tables一样,但只显示用户表。
    pg_stat_all_indexes 当前数据库中的每个索引一行,显示与访问指定索引有关的统计信息。 详见pg_stat_all_indexes。
    pg_stat_sys_indexes 和pg_stat_all_indexes一样,但只显示系统表上的索引。
    pg_stat_user_indexes 和pg_stat_all_indexes一样,但只显示用户表上的索引。
    pg_statio_all_tables 当前数据库中的每个表一行,显示有关指定表上 I/O 的统计信息。 详见pg_statio_all_tables。
    pg_statio_sys_tables 和pg_statio_all_tables一样,但只显示系统表。
    pg_statio_user_tables 和pg_statio_all_tables一样,但只显示用户表。
    pg_statio_all_indexes 当前数据库中的每个索引一行,显示有关指定索引上 I/O 的统计信息。 详见pg_statio_all_indexes。
    pg_statio_sys_indexes 和pg_statio_all_indexes一样,但只显示系统表上的索引。
    pg_statio_user_indexes 和pg_statio_all_indexes一样,但只显示用户表上的索引。
    pg_statio_all_sequences 当前数据库中的每个序列一行,显示有关指定序列上 I/O 的统计信息。 详见pg_statio_all_sequences。
    pg_statio_sys_sequences 和pg_statio_all_sequences一样,但只显示系统序列 (目前没有定义系统序列,因此这个视图总是为空)。
    pg_statio_user_sequences 和pg_statio_all_sequences一样,但只显示用户序列。
    pg_stat_user_functions 每一个被跟踪的函数一行,显示与执行该函数有关的统计信息。 详见pg_stat_user_functions。
    pg_stat_xact_user_functions 和pg_stat_user_functions相似, 但是只统计在当前事务期间的调用(还没有被包括在 pg_stat_user_functions中)。
    针对每个索引的统计信息对于判断哪个索引正被使用以及它们的效果特别有用。
    pg_statio_系列视图主要用于判断缓冲区的效果。

    pg_stat_activity 视图 视图将为每一个服务器进程有一行, 显示与该进程的当前活动相关的信息。
    pg_stat_replication视图 视图将为每个 WAL 发送者进程包含一行, 显示复制到发送者连接到的后备服务器的统计信息。
    pg_stat_ssl 视图 视图将为每个后端或WAL发送者进程包含一行, 显示有关此连接上的SSL使用情况的统计信息。
    pg_stat_archiver视图 视图将总是只有一行, 该行包含着有关集簇的归档进程的数据。
    pg_stat_bgwriter视图 视图将总是只有一行,它包含集簇的全局数据
    pg_stat_database视图 视图将为集簇中的每一个数据库包含有一行, 显示数据库范围的统计信息。
    pg_stat_database_conflicts视图 视图将为每一个数据库包含一行, 该行显示数据库范围发生的由于与后备服务器上的恢复冲突而取消的查询相关的统计信息。
    pg_stat_all_tables视图 将为当前数据库中的每一个表 (包括 TOAST 表)包含一行,该行显示与对该表的访问相关的统计信息。
    pg_stat_all_indexes视图 将为当前数据库中的每个索引包含一行, 该行显示关于对该索引访问的统计信息。
    pg_statio_all_tables视图 显示指定表上有关I/O的统计信息 。
    pg_statio_all_indexes视图 显示指定索引上有关 I/O 的统计信息。
    pg_statio_all_sequences视图 在指定序列上有关 I/O 的统计信息
    pg_stat_user_functions视图 显示有关该函数执行的统计信息。track_functions 参数控制到底跟踪哪些函数。
    2.3. 统计函数
    其他查看统计信息的方法是直接使用查询,这些查询使用上述标准视图用到的底层统计信息访问函数。
    d+ pg_stat_activity
    postgres=# d+ pg_stat_activity
    View "pg_catalog.pg_stat_activity"
    Column | Type | Modifiers | Storage | Description
    ------------------+--------------------------+-----------+----------+-------------
    datid | oid | | plain |
    datname | name | | plain |
    pid | integer | | plain |
    usesysid | oid | | plain |
    usename | name | | plain |
    application_name | text | | extended |
    client_addr | inet | | main |
    client_hostname | text | | extended |
    client_port | integer | | plain |
    backend_start | timestamp with time zone | | plain |
    xact_start | timestamp with time zone | | plain |
    query_start | timestamp with time zone | | plain |
    state_change | timestamp with time zone | | plain |
    waiting | boolean | | plain |
    state | text | | extended |
    backend_xid | xid | | plain |
    backend_xmin | xid | | plain |
    query | text | | extended |
    View definition:
    SELECT s.datid,
    d.datname,
    s.pid,
    s.usesysid,
    u.rolname AS usename,
    s.application_name,
    s.client_addr,
    s.client_hostname,
    s.client_port,
    s.backend_start,
    s.xact_start,
    s.query_start,
    s.state_change,
    s.waiting,
    s.state,
    s.backend_xid,
    s.backend_xmin,
    s.query
    FROM pg_database d,
    pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, waiting, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, ssl, sslversion, sslcipher, sslbits, sslcompression, sslclientdn),
    pg_authid u
    WHERE s.datid = d.oid AND s.usesysid = u.oid;
    额外统计函数
    pg_backend_pid() 处理当前会话的服务器进程的进程 ID
    pg_stat_get_activity
    pg_stat_get_snapshot_timestamp() 返回当前统计快照的时间戳
    pg_stat_clear_snapshot() 抛弃当前的统计快照
    pg_stat_reset() 把用于当前数据库的所有统计计数器重置为零(要求超级用户权限)
    pg_stat_reset_shared(text) 把某些集簇范围的统计计数器重置为零

    3. 查看锁

    监控数据库活动的另外一个有用的工具是pg_locks系统表。
    这个功能可以用于:
    • 查看当前所有未解决的锁、在一个特定数据库中的关系上所有的锁、在一个特定关系上的所有锁, 或者由一个特定PostgreSQL会话持有的所有锁。
    • 判断当前数据库中带有最多未授予锁的关系(它很可能是数据库客户端的竞争源)。
    • 判断锁竞争给数据库总体性能带来的影响,以及锁竞争随着整个数据库流量的变化范围。
    postgres=# select * from pg_locks;
    locktype | database | relation | page | tuple | virtualxid | transactionid | classid | objid | objsubid | virtualtransaction | pid | mode | granted | fastpath
    ------------+----------+----------+------+-------+------------+---------------+---------+-------+----------+--------------------+-------+-----------------+---------+----------
    relation | 13295 | 11673 | | | | | | | | 6/588 | 32043 | AccessShareLock | t | t
    virtualxid | | | | | 6/588 | | | | | 6/588 | 32043 | ExclusiveLock | t | t

  • 相关阅读:
    使用SWFUpload进行多文件上传
    TSQL递归
    Silverlight之视频录制
    Silverlight之摄像头麦克风使用
    Silverlight之文件上传组件
    SQL FOR XML
    XAML开发入门之XAML核心语法
    Ajax技术三种实现方式之xmlhttp+httphandler篇 (三)
    Ext中超时设定 ext.ajax.timeout
    后台执行js先执行前端的JS函数,再执行后台函数的按钮实
  • 原文地址:https://www.cnblogs.com/yhq1314/p/10045303.html
Copyright © 2011-2022 走看看