postsql数据库的性能检测方法

 

http://www.kuqin.com/postgreSQL8.1_doc/monitoring-stats.html 参考了这里的postsql手册页。

 

 

 

收集一些sql语句,用来检测db的性能:

 

select * from pg_stat_activity;  可以看到当前各个db的查询情况,每个进程一行。

 

 

        视图 "pg_catalog.pg_stat_activity"

    字段名     |           类型           | 修饰词 

---------------+--------------------------+--------

 datid         | oid                      | 

 datname       | name                     | 

 procpid       | integer                  | 

 usesysid      | oid                      | 

 usename       | name                     | 

 current_query | text                     | 

 waiting       | boolean                  | 

 query_start   | timestamp with time zone | 

 backend_start | timestamp with time zone | 

 client_addr   | inet                     | 

 client_port   | integer                  | 

 

 

其中,current_query是当前这个进程执行的sql语句。可以看到sql语句启动的时间query_start ,以及进程启动的时间backend_start。

 

 

select * from pg_stat_database where datname = 'you_want_db_name';

 

 

视图 "pg_catalog.pg_stat_database"

    字段名     |  类型   | 修饰词 

---------------+---------+--------

 datid         | oid     | 

 datname       | name    | 

 numbackends   | integer |                                       <------------ 当前连接的活跃进程数目

 xact_commit   | bigint  |                                           <------------ 提交的事务总数

 xact_rollback | bigint  | <------------ 回滚总数

 blks_read     | bigint  |                                             <------------ 读取的磁盘块的总数

 blks_hit      | bigint          <------------ 缓冲区命中的总数(也就是所需要的块已经在缓冲区中找到, 从而避免了读取块的动作)

 

 

 

 

select  * from pg_stat_user_tables ;  

select  * from pg_stat_all_tables ;

select  * from pg_stat_sys_tables ;

以上3条语句分别查看用户、所有、系统表的信息:

 

 

      视图 "pg_catalog.pg_stat_user_tables"

      字段名      |           类型           | 修饰词 

------------------+--------------------------+--------

 relid            | oid                      | 

 schemaname       | name                     | 

 relname          | name                     | 

 seq_scan         | bigint                   |               《----- 发起的顺序查找的总数

 seq_tup_read     | bigint                   |            《----- 顺序扫描抓取的有生数据行的数目

 idx_scan         | bigint                   |                  《----  发起的索引查找总数

 idx_tup_fetch    | bigint                   | 《---- 索引扫描抓取的有生数据行的数目

 n_tup_ins        | bigint                   | 《----- 插入的条数

 n_tup_upd        | bigint                   | 《--- 更新的条数

 n_tup_del        | bigint                   | 《----- 删除的条数

 last_vacuum      | timestamp with time zone | 

 last_autovacuum  | timestamp with time zone | 

 last_analyze     | timestamp with time zone | 

 last_autoanalyze | timestamp with time zone | 

 

 

 

select * from pg_stat_user_indexes ;  查看索引使用情况(同样有all、sys)

 

 

视图 "pg_catalog.pg_stat_user_indexes"

    字段名     |  类型  | 修饰词 

---------------+--------+--------

 relid         | oid    | 

 indexrelid    | oid    | 

 schemaname    | name   | 

 relname       | name   | 

 indexrelname  | name   | 

 idx_scan      | bigint | 

 idx_tup_read  | bigint | 

 idx_tup_fetch | bigint | 

 

 

 

此外还有以下表,用法基本同上: pg_statio_all_tables、 pg_statio_all_indexes、 pg_statio_all_sequences。

 

 

-----------------------------------

 

2009-09-29 补充

 

SELECT oid,datname from pg_database可以查看到每个库的使用情况,比如它的oid。

而进入到pg的文件存储目录,可以看到每个库对应的目录,其名称就是上面的oid。

 

查看具体某个表的大小:

 

select pg_relation_size('table_name'); // 不过如果表比较大的话,可能计算耗时较久。

 

还有另外一种方法查看某个表的大小:

 

SELECT * from pg_class where relname='zhibo_data'; 

找到对应的id,然后按照上面查看数据库大小的方法,去查看对应的文件大小。

relfilenode oid   这个关系在磁盘上的文件的名字,如果没有则为 0

 

 

清理磁盘空间,因为删除掉的数据,其空间并不一定释放了。使用下面这个命令,可以清理,其FULL参数是可选的。

VACUUM FULL

 

 

------ -----------------引文: http://www.pgsqldb.org/mwiki/index.php/查看数据库表的大小

pg_relation_size('关系名') - 查看关系大小

   jianingy=# select pg_relation_size('contact');

    pg_relation_size 

   ------------------

              425984

   (1 row)

pg_size_pretty - human readable的大小输入

   jianingy=# select pg_size_pretty(pg_relation_size('contact'));

    pg_size_pretty 

   ----------------

    416 kB

   (1 row)

查看所有public schema里面索引大小,大到小的顺序排列

  select indexrelname, pg_size_pretty(pg_relation_size(indexrelname))

    from pg_stat_user_indexes where 

         schemaname = 'public' order by pg_relation_size(indexrelname) desc;

查看所有public schema里面表的大小,从大到小顺序排里

  select relname, pg_size_pretty(pg_relation_size(relname))

    from pg_stat_user_tables where

         schemaname = 'public' order by pg_relation_size(relname) desc;

有些表有toast对象,比如那些有很长的文本字段的表,这个时候,除了主表之外,还有toast表,toast表的命名原则是:

  pg_toast.pg_toast_{主表的文件编号}

也就是说,每个存在长字段的表,都拥有一个在 pg_toast 模式内的toast表,命名方式如上,这个时候,我们需要找到主表的文件编号,这个很容易,只要查询一下系统表 pg_class 即可:

 select relfilenode from pg_class where relname='你的表名字';

然后,再用 pg_relation_size () 函数查询:

 select pg_size_pretty(pg_relation_size('pg_toast.pg_toast_{主表的文件编号}');

即可。

有个工具Oid2name可以用于在命令行上查看这些信息。

 

----------------------------------------------------------------------------------

你可能感兴趣的:(postsql数据库的性能检测方法)