文档章节

实时查看PostgreSQL的QTPS

kenyon_君羊
 kenyon_君羊
发布于 2017/02/20 12:52
字数 1029
阅读 330
收藏 2

有些时候想统计一下PostgreSQL当前的查询数或者事务数,就直接用内置的视图去统计,但可视化或可读性不是很高,以前看到的pgcenter这个工具挺好的,但是没有记录历史的QTPS,只有实时刷的最新值,同事问起,周末就写了个小工具,用来查询数据库当前的QTPS。

一、脚本代码

#!/usr/bin/env python
#coding=utf-8

import time
import sys
import psycopg2 as pgdb 

#传入参数      
i_host = sys.argv[1]
i_port = sys.argv[2]
i_pwd  = sys.argv[3]

conn   = pgdb.connect(host=i_host,database='postgres',user='postgres',port=i_port,password=i_pwd)
cursor = conn.cursor()
sql    = "select sum(tup_inserted) ,sum(tup_updated) ,sum(tup_deleted) ,sum(xact_commit) ,sum(xact_rollback) from pg_stat_database where datname not in('postgres','template1','template0');"

while True:  
 try: 
   cursor.execute(sql)
   conn.commit()
   results = cursor.fetchall()
   for row in results:   
      p_ins = row[0]
      p_upd = row[1]
      p_del = row[2]
      p_com = row[3]
      p_rol = row[4]
   time.sleep(1)

   cursor.execute(sql)
   conn.commit()
   results2 = cursor.fetchall()
   for row in results2:
      p_ins2 = row[0]
      p_upd2 = row[1]
      p_del2 = row[2]
      p_com2 = row[3]
      p_rol2 = row[4]

   ins_diff  = int(p_ins2) - int(p_ins)
   upd_diff  = int(p_upd2) - int(p_upd)
   del_diff  = int(p_del2) - int(p_del)
   iud_diff  = int(ins_diff) + int(upd_diff) + int(del_diff)
   com_diff  = int(p_com2) - int(p_com)
   rol_diff  = int(p_rol2) - int(p_rol)
   tps_diff = int(com_diff) + int(rol_diff) 
   print "%s  ins=%-8s, upd=%-8s, del=%-8s, com=%-8s ,rol=%-8s ,iud=%-8s ,TPS=%-8s" %(time.strftime("%Y-%m-%d %H:%M:%S"),ins_diff,upd_diff,del_diff,com_diff,rol_diff,iud_diff,tps_diff)
   
 except KeyboardInterrupt :
   print "exit .."
   sys.exit()

conn.close()

二、实际效果

压测的脚本

\set id random(1,2000000)
begin;
insert into tbl_kenyon(id,ctime) values(:id,now());
SELECT id FROM tbl_kenyon WHERE id = :id;
update tbl_kenyon set ctime = now()  where id = :id;
delete from tbl_kenyon where id = :id;
end;

实际的效果

[postgres@kenyon ~]$ python pgsql_qtps.py localhost 1949 123456
2017-02-20 12:41:37  ins=0       , upd=0       , del=0       , com=0        ,rol=0        ,iud=0        ,TPS=0       
2017-02-20 12:41:38  ins=0       , upd=0       , del=0       , com=0        ,rol=0        ,iud=0        ,TPS=0       
2017-02-20 12:41:39  ins=0       , upd=0       , del=0       , com=0        ,rol=0        ,iud=0        ,TPS=0       
2017-02-20 12:41:40  ins=0       , upd=0       , del=0       , com=15       ,rol=0        ,iud=0        ,TPS=15      
2017-02-20 12:41:41  ins=5966    , upd=12318   , del=12318   , com=6127     ,rol=0        ,iud=30602    ,TPS=6127    
2017-02-20 12:41:42  ins=5038    , upd=10301   , del=10301   , com=5038     ,rol=0        ,iud=25640    ,TPS=5038    
2017-02-20 12:41:43  ins=4457    , upd=9191    , del=9191    , com=4457     ,rol=0        ,iud=22839    ,TPS=4457    
2017-02-20 12:41:44  ins=1368    , upd=2829    , del=2829    , com=1368     ,rol=0        ,iud=7026     ,TPS=1368    
2017-02-20 12:41:45  ins=1694    , upd=3426    , del=3426    , com=1694     ,rol=0        ,iud=8546     ,TPS=1694    
2017-02-20 12:41:46  ins=5919    , upd=12158   , del=12158   , com=5919     ,rol=0        ,iud=30235    ,TPS=5919    
2017-02-20 12:41:47  ins=3866    , upd=7932    , del=7932    , com=3866     ,rol=0        ,iud=19730    ,TPS=3866    
2017-02-20 12:41:48  ins=5286    , upd=10712   , del=10712   , com=5286     ,rol=0        ,iud=26710    ,TPS=5286    
2017-02-20 12:41:49  ins=3133    , upd=6357    , del=6357    , com=3133     ,rol=0        ,iud=15847    ,TPS=3133    
2017-02-20 12:41:50  ins=1355    , upd=2790    , del=2790    , com=1355     ,rol=0        ,iud=6935     ,TPS=1355    
2017-02-20 12:41:51  ins=1257    , upd=2581    , del=2581    , com=1257     ,rol=0        ,iud=6419     ,TPS=1257    
2017-02-20 12:41:52  ins=4881    , upd=9987    , del=9987    , com=4881     ,rol=0        ,iud=24855    ,TPS=4881    
2017-02-20 12:41:53  ins=4432    , upd=8898    , del=8898    , com=4432     ,rol=0        ,iud=22228    ,TPS=4432    
2017-02-20 12:41:54  ins=5312    , upd=10529   , del=10529   , com=5312     ,rol=0        ,iud=25230    ,TPS=5042    
2017-02-20 12:42:04  ins=5699    , upd=11351   , del=11351   , com=5699     ,rol=0        ,iud=28401    ,TPS=5699    
2017-02-20 12:42:05  ins=6299    , upd=12546   , del=12546   , com=6299     ,rol=0        ,iud=31391    ,TPS=6299    
2017-02-20 12:42:06  ins=3562    , upd=7156    , del=7156    , com=3562     ,rol=0        ,iud=17874    ,TPS=3562    
2017-02-20 12:42:08  ins=2021    , upd=4014    , del=4014    , com=2021     ,rol=0        ,iud=10049    ,TPS=2021    
2017-02-20 12:42:09  ins=4442    , upd=8742    , del=8742    , com=4442     ,rol=0        ,iud=21926    ,TPS=4442    
2017-02-20 12:42:10  ins=2614    , upd=5222    , del=5222    , com=2614     ,rol=0        ,iud=13058    ,TPS=2614    
2017-02-20 12:42:11  ins=2235    , upd=4487    , del=4487    , com=2235     ,rol=0        ,iud=11209    ,TPS=2235    
2017-02-20 12:42:12  ins=0       , upd=0       , del=0       , com=0        ,rol=0        ,iud=0        ,TPS=0       
2017-02-20 12:42:13  ins=0       , upd=0       , del=0       , com=0        ,rol=0        ,iud=0        ,TPS=0       
2017-02-20 12:42:14  ins=0       , upd=0       , del=0       , com=0        ,rol=0        ,iud=0        ,TPS=0 

