MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

由於考慮採用 EnterpriseDB 或是直接用 PostgreSQL 的人,通常需要一些入手的資料。這邊紀錄便提供相關快速上手的簡單筆記 ~ 這篇筆記以 資料庫安裝完畢後的快速使用 為目標,基本紀錄登入使用的範例:

2016年7月21日 星期四

EDB 的 Statspack 報表 - Dynamic Runtime Instrumentation Tools Architecture

PostgreSQL 原生的資料庫監控功能,大多散布在各式系統資料表裡面;此外,有些內建系統表還沒有設置,有時也需要額外安裝,像是 pg_stat_statements;更甚者,可能還需要確認發行版有沒有支援(Dynamic Tracing)。截至 9.5 版,還沒有原生於 PostgreSQL 簡單易用的整合的效能監控工具。

對於資深的 Oracle 使用者,常常會提到 Oracle 有很多效能監控工具,像是常會提到 Oracle Statspack / Oracle AWR,並尋找在 PostgreSQL 裡面相似的工具。

EnterpriseDB 在其企業版資料庫中提供一個叫 Dynamic Runtime Instrumentation Tools Architecture(EDB DRITA)的功能,可以用來衡量資料庫運行效能的紀錄。DRITA 其實是將現有的 PostgreSQL 資料庫效能監控工具(例如  pg_stat_statements,或是 pg_buffercache),並以一個 Oracle 資料庫的用戶所習慣的統合性報表格式呈現。

DRITA 功能不用像 Oracle Statspack/AWR 一樣,先設置專屬空間存放,而是直接存放在同一個 Postgres Instance 裡。


DRITA 的使用方法有兩種:
(1) 在一個 Session 當中,執行兩次系統資訊收集(起、迄 DRITA 快照),然後用這兩次快照,產生快照間資料庫活動的報告(使用上,與 Oracle Statspack 相仿)

(2) 在一段期間中,產生些許系統資訊快照,然後依照需要,選取數個相連續的快照,彙整出資料庫活動的報告

在此以 EDB Postgres Advanced Server 9.5 進行演練:

首先,要啟用 DRITA 功能,有兩種方式。
  • 啟用 postgresql.conf 裡面的參數 timed_statistics(on),並重新載入
  • 這個參數也可以只在一個 Session 當中啟用,如下列指令:
edb=# SET timed_statistics TO true;
SET

用法:
(1) 在一個 Session 中執行:
  • 手動執行一次進行 DRITA 快照(第一次)
edb=# SELECT * FROM edbsnap();
       edbsnap      
----------------------
 Statement processed.
(1 row)

  • 一些資料庫活動:如,執行一個指令(計算階乘)
edb=# select 10000!;

  • 等到所需要觀察、了解的資料庫活動告一段落,再執行一次 DRITA 快照
edb=# SELECT edbsnap();
       edbsnap      
----------------------
 Statement processed.
(1 row)

  • 先來觀察一下,目前累積的快照列表
edb=# SELECT get_snaps();
         get_snaps        
-----------------------------
1 20-JUL-16 07:58:24.869467
2 20-JUL-16 08:10:30.570358
(2 rows)

上面便已經有足夠快照,來列出 Wait Event 報告了。

這個部份,有三種報告模式:
  • sys_rpt(起始快照ID, 末快照ID, 列舉筆數) 用來列舉 wait events
  • sessid_rpt(起始快照ID, 末快照ID, pid) 用來列舉某個 Process ID 活動時造成的 wait events
  • sesshist_rpt(快照ID,pid) 用來列舉指定快照中,紀錄到的某 Process ID 活動
以下列出執行範例,指定當前 Session 的活動:
edb=# SELECT sys_rpt(1,2,5);
                                  sys_rpt                                 
-----------------------------------------------------------------------------
 WAIT NAME                                COUNT      WAIT TIME       % WAIT
---------------------------------------------------------------------------
 db file read                             70         0.078344        61.42
 query plan                               14         0.048646        38.14
 db file extend                           52         0.000559        0.44
(5 rows)

edb=# SELECT sessid_rpt(1,2,pid) FROM pg_stat_activity WHERE pid = pg_backend_pid();
                                            sessid_rpt                                            
-----------------------------------------------------------------------------------------------------
 ID    USER       WAIT NAME                      COUNT TIME(ms)     % WAIT SES % WAIT ALL
---------------------------------------------------------------------------------------------------
 1919 enterprise db file read                   50    0.034929     70.32      70.32
 1919 enterprise query plan                     14    0.014214     28.62      28.62
 1919 enterprise db file extend                 50    0.000528     1.06       1.06
(5 rows)

edb=# SELECT sesshist_rpt(1,pid) FROM pg_stat_activity WHERE pid = pg_backend_pid();
                                                 sesshist_rpt                                                
-----------------------------------------------------------------------------------------------------------------
 ID    USER      SEQ   WAIT NAME                ELAPSED(ms)  File   Name                 # of Blk   Sum of Blks
---------------------------------------------------------------------------------------------------
 1919 enterprise 1     query plan               9            0      N/A                  0          0         
 1919 enterprise 1     query plan               9            0      edb_password_history 0          0         
 1919 enterprise 1     query plan               9            0      edb_password_history 0          0         
 1919 enterprise 1     query plan               9            0      edb_password_history 0          0         
 1919 enterprise 1     query plan               9            0      edb_profile          0          0         
(... 以下略)

