2. DBMS이야기/01. PostgreSQL

[PostgreSQL] PostgreSQL 통계 정보 보기

OSSW(Open Source System SoftWare 2014. 6. 25. 11:39

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 김득은