其他:
1.PG和Mysq不一样的地方是不能通过show状态来获取com_select诸如查询变量值,而查询在pg中是作为一项事务提交的
2.脚本统计的是单台服务器上所有的实例,也可以通过改SQL来得到某个库的实时QTPS值
3.最新的9.6版本pgbench已经不支持常用的setrandom参数,可以调整为set id random

© 著作权归作者所有

共有 人打赏支持
kenyon_君羊
粉丝 499
博文 170
码字总数 121714
作品 0
杭州
其他
私信 提问
加载中

评论(2)

kenyon_君羊
kenyon_君羊

引用来自“宏哥”的评论

为什么不用我大PHP

差评
拍黄片太高大上了,杀鸡焉用牛刀?
宏哥
宏哥
为什么不用我大PHP

差评
PostgreSQL的执行计划分析

近期有人提出想查看Postgresql的执行计划,下面分析下PG执行计划中的cost等相关值是怎么计算出来的: PG的版本是9.1.2 1.终端工具PGADMIN,对执行的语句按F7即可,然后看数据输出和解释 2.命令...

kenyon_君羊
2012/08/31
0
3
德哥PG系列课程直播(第6讲):用户画像系统实践

知识点 标签聚合计算,varbit插件, 异步消费, BIT位计算, dblink异步并行 学习资料 1、阿里云RDS for PostgreSQL varbitx插件与实时画像应用场景介绍 背景:PostgreSQL 内置的varbit, bit类型...

小白dora
2018/12/11
0
0
数据库案例集锦 - 开发者的《如来神掌》

标签 PostgreSQL , PG DBA cookbook , PG Oracle兼容性 , PG 架构师 cookbook , PG 开发者 cookbook , PG 应用案例 背景 「剑魔独孤求败,纵横江湖三十馀载,杀尽仇寇,败尽英雄,天下更无抗...

德哥
2017/06/09
0
0
PostgreSQL 类微博FEED系统 - 设计与性能指标

标签 PostgreSQL , feed , 微博 , 推送 , 分区 , 分片 , UDF , 挖掘 , 文本挖掘 背景 类微博系统,最频繁用到的功能: 之前写过一篇《三体高可用PCC大赛 - facebook微博 like场景 - 数据库设...

德哥
2018/04/18
0
0
PostgreSQL 生成空间热力图

标签 PostgreSQL , 热力图 , 空间切割 , 并行计算 , parallel safe 背景 结合空间数据,计算基于地理位置信息的热力图,在空间数据可视化场景中是一个非常常见的需求。 结合流计算,可以实现...

德哥
2018/10/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

发布xxl-job executor dotnet core 执行器的实现

DotXxlJob [github][https://github.com/xuanye/DotXxlJob] xxl-job的dotnet core 执行器实现,支持XXL-JOB 2.0+ 1 XXL-JOB概述 [XXL-JOB][1]是一个轻量级分布式任务调度平台,其核心设计目标...

假正经哥哥
今天
2
0
mysql 查询当天、本周,本月,上一个月的数据

今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 近7天 SELECT * FROM 表名 wher......

BraveLN
今天
3
0
Spring 事务初始化源码分析

相关文章 Spring 事务使用详解 Spring AOP 创建代理的源码解析 Spring AOP 注解方式源码解析 Spring AOP 功能使用详解 Spring 的 getBean 方法源码解析 Spring bean 创建过程源码解析 Spring...

TSMYK
今天
1
0
Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构

前面几节中,都是通过java层调用到jni中,jni向下到c++层并未介绍 看下Java层一个方法在c++层 MediaPlayer后续过程 frameworks/av/media/libmedia/MediaPlayer.cpp 找一个我们之前熟悉的setDa...

天王盖地虎626
今天
3
0
【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)

1、前言   框框博客在线报时:2018-11-07 19:31:06   当前MySQL最新版本:8.0.13 (听说比5.7快2倍)   官方之前表示:MySQL 8.0 正式版 8.0.11 已发布,MySQL 8 要比 MySQL 5.7 快 2 ...

Code辉
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部