在Oracle下有一个查看分析数据库的工具叫statspack,在PostgreSQL下也有这样的一个工具。下面将介绍如何使用这个工具。
在网站上下载:,在这个页面中可以看到下载链接,把pgStatspack下载下来。我下载的是pgstatspack_version_2.2.tar.gz,把这个包解压到一个目录中,
然后再运行psql -f pg_stat_statements.sql就完成了pg_stat_statements安装,这时还需要把pg_stat_statements加到数据库的postgresql.conf文件中的shared_preload_libraries参数中:
osdba@osdba-laptop:~/pgstatspack/bin$ ./snapshot.sh
~/pgstatspack/bin ~/pgstatspack/bin
Results for database osdba
pgstatspack_snap
------------------
5
(1 row)
osdba@osdba-laptop:~/pgstatspack/bin$ ./snapshot.sh
~/pgstatspack/bin ~/pgstatspack/bin
Results for database osdba
pgstatspack_snap
------------------
6
(1 row)
osdba@osdba-laptop:~/pgstatspack/bin$ ./snapshot.sh
~/pgstatspack/bin ~/pgstatspack/bin
Results for database osdba
pgstatspack_snap
------------------
7
(1 row)
~/pgstatspack/bin
osdba@osdba-laptop:~/pgstatspack/bin$ ./pgstatspack_report.sh
~/pgstatspack/bin ~/pgstatspack/bin
Please specify a username:
osdba
List of available databases:
1 . osdba
Please select a number from the above list [ 1 - 1 ]
1
snapid | ts | description
--------+----------------------------+---------------------
7 | 2010-09-30 16:50:16.732587 | cron based snapshot
6 | 2010-09-30 16:48:04.497724 |
5 | 2010-09-30 16:47:22.715314 |
(3 rows)
Enter start snapshot id : 5
Enter stop snapshot id : 6
No filename defined using default /tmp/pgstatreport_5_6.txt
###########################################################################################################
PGStatspack version 0.3 by frits.hoogland@interaccess.nl
###########################################################################################################
Snapshot information
Begin snapshot :
snapid | ts | description
--------+----------------------------+-------------
5 | 2010-09-30 16:47:22.715314 |
(1 row)
End snapshot :
snapid | ts | description
--------+----------------------------+-------------
6 | 2010-09-30 16:48:04.497724 |
(1 row)
Seconds in snapshot: 41.78241
Database version
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 9.0.0 on x86_64-unknown-linux-gnu, compiled by GCC gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3, 64-bit
(1 row)
Database information
current_database | dbsize
------------------+---------
osdba | 5865 kB
(1 row)
Database statistics
database | tps | hitrate | lio_ps | pio_ps | rollbk_ps
-----------+------+---------+--------+--------+-----------
osdba | 0.36 | 94.00 | 80.42 | 4.33 | 0.00
postgres | 0.05 | 92.00 | 16.68 | 1.17 | 0.00
template1 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00
template0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00
(4 rows)
Top 20 tables ordered by table size changes
table | table_growth | index_growth
-------------------------------+--------------+--------------
public.pgstatspack_indexes | 16384 | 0
pg_catalog.pg_statistic | 8192 | 0
pg_catalog.pg_database | 0 | 0
pg_catalog.pg_db_role_setting | 0 | 0
pg_catalog.pg_description | 0 | 0
pg_catalog.pg_proc | 0 | 0
pg_catalog.pg_rewrite | 0 | 0
pg_catalog.pg_shdescription | 0 | 0
pg_catalog.pg_trigger | 0 | 0
public.pgstatspack_sequences | 0 | 0
public.pgstatspack_settings | 0 | 0
pg_catalog.pg_attrdef | 0 | 0
public.pgstatspack_statements | 0 | 0
pg_catalog.pg_constraint | 0 | 0
(14 rows)
Top 20 tables ordered by high table to index read ratio
table | system_read_pct | table_read_pct | index_read_pct
--------------------------+-----------------+----------------+----------------
pg_catalog.pg_proc | 58 | 0 | 100
pg_catalog.pg_statistic | 19 | 0 | 100
pg_catalog.pg_database | 11 | 60 | 40
pg_catalog.pg_rewrite | 6 | 0 | 100
pg_catalog.pg_constraint | 5 | 88 | 11
(5 rows)
Top 20 tables ordered by inserts
table | table_inserts
-------------------------------+---------------
public.pgstatspack_indexes | 112
public.pgstatspack_settings | 23
pg_catalog.pg_statistic | 8
public.pgstatspack_sequences | 1
pg_catalog.pg_attrdef | 0
pg_catalog.pg_constraint | 0
pg_catalog.pg_database | 0
pg_catalog.pg_db_role_setting | 0
pg_catalog.pg_description | 0
pg_catalog.pg_proc | 0
pg_catalog.pg_rewrite | 0
pg_catalog.pg_shdescription | 0
pg_catalog.pg_trigger | 0
public.pgstatspack_statements | 0
(14 rows)
Top 20 tables ordered by updates
table | table_updates
-------------------------------+---------------
pg_catalog.pg_attrdef | 0
pg_catalog.pg_constraint | 0
pg_catalog.pg_database | 0
pg_catalog.pg_db_role_setting | 0
pg_catalog.pg_description | 0
pg_catalog.pg_proc | 0
pg_catalog.pg_rewrite | 0
pg_catalog.pg_shdescription | 0
pg_catalog.pg_statistic | 0
pg_catalog.pg_trigger | 0
public.pgstatspack_indexes | 0
public.pgstatspack_sequences | 0
public.pgstatspack_settings | 0
public.pgstatspack_statements | 0
(14 rows)
Top 20 tables ordered by deletes
table | table_deletes
-------------------------------+---------------
pg_catalog.pg_attrdef | 0
pg_catalog.pg_constraint | 0
pg_catalog.pg_database | 0
pg_catalog.pg_db_role_setting | 0
pg_catalog.pg_description | 0
pg_catalog.pg_proc | 0
pg_catalog.pg_rewrite | 0
pg_catalog.pg_shdescription | 0
pg_catalog.pg_statistic | 0
pg_catalog.pg_trigger | 0
public.pgstatspack_indexes | 0
public.pgstatspack_sequences | 0
public.pgstatspack_settings | 0
public.pgstatspack_statements | 0
(14 rows)
Tables ordered by percentage of tuples scanned
table | rows_read_pct | tab_hitrate | idx_hitrate | tab_read | tab_hit | idx_read | idx_hit
--------------------------+---------------+-------------+-------------+----------+---------+----------+---------
pg_catalog.pg_proc | 58 | 75 | 89 | 23 | 72 | 18 | 154
pg_catalog.pg_statistic | 19 | 76 | 95 | 13 | 45 | 2 | 63
pg_catalog.pg_database | 11 | 91 | 76 | 0 | 11 | 2 | 10
pg_catalog.pg_rewrite | 6 | 33 | 72 | 7 | 4 | 2 | 8
pg_catalog.pg_constraint | 5 | 33 | 0 | 1 | 1 | 2 | 0
(5 rows)
Indexes ordered by scans
index | table | scans | tup_read | tup_fetch | idx_blks_read | idx_blks_hit
----------------------------------------------------+-------------------------------+-------+----------+-----------+---------------+--------------
pg_catalog.pg_class_oid_index | pg_catalog.pg_class | 342 | 342 | 342 | 0 | 343
pg_catalog.pg_cast_source_target_index | pg_catalog.pg_cast | 208 | 39 | 39 | 2 | 208
pg_catalog.pg_attribute_relid_attnum_index | pg_catalog.pg_attribute | 193 | 435 | 435 | 2 | 385
pg_catalog.pg_proc_oid_index | pg_catalog.pg_proc | 71 | 71 | 71 | 9 | 134
pg_catalog.pg_type_oid_index | pg_catalog.pg_type | 60 | 59 | 59 | 2 | 60
pg_catalog.pg_statistic_relid_att_inh_index | pg_catalog.pg_statistic | 55 | 34 | 34 | 2 | 63
pg_catalog.pg_class_relname_nsp_index | pg_catalog.pg_class | 44 | 26 | 26 | 5 | 84
pg_catalog.pg_amop_fam_strat_index | pg_catalog.pg_amop | 37 | 57 | 57 | 0 | 75
pg_catalog.pg_index_indexrelid_index | pg_catalog.pg_index | 35 | 35 | 35 | 0 | 36
pg_catalog.pg_amop_opr_fam_index | pg_catalog.pg_amop | 30 | 36 | 36 | 2 | 30
pg_catalog.pg_operator_oid_index | pg_catalog.pg_operator | 23 | 23 | 23 | 3 | 45
pg_catalog.pg_operator_oprname_l_r_n_index | pg_catalog.pg_operator | 19 | 97 | 97 | 5 | 34
pg_catalog.pg_index_indrelid_index | pg_catalog.pg_index | 17 | 27 | 27 | 2 | 17
pg_catalog.pg_amproc_fam_proc_index | pg_catalog.pg_amproc | 16 | 16 | 16 | 0 | 17
pg_catalog.pg_opclass_oid_index | pg_catalog.pg_opclass | 15 | 15 | 15 | 0 | 16
pg_catalog.pg_proc_proname_args_nsp_index | pg_catalog.pg_proc | 14 | 33 | 33 | 9 | 20
pg_catalog.pg_type_typname_nsp_index | pg_catalog.pg_type | 13 | 8 | 8 | 5 | 22
pg_catalog.pg_opclass_am_name_nsp_index | pg_catalog.pg_opclass | 11 | 440 | 440 | 2 | 11
pg_catalog.pg_rewrite_rel_rulename_index | pg_catalog.pg_rewrite | 9 | 11 | 11 | 2 | 8
pg_catalog.pg_namespace_nspname_index | pg_catalog.pg_namespace | 7 | 6 | 6 | 2 | 6
pg_catalog.pg_database_oid_index | pg_catalog.pg_database | 6 | 6 | 6 | 0 | 8
pg_catalog.pg_db_role_setting_databaseid_rol_index | pg_catalog.pg_db_role_setting | 6 | 0 | 0 | 0 | 6
pg_toast.pg_toast_2618_index | pg_toast.pg_toast_2618 | 4 | 13 | 13 | 2 | 3
pg_catalog.pg_database_datname_index | pg_catalog.pg_database | 2 | 2 | 2 | 2 | 2
pg_catalog.pg_aggregate_fnoid_index | pg_catalog.pg_aggregate | 2 | 2 | 2 | 2 | 1
pg_catalog.pg_tablespace_oid_index | pg_catalog.pg_tablespace | 2 | 2 | 2 | 2 | 1
pg_catalog.pg_namespace_oid_index | pg_catalog.pg_namespace | 1 | 1 | 1 | 2 | 0
pg_catalog.pg_depend_reference_index | pg_catalog.pg_depend | 1 | 1 | 1 | 3 | 0
pg_catalog.pg_authid_oid_index | pg_catalog.pg_authid | 1 | 1 | 1 | 2 | 0
pg_catalog.pg_language_oid_index | pg_catalog.pg_language | 1 | 1 | 1 | 2 | 0
pg_catalog.pg_constraint_oid_index | pg_catalog.pg_constraint | 1 | 1 | 1 | 2 | 0
pg_catalog.pg_inherits_parent_index | pg_catalog.pg_inherits | 1 | 0 | 0 | 1 | 0
pg_catalog.pg_inherits_relid_seqno_index | pg_catalog.pg_inherits | 1 | 0 | 0 | 1 | 0
public.pgstatspack_tables_pk | public.pgstatspack_tables | 0 | 0 | 0 | 2 | 13
public.pgstatspack_database_pk | public.pgstatspack_database | 0 | 0 | 0 | 2 | 3
public.pgstatspack_indexes_pk | public.pgstatspack_indexes | 0 | 0 | 0 | 7 | 128
public.t_pkey | public.t | 0 | 0 | 0 | 2 | 1
public.pgstatspack_sequences_pk | public.pgstatspack_sequences | 0 | 0 | 0 | 2 | 0
public.pgstatspack_settings_pk | public.pgstatspack_settings | 0 | 0 | 0 | 2 | 22
(39 rows)
Sequences ordered by blks_read
schema | name | blks_read | blks_hit
--------+---------------+-----------+----------
public | pgstatspackid | 1 | 0
(1 row)
Top 20 SQL statements ordered by total_time
calls | total_time | rows | query
-------+------------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 | 0.057520 | 1 | select pgstatspack_snap('');
1 | 0.014059 | 1 | insert into t values(100,'2222222222222');
1 | 0.008528 | 0 | SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhparent AND i.inhrelid = '16391' ORDER BY inhseqno
1 | 0.004416 | 1 | select count(*) from t;
1 | 0.003287 | 11 | SELECT n.nspname as "Schema", +
| | | c.relname as "Name", +
| | | CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as "Type", +
| | | pg_catalog.pg_get_userbyid(c.relowner) as "Owner" +
| | | FROM pg_catalog.pg_class c +
| | | LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace +
| | | WHERE c.relkind IN ('r','v','S','') +
| | | AND n.nspname <> 'pg_catalog' +
| | | AND n.nspname <> 'information_schema' +
| | | AND n.nspname !~ '^pg_toast' +
| | | AND pg_catalog.pg_table_is_visible(c.oid) +
| | | ORDER BY 1,2;
1 | 0.001429 | 0 | SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhrelid AND i.inhparent = '16391' ORDER BY c.oid::pg_catalog.regclass::pg_catalog.text;
1 | 0.000522 | 1 | SELECT c2.relname, i.indisprimary, i.indisunique, i.indisclustered, i.indisvalid, pg_catalog.pg_get_indexdef(i.indexrelid, 0, true), +
| | | pg_catalog.pg_get_constraintdef(con.oid, true), contype, condeferrable, condeferred, c2.reltablespace +
| | | FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_index i +
| | | LEFT JOIN pg_catalog.pg_constraint con ON (conrelid = i.indrelid AND conindid = i.indexrelid AND contype IN ('p','u','x')) +
| | | WHERE c.oid = '16391' AND c.oid = i.indrelid AND i.indexrelid = c2.oid +
| | | ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname
1 | 0.000111 | 1 | SELECT c.oid, +
| | | n.nspname, +
| | | c.relname +
| | | FROM pg_catalog.pg_class c +
| | | LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace +
| | | WHERE c.relname ~ '^(t)$' +
| | | AND pg_catalog.pg_table_is_visible(c.oid) +
| | | ORDER BY 2, 3;
1 | 0.000056 | 2 | SELECT a.attname, +
| | | pg_catalog.format_type(a.atttypid, a.atttypmod), +
| | | (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128) +
| | | FROM pg_catalog.pg_attrdef d +
| | | WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef), +
| | | a.attnotnull, a.attnum +
| | | FROM pg_catalog.pg_attribute a +
| | | WHERE a.attrelid = '16391' AND a.attnum > 0 AND NOT a.attisdropped +
| | | ORDER BY a.attnum
1 | 0.000052 | 1 | insert into t values(200,'2222222222222');
1 | 0.000022 | 1 | SELECT c.relchecks, c.relkind, c.relhasindex, c.relhasrules, c.relhastriggers, c.relhasoids, '', c.reltablespace, CASE WHEN c.reloftype = 0 THEN '' ELSE c.reloftype::pg_catalog.regtype::pg_catalog.text END+
| | | FROM pg_catalog.pg_class c +
| | | LEFT JOIN pg_catalog.pg_class tc ON (c.reltoastrelid = tc.oid) +
| | | WHERE c.oid = '16391' +
| | |
(11 rows)
Parameters
name | start_setting | stop_setting | source
----------------------------+-----------------------------+-----------------------------+----------------------
application_name | psql | psql | client
config_file | /opt/pgdata/postgresql.conf | /opt/pgdata/postgresql.conf | override
data_directory | /opt/pgdata | /opt/pgdata | override
DateStyle | ISO, YMD | ISO, YMD | configuration file
default_text_search_config | pg_catalog.simple | pg_catalog.simple | configuration file
hba_file | /opt/pgdata/pg_hba.conf | /opt/pgdata/pg_hba.conf | override
ident_file | /opt/pgdata/pg_ident.conf | /opt/pgdata/pg_ident.conf | override
lc_collate | zh_CN.UTF-8 | zh_CN.UTF-8 | override
lc_ctype | zh_CN.UTF-8 | zh_CN.UTF-8 | override
lc_messages | zh_CN.UTF-8 | zh_CN.UTF-8 | configuration file
lc_monetary | zh_CN.UTF-8 | zh_CN.UTF-8 | configuration file
lc_numeric | zh_CN.UTF-8 | zh_CN.UTF-8 | configuration file
lc_time | zh_CN.UTF-8 | zh_CN.UTF-8 | configuration file
log_timezone | PRC | PRC | command line
max_connections | 100 | 100 | configuration file
max_stack_depth | 2048 | 2048 | environment variable
server_encoding | UTF8 | UTF8 | override
shared_buffers | 4096 | 4096 | configuration file
shared_preload_libraries | pg_stat_statements | pg_stat_statements | configuration file
TimeZone | PRC | PRC | command line
timezone_abbreviations | Default | Default | command line
transaction_isolation | read committed | read committed | override
transaction_read_only | off | off | override
(23 rows)