注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL:通过 .psqlrc 定制监控脚本  

2014-02-21 11:54:13|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  
         在数据库维护过程中,定制监控脚本是很平常的工作,以提高工作效率,例如,下面这个
sql  用来查询数据库当前的非空闲会话。

--1 sql
 SELECT
    pid ,
    datname ,
    usename ,
    client_addr ,
    query ,
    query_start ,
    state ,
    waiting
FROM
    pg_stat_activity
WHERE
    query ! ~ '<IDLE'
    AND pid <> pg_backend_pid()
    AND state = 'active'
ORDER BY  query;
备注:SQL 不算长,需要用时手工编写也没问题,当然也有更快捷的方法,可以将此 SQL 写入
           .psqlrc  文件,  首先简单介绍下这个文件。

--2 关于 .psqlrc 文件
         .psqlrc 文件用来定制 psql 客户端特性的配置文件,定制后对当前客户端全局生效,在 linux 
环境下位于 ~/.psqlrc, windows 平台位于 %APPDATA%\postgresql\psqlrc.conf,下面是 .psqlrc 
的一个简单例子。
    
--.psqlrc 文件举例
 [pg93@redhatB ~]$ cat .psqlrc 
\set active_session ' select pid, datname,usename,client_addr,query,query_start,state,waiting from pg_stat_activity where query !~''<IDLE'' and pid <> pg_backend_pid() and state=''active'' order by query;'

\set wait_session ' select pid, datname,usename,client_addr,query,query_start,state,waiting from pg_stat_activity where waiting and query !~''<IDLE'' and pid <> pg_backend_pid() order by query;'
备注:这里编写了两条SQL,第一条即为本文之前的查看当前会话的 SQL ,第二条 SQL 为查询
           处于等待状态的 SQL, 注意每条 SQL 为一行,接着测试。
      
--3 测试一: 测试 active_session
            本次实验的 PostgreSQL 版本为 9.3.0。

--3.1 session1
 [pg93@redhatB tf]$ psql -c "select pg_sleep(60);" &
[1] 7578
备注:后台开启 sessoin1。

--3.2 session2 
 [pg93@redhatB tf]$ psql francs postgres
psql (9.3.0)
Type "help" for help.

francs=# :active_session 
 pid  | datname  | usename  | client_addr |        query         |          query_start          | state  | waiting 
------+----------+----------+-------------+----------------------+-------------------------------+--------+---------
 7579 | postgres | postgres |             | select pg_sleep(60); | 2014-02-21 11:25:12.993091+08 | active | f
(1 row)
 备注:另开启 session2 用来监控,实验环境为虚拟机,非常空闲,所以之前开了个 pg_sleep(60)
             进程,调用方法很简单,执行上面红色部分即可,冒号用来解析变量,同时支持 TAB 补全
             功能,感觉非常帅。

--4 测试二: 测试 wait_session
--4.1 session1
 [pg93@redhatB tf]$ psql francs francs
psql (9.3.0)
Type "help" for help.

francs=> create table test_wait(id int4);
CREATE TABLE

francs=> begin;
BEGIN
francs=> drop table test_wait;
DROP TABLE
.. 注意事务未提交
备注: session1 创建一张测试表,并在事务中删除这张表,注意事务未结束。
 
--4.2 session2
      另开一会话,准备往表 test_wait 中写一条数据,但 insert 操作处于等待状态。
 
 [pg93@redhatB ~]$ psql francs francs
psql (9.3.0)
Type "help" for help.

francs=> insert into test_wait values (1);
.. 这里处于等待状态。
   
--4.3 session3
        再开一会话,用来监控。
 [pg93@redhatB ~]$ psql francs postgres
psql (9.3.0)
Type "help" for help.

francs=# :wait_session 
 pid  | datname | usename | client_addr |               query               |          query_start          | state  | waiting 
------+---------+---------+-------------+-----------------------------------+-------------------------------+--------+---------
 7692 | francs  | francs  |             | insert into test_wait values (1); | 2014-02-21 11:28:35.914326+08 | active | t
(1 row)
备注: waiting = t 表示此会话处于等待状态,测试成功。
  
--5 总结
        这里仅列出两个简单的监控 SQL ,有兴趣的朋友可以根据自己的工作环境定制 SQL ,提高
作效率。
  
--6 参考

  评论这张
 
阅读(557)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016