註:
除了上述函數觀看 Wait event 之外,EnterpriseDB 裡有提供對應 Oracle 資料庫中 V$SYSTEM_EVENTV$SESSION_WAIT 以及 V$SESSION_WAIT_HISTORY 的 View,分別稱作 edb$system_waits、edb$session_waits 及 edb$session_wait_history,用來觀察當前 Wait event 狀況。相關資訊參考 8.12 Catalog Views 以及 8.11 Event Descriptions


(2) 看總結報告
以下函數,可以指定中長期累積 DRITA 快照報告
edb=# SELECT edbreport(1, 4);\g /path/to/output/file

在 psql 界面下,上面會把報告內容輸出到 /path/to/output/file 所指定檔案位置。

以下列舉出 edbreport(起始快照ID, 末快照ID) 報告內容類型:
Size of the current database
     Tablespace: list, size and owner

Schema: list, size and owner
Top 10 Relations by pages
Top 10 Indexes by pages
Top 10 Relations by DML
DATA from pg_stat_database
DATA from pg_buffercache not included because pg_buffercache is not installed
DATA from pg_stat_all_tables ordered by seq scan
DATA from pg_stat_all_tables ordered by rel tup read
DATA from pg_statio_all_tables
DATA from pg_stat_all_indexes
DATA from pg_statio_all_indexes
System Wait Information
Database Parameters from postgresql.conf

整份報表內容有點長,在此就不提供內容,有興趣可以到使用手冊中查看,並自己試一試。
報表內容描述
Size of the current database
     Tablespace: list, size and owner

Schema: list, size and owner
當前連線資料庫的 database、tablespace、schema 的大小
Top 10 Relations by pages
大小為前十大的資料表格
Top 10 Indexes by pages
大小為前十大的 Index 表
Top 10 Relations by DML
資料更動活動最頻繁的十個資料表格
DATA from pg_stat_database
目前資料庫資訊:當前連線數、交易活動的 Commit/Rollback 次數、硬碟 Blocks 存取次數資訊、Buffer Cache 的 Hit Ratio
DATA from pg_buffercache
列出佔前十多 Buffer Cache 大小的表格
DATA from pg_stat_all_tables ordered by seq scan
依照 Sequential Scan 次數排列的表格列表
DATA from pg_stat_all_tables ordered by rel tup read
依照被撈的資料筆數排列的表格列表(資訊
DATA from pg_statio_all_tables
表格在硬碟上的 Blocks 被讀取的數量的資訊
DATA from pg_stat_all_indexes
Index 被使用的次數資訊
DATA from pg_statio_all_indexes
Index 表在硬碟上的 Blocks 被讀取的數量的資訊
System Wait Information
Wait Events 的類型發生的次數
Database Parameters from postgresql.conf
當前 postgresql.conf 設定檔參數列表

在這裡列出可以注意的幾點:
  • DRITA 報告是針對一個 PostgreSQL Database 收集的,並不是收集整個 PostgreSQL Instance 的資訊。

  • 這份報表,主要收集的是表格與 Index 的資訊

  • 列舉 postgresql.conf 當前參數,可以由以下兩種方式達成
edb=# SELECT name,unit,boot_val,setting,current_setting(name) FROM pg_settings;
edb=# SHOW all;

  • 上面標明紅色的部份「DATA from pg_buffercache not included because pg_buffercache is not installed」,說明 pg_buffercache 這個套件沒有被啟用;需要的話,在收集 DRITA 快照前,先用以下指令,便能夠啟用它:
edb=# CREATE EXTENSION pg_buffercache;

  • 除了 edbreport 函數之外,EDB 再特別對 DRITA 報告內五類資訊,提供能夠單獨取得報告的函數,並且能用分別五個函數去存取:
子報表函數
對應 edbreport 報表部份
stat_db_rpt
DATA from pg_stat_database
stat_tables_rpt
DATA from pg_stat_all_tables ordered by seq scan
DATA from pg_stat_all_tables ordered by rel tup read
statio_tables_rpt
DATA from pg_statio_all_tables
stat_indexes_rpt
DATA from pg_stat_all_indexes
statio_indexes_rpt
DATA from pg_statio_all_indexes

使用方法,可以參考使用手冊


以上大致演練過 DRITA 工具的功能了。最後是清理掉 DRITA 快照資料的方式:
  • 指定清掉某個範圍的 DRITA 快照:
edb=# SELECT purgesnap(1, 2);
             purgesnap            
------------------------------------
 Snapshots in range 1 to 2 deleted.
(1 row)

  • 清除所有 DRITA 快照(重設 DRITA 資料)
edb=# SELECT truncsnap();
      truncsnap
----------------------
 Snapshots truncated.
(1 row)


與  Oracle Statspack / Oracle AWR 的功能相比較,就我目前所知,目前還沒有像 Oracle AWR 一樣,自動產生快照以及設定快照保存策略等功能。有需要的話,就得自己去設置定時收集與清理 DRITA 快照了。


報表內容,目前(9.5 版)與 Oracle 的工具相比,還差一點東西:例如 top sql(吃資源的 SQL 指令)、資料庫參數的使用狀況(例如,Oracle 上能顯示 SGA 及 PGA 的記憶體使用狀況,但在 EDB 裡面沒有這種對等資訊)等;此外, DRITA 功能也沒有紀錄 OS 功能資訊,這需要額外工具才行(例如 Postgres Enterprise ManagerOpen PostgreSQL Monitoring 等)


參考:
使用手冊
其他使用筆記



其他資訊:
在 PostgreSQL 9.6 原生版,將要有內建的 wait event 監控功能,在下面便是一篇相關功能介紹

什麼是Oracle Statspack/Oracle AWR

沒有留言:

張貼留言