postgresql数据库性能监控

在进行技术测试时,观察数据库性能,并找到性能方面存在问题,对数据库做监控是必不可少的。

1.数据库性能视图

这里我们常用的是pg_stat_activity,该视图可以查询出当前正在运行的SQL。
postgresql中pg_stat_activity动态统计
pg_stat_activity:一行服务器进程,显示当前连接进程的状态信息,比如状态和当前查询

pg_stat_activity视图具体信息:

postgres=# \d+ pg_stat_activity 
                        View "pg_catalog.pg_stat_activity"
      Column      |           Type           | Storage  | Description 
------------------+--------------------------+----------+-------------
 datid            | oid                      | plain    | 后端连接到的数据库的OID
 datname          | name                     | plain    | 后端连接到的数据库的名称
 pid              | integer                  | plain    | 后端的进程 ID
 usesysid         | oid                      | plain    | 登录到这个后端的用户的 OID
 usename          | name                     | plain    | 登录到这个后端的用户的名称
 application_name | text                     | extended | 连接到这个后端的应用的名称
 client_addr      | inet                     | main     | 连接到这个后端的客户端的IP 地址。 如果这个域为空,它表示客户端通过服务器机器上的一个 Unix 套接字连接或者这是一个内部进程(如自动清理)
 client_hostname  | text                     | extended | 已连接的客户端的主机名,
                                                           由client_addr的反向 DNS 查找报告。这个域将只对 IP 连接非空,并且只有log_hostname被启用时才会非空。
 client_port      | integer                  | plain    | 客户端用以和这个后端通信的 TCP 端口号,如果使用Unix 套接字则为-1
 backend_start    | timestamp with time zone | plain    | 进程被启动的时间,对于客户端后端,这是客户端连接到服务器的时间
 xact_start       | timestamp with time zone | plain    | 进程的当前事务被启动的时间,如果没有活动事务则为空。如果当前查询是它的第一个事务,这一列等于query_start。
 query_start      | timestamp with time zone | plain    | 当前活动查询被开始的时间,如果state不是active,这个域为上一个查询被开始的时间
 state_change     | timestamp with time zone | plain    | state上一次被改变的时间
 waiting          | boolean                  | plain    | 事务是否为等待状态
 state            | text                     | extended | 后端的当前总体状态。
     |           |      |    • active:后端正在执行一个查询。
     |        |      |    • idle:后端正在等待一个新的客户端命令。
     |        |      |    • idle in transaction:后端在一个事务中,但是当前没有正在执行一个查询。
     |        |      |    • idle in transaction (aborted):这个状态与idle intransaction相似,
     |        |      |     不过在该事务中的一个语句导致了一个错误。
     |        |      |    • fastpath function call:后端正在执行一个 fast-path 函数。
     |        |      |    • disabled:如果在这个后端中track_activities被禁用,则报告这个状态。
 query           | | text                     | extended |   最近查询的文本。
backend_type                                               如果state为active,这个域显示当前正在执行的查询。
                            在所有其他状态下,它显示上一个被执行的查询。 默认情况下,查询文本被截断为024个字符;可以通过参数更改此值。
视图定义:
 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.wait_event_type,
    s.wait_event,
    s.state,
    s.backend_xid,
    s.backend_xmin,
    s.query,
    s.backend_type
   FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, sslcompression, sslclientdn)
     LEFT JOIN pg_database d ON s.datid = d.oid
     LEFT JOIN pg_authid u ON s.usesysid = u.oid;

pg_stat_activity监控正在频繁执行的sql

 select  state,usename,datname,pid,wait_event_type,
 wait_event,substr(query ,1,50),
 xact_start, query_start,query
  from  pg_stat_activity where state <>'idle';

2.Linux监控

在Postgresql调优过程中,Linux命令工具也有很大帮助,常用的命令有:
top:查看全局信息,如CPU占用率,load情况,内存使用情况,topN的进程,idle
iostat:可以查看磁盘的读写IOPS,读写吞吐量,读写响应时间,I/O利用率

使用Linux监控pg步骤:
1)根据top信息,找出CPU占用率比较高的postgres进程id=XXXXX
2)通过 select pid,state,usename,datname,query from pg_stat_activity where pid= 'XXXXX’找到该进程sql,然后进行优化;

你可能感兴趣的:(Postgresql性能监控)