Oracle 11gでリソース・マネージャによるCPUやメモリなどのリソース制御を行う
Oracle 11gでは「リソース・マネージャ」を利用して、ユーザーやグループごとにCPUやその他リソースの割り当て上限を細かく制御できる。
設定
BEGIN
-- SUBMIT_PENDING_AREA()するまで反映しない
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
-- リソース・プランの作成
DBMS_RESOURCE_MANAGER.CREATE_PLAN(
PLAN => 'CPU_PLAN',
COMMENT => 'CPU使用率制限用プラン'
);
-- コンシューマ・グループの作成(必要に応じて)
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
CONSUMER_GROUP => 'LIMITED_USERS',
COMMENT => '制限対象ユーザーグループ'
);
-- プラン・ディレクティブの設定
-- 例:LIMITED_USERSグループにCPU使用率20%の上限を設定
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'CPU_PLAN',
GROUP_OR_SUBPLAN => 'LIMITED_USERS',
COMMENT => '制限ユーザー用',
UTILIZATION_LIMIT => 20
);
-- 設定の確定
DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
制限を適用したいユーザーをコンシューマ・グループに割り当て
EXEC DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP('対象ユーザー', 'LIMITED_USERS', TRUE);
ALTER USER 対象ユーザー DEFAULT CONSUMER GROUP LIMITED_USERS;
リソース・プランの有効化
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'CPU_PLAN';
これで設定したリソース・プランが有効になり、指定したグループごとにCPUなどのリソース上限が適用される。
確認
設定内容や有効化状況は、DBA_RSRC_PLAN_DIRECTIVES
やV$RSRC_PLAN
で確認。
-- 現在有効なリソースプラン
SELECT name, is_top_plan FROM v$rsrc_plan;
-- プランのディレクティブ内容
SELECT PLAN, GROUP_OR_SUBPLAN, TYPE, MGMT_P1, UTILIZATION_LIMIT
FROM DBA_RSRC_PLAN_DIRECTIVES
WHERE PLAN = 'CPU_PLAN';
mysqlでは
- MySQL 5.x/8.0の標準ユーザー制限機能では、CPU上限は直接設定できない。
- 1時間当たりのクエリなどの上限設定、
- 同時接続数の設定は可能。
- 8.0から仮想CPU単位でスレッドをグループに割り当てることで、CPUリソースの制御が可能になった。
CREATE USER 'username'@'host'
IDENTIFIED BY 'password'
WITH
MAX_QUERIES_PER_HOUR 1000
MAX_UPDATES_PER_HOUR 500
MAX_CONNECTIONS_PER_HOUR 100
MAX_USER_CONNECTIONS 5;
- PostgreSQLでも同様にOracleのようには設定できない。(OS側のcgroup設定などで工夫する)
mariadbでは
- ColumnStoreエンジンでUserPriorityを使うことでできる。
- MariaDB ColumnStoreは、通常のMariaDBとは異なり「カラム型」「分散並列処理」「分析特化」のエンジン。
- 標準のMariaDBサーバー(InnoDB/MyISAMなど)では利用できない。
テーブル作成時にENGINE=ColumnStoreを指定することでカラム型テーブルを作成できる。