PostgreSQL 통계 정보 보기
· PostgreSQL 의 통계정보.
PosgtgreSQL의 통계 정보는 시스템 카탈로그의 pg_stat 로 시작하는 테이블에 저장됩니다.
현재 데이터베이스 리스트와 OID, 데이터베이스별 사용용량 등 쿼리를 통해 확인 할 수 있고, 뿐만 아니라 통계관련 함수도 많이 지원합니다.
postgres=# SELECT * FROM pg_stat
pg_stat_activity pg_statio_all_indexes pg_statio_sys_sequences pg_statio_user_tables pg_stat_sys_tables
pg_stat_all_indexes pg_statio_all_sequences pg_statio_sys_tables pg_statistic pg_stat_user_indexes
pg_stat_all_tables pg_statio_all_tables pg_statio_user_indexes pg_stats pg_stat_user_tables
pg_stat_database pg_statio_sys_indexes pg_statio_user_sequences pg_stat_sys_indexes
위 많은 통계 테이블 중 많이 사용되는 위주로 살펴 보겠습니다.
1.pg_stat_activity
· 이 테이블은 현재 PostgreSQL에서 실행되어지는 쿼리문들을 보여줍니다
(mysql 에서 show processlist 와 유사)
=# \d pg_stat_activity ;
View "pg_catalog.pg_stat_activity"
Column | Type | Modifiers
------------------+--------------------------+-----------
datid | oid |
datname | name |
pid | integer |
usesysid | oid |
usename | name |
application_name | text |
client_addr | inet |
client_hostname | text |
client_port | integer |
backend_start | timestamp with time zone |
xact_start | timestamp with time zone |
query_start | timestamp with time zone |
state_change | timestamp with time zone |
waiting | boolean |
state | text |
query | text |
· 어느 유저가 어디서 접속해서 어느 데이터베이스에 무슨 쿼리를 쓰고 있는지 파악
=# select datname, usename, pid, query from pg_stat_activity ;
· 현재 데이터베이스에 접속한 사람 수.
=# select count(client_port) from pg_stat_activity ;
한 쿼리 당 클라이언트 포트를 할당하므로 접속자수 라 할 수 있다.
(쿼리 수행하였는데 느릴 경우는 한번 최대 접속자수 (max_connections) 설정값 확인 필요
2.pg_stat_database
· 데이터베이스의 상태 통계 정보를 갖고 있습니다.
=# \d pg_stat_database
View "pg_catalog.pg_stat_database"
Column | Type | Modifiers
---------------+---------+-----------
datid | oid | 데이터베이스 OID
datname | name | 데이터베이스 이름
numbackends | integer | 활성화된 서버프로세스 개수
xact_commit | bigint | 데이터베이스에서 커밋된 트랜잭션 개수
xact_rollback | bigint | 데이터베이스에서 롤백된 트랜잭션 개수
blks_read | bigint | 읽힌 총 디스크 블록 수
blks_hit | bigint | 총 버퍼 히트 수
tup_returned | bigint | 반환된 로우(row) 개수
tup_fetched | bigint | 가져간 로우(row) 개수
tup_inserted | bigint | Insert 되어진 로우 개수
tup_updated | bigint | Update 되어진 로우 개수
tup_deleted | bigint | Delete 도어진 로우 개수
· 어느 데이터 베이스가 많이 사용되어지는지 파악
=# select datname, xact_commit, xact_rollback, tup_inserted, tup_updated, tup_deleted from pg_stat_database order by tup_inserted desc;
3.pg_stat_all_tables
· 현재 접속한 데이터베이스의 각 테이블별 통계를 보여줍니다.
View "pg_catalog.pg_stat_all_tables"
Column | Type | Modifiers
---------------+--------+-----------
relid | oid | 테이블의 OID
schemaname | name | 스키마 이름
relname | name | 테이블 이름
seq_scan | bigint | number of sequential scans initiated
seq_tup_read | bigint | number of live rows fetched by sequential scans
idx_scan | bigint | number of index scans initiated
idx_tup_fetch | bigint | number of live rows fetched by index scans
n_tup_ins | bigint | Insert 개수
n_tup_upd | bigint | Update 개수
n_tup_del | bigint | Delete 개수
· 데이터 베이스의 Insert, Update, Delete 개수를 파악
=#SELECT SUM(n_tup_ins), SUM(n_tup_upd), SUM(n_tup_del) FROM pg_stat_all_tables;
4.pg_database_size('name')
· 데이터 베이스의 사이즈를 파악(byte단위)
=# select pg_database_size('tobe');
pg_database_size
------------------
4940973784
(1 row)
=# SELECT pg_size_pretty(pg_database_size('tobe')) AS size;
size
---------
4712 MB
(1 row)
· pg_database_size 는 시스템 테이블 크기도 포함된 크기로, 실제 순 데이터베이스 크기를 알기 위해서는 다음과 같이 수행
=# select pg_size_pretty(cast (sum(pg_total_relation_size(tablename)) as bigint)) as size from pg_tables where schemaname in (current_database());
5.pg_tablespace_size('name')
· 테이블 스페이스의 사이즈 파악
=# select * from pg_tablespace_size('tbs_genesis') ;
pg_tablespace_size
--------------------
2092081152
(1 row)
Posted by 김득은
'2. DBMS이야기 > 01. PostgreSQL' 카테고리의 다른 글
PPAS Drita(성능 분석 툴) 설정 방법 (0) | 2014.06.27 |
---|---|
[PostgreSQL] PostgreSQL 에서의 Transaction 종류1 (0) | 2014.06.27 |
PostgreSQL 백업 종류 (0) | 2014.06.25 |
PostgreSQL Privilege Part.1 (0) | 2014.06.15 |
SQL Server 2012 VS PostgreSQL 9 (0) | 2014.06.13 |