前期对postgresql了解甚少,几乎一无所知,直到在项目上遇到了一个问题。
首先,客户反应管理界面有时快有时慢,用着用着就慢了。
然后,经过反复测试,发现首次登陆的时候访问页面很慢,过一会会很快,再过一会,可能又变慢了。慢的时候,top看到cpu wait特别高,很多Postgres进程在查询。
但由于对postgresql不熟,所以不知道自怎么去监测到是哪些查询慢,反复找资料,想找到精确监控postgresl数据库的工具,能显示出所有的查询和消耗的时间,但一时也没有找到,最后看到了Postgres的官方手册,这手册非常适合postgres初学者,看了之后基本上对postgres有些了解,也可以使用一些监控手段。
首先,因为客户环境登陆时反应慢,那么我们就在登陆的时候通过不断的查询pg_stat_activity表,这个表会显示最近对数据库的查询记录(postgres 9.2版本), 奇迹出现了,我们很快看到当用户登陆时,会一直在查询事件表,手工查询测下速度,发现非常慢,里面有700万条数据,而且肯定是零碎的,在磁盘中的位置应该不是连续的,这样导致了登陆时查询日志消耗了大量的IO。
就这样,不用利用精确的工具,我们通过postgres自带的收集器,也能对一些问题进行定位,不至于束手无策。里面还有很多好的工具,值得使用postgresql的人员读一读。
参考资料: postgres 中文手册