MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

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

2016年7月30日 星期六

EDB 的資源管理功能 - Resource Manager

EDB 公司的 PostgreSQL 企業版資料庫,除了原生於社群版本的記憶體配置參數 shared_buffer 可以設定之外,還提供了資料庫的 CPU、I/O 資源使用調控參數 edb_dynatune。更進一步,EDB 還能夠針對資料庫總資源進行分配調控。

Resource Manager 是 EDB 用來控制系統資源使用的功能:對於分配給 EnterpriseDB Postgres Advanced Server(EPAS)的作業系統資源。使用 Resource Manager 建立不同的資源使用規則(Resource Group),便能夠對
  1. 當下 session、
  2. 指定帳戶,或
  3. 指定資料庫
套用某一個資源使用規則。被加入同一個 Resource Group 的 Session / Role / Database,會共同限制分用這個 Resource Group 分配的系統資源。

Resource Manager 可以設定的資源使用規則分成
(1) CPU 資源使用,
(2) Shared Buffer 寫入速率,
兩類。以下便依照使用手冊進行演練一次

  1. 首先啟用 Resource Manager
[enterprisedb@localhost ~]$ vi $PGDATA/postgresql.conf
. . .
edb_max_resource_groups = 3    # 指定要設定幾組資源使用規則
. . .
[enterprisedb@localhost ~]$ pg_ctl restart

  1. 建立一個 Resource Group
edb=# CREATE RESOURCE GROUP resource_gp1;
CREATE RESOURCE GROUP

  1. 設定該 Resource Group 的 資源限制:cpu 設置參數是以比例設置,用小數點指定;shared budder 設置參數 dirty_rate_limit 的單位是 KB/sec
edb=# ALTER RESOURCE GROUP resource_gp1
SET cpu_rate_limit TO .3,
dirty_rate_limit TO 500;
ALTER RESOURCE GROUP

    在此設定 resource_gp1

  1. 檢視現有的 Resource Group 與其資源使用規則
edb=# SELECT * FROM  edb_resource_group;
   rgrpname   | rgrpcpuratelimit | rgrpdirtyratelimit
--------------+------------------+-------------------
 resource_gp1 |              0.3 |               500
(1 row)

  1. 建好資源分配群組後,就能將當下 session 、帳戶或 Database 加入一個 Resource Group 中

    1. 當下運行的 session 使用該一 Resource Group
SET edb_resource_group TO resource_gp1;

    1. 將帳戶 test_user 加入一個 Resource Group 中
ALTER USER test_user
SET edb_resource_group
TO resource_gp1;

    1. 將資料庫 testdb 加入一個 Resource Group 中
ALTER DATABASE testdb
SET edb_resource_group
TO resource_gp1;

  1. 檢視目前各個 Resource Group 資源使用狀況的指令
SELECT * FROM  edb_all_resource_groups;


測試

以下測試,在配有 1 core, 2.6 GHz 的 VM 上進行,並使用外部工具監控 CPU 使用量。

  1. CPU 限制的測試:利用 EDB 進行一樣大小的計算階乘,藉以觀察 CPU 使用狀況
edb=# SELECT 30000!;

另外開一個 psql,查看 Resource Group 使用狀況
edb=# \x
Expanded display is on.
edb=# SELECT * FROM edb_all_resource_groups;
-[ RECORD 1 ]----------------+------------------
group_name                   | resource_gp1
active_processes             | 1
cpu_rate_limit               | 0.3
per_process_cpu_rate_limit   | 0.298687974561313
dirty_rate_limit             | 500
per_process_dirty_rate_limit | 16777216

由此可以即時觀察到 CPU 使用率有被 Resource Group 規則限制住。

    再觀察 CPU 使用狀況
圖上顯示了兩組測試的CPU使用率的活動:
第一組是 CPU 利用率 100% 的活動,是在沒有啟用 Resource Group 前進行的 30000 階乘計算,
而第二組 CPU 使用率限制在 30% 的活動,則是在啟用 Resource Group 後進行的 30000 階乘計算

以上可見,Resource Manager 在 CPU 使用量控管的效果。

  1. 要測試 Resource Manager 對 Shared Buffer 的管理,則是利用運作時間來比較。
         為了測試方便,會以修飾語句 WITH (FILLFACTOR = 10)建立表格:該語句會使的 Shared Page 數量增加,以進行此部份 Shared Buffer 限制功能的測試

先建立表格
CREATE TABLE t1 (c1 INTEGER,
c2 CHARACTER(500))
WITH (FILLFACTOR = 10);

以輸入一萬筆資料的方式進行測試。先進行不設定 Resource Group 的部份。
edb=# \timing
Timing is on.
edb=# INSERT INTO t1 VALUES (generate_series (1,10000), 'aaa');
INSERT 0 10000
Time: 266.969 ms

接著,在這個 session 啟用剛剛建立的 Resource Group,並再次插入一樣大筆的資料:
edb=# SET edb_resource_group TO resource_gp1;
SET
Time: 0.341 ms
edb=# INSERT INTO t1 VALUES (generate_series (1,10000), 'aaa');
INSERT 0 10000
Time: 158725.910 ms

比較以上橘色反白所列時間,可見到 Resource Group 限制造成資料寫入的速率影響,由此可見 Resource Group 對 Shared Buffer 限制影響的是在資料寫入速率。

以上便是 EDB 的企業版的資源管理功能。該功能最簡單的應用,就是可以用來建立測試區 Database,並限制住該區的資源,避免去影響到資料庫於線上正式的工作。

沒有留言:

張貼留言