3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[OCI]スケジュールに基づくAutonomous Databaseのスケールアップ/スケールダウンをAutonomous Database自体にやらせてみた

Last updated at Posted at 2022-02-14

はじめに

Autonomous Databaseを運用する際、負荷の高い業務時間帯はCPUをスケールアップしてOCPU数を増やし、負荷の低い夜間はCPUをスケールダウンしてOCPU数を減らして運用するケースがあります。

Autonomous Databaseは再起動することなくCPU、ストレージをオンラインでスケールアップ/スケールダウンすることができるため、このCPUのスケールアップ/スケールダウンのスケジューリングをAutonomous Database自体に行わせることができるか検証してみました。

こちらの手順では、リソース・プリンシパルを使用していますので、こちらのドキュメントを参考にして、あらかじめadminユーザーに対して、Autonomous Databaseインスタンスのリソース・プリンシパルを有効にしておく必要があります。

また、こちらの内容はあくまで検証のため、エラーハンドリング等は行っておりません。
本番環境で利用される際は、エラーハンドリング、リトライ処理を実装されることをお勧めします。

1.Autonomous DatabaseのOCIDの確認

コンソールでAutonomous DatabaseのOCIDを確認し、メモしておきます。
スクリーンショット 2022-02-14 14.08.18.png
現在、こちらのAutotnomous Databaseは1 OCPUで稼働しています。

2.Autonomous DatabaseのOCPU数を変更するPL/SQLブロックの作成

こちらのAutonomous Databaseにデータベース・アクションやSQL*Plusからadminユーザで接続します。

Autonomous DatabaseのOCPU数を変更するPL/SQLブロックを作成して、実行してみます。
・target_adb_ocidにAutonomous DatabaseのOCIDを指定します。
・ocpu_countに設定するOCPU数を指定します。

ocpu_countに2を指定して、現状1 OCPUのAutonomous Databaseを2 OCPUにスケールアップしてみます。

SQL> set serveroutput on
SQL> DECLARE
  2  	autonomous_database_details	dbms_cloud_oci_database_update_autonomous_database_details_t;
  3  	response_body				dbms_cloud_oci_database_autonomous_database_t;
  4  	response					dbms_cloud_oci_db_database_update_autonomous_database_response_t;
  5  	target_adb_ocid VARCHAR2(200) := 'ocid1.autonomousdatabase.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
  6  	ocpu_count NUMBER := 2;
  7  
  8  BEGIN
  9  
 10      DBMS_OUTPUT.PUT_LINE('OCID:'||target_adb_ocid);
 11      DBMS_OUTPUT.PUT_LINE('New OCPU count:'||ocpu_count);
 12  
 13      autonomous_database_details := dbms_cloud_oci_database_update_autonomous_database_details_t();
 14      autonomous_database_details.cpu_core_count := ocpu_count;
 15  
 16      response := DBMS_CLOUD_OCI_DB_DATABASE.UPDATE_AUTONOMOUS_DATABASE (
 17  		autonomous_database_id => target_adb_ocid,
 18  		update_autonomous_database_details => autonomous_database_details,
 19  		region => 'ap-tokyo-1',
 20  		credential_name => 'OCI$RESOURCE_PRINCIPAL'
 21      );
 22  
 23  END;
 24  /
OCID:ocid1.autonomousdatabase.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
New OCPU count:2

PL/SQLプロシージャが正常に完了しました。

SQL>

コンソールでAutonomous Databaseの状態を確認してみます。
スクリーンショット 2022-02-14 13.38.28.png
ライフサイクル状態が「スケーリング進行中」になりました。
しばらく待つと、OCPU数が2になり、ライフサイクル状態が「使用可能」になりました。
スクリーンショット 2022-02-14 13.39.04.png

PL/SQLブロックでAutonomous Databaseのスケールアップができました。

次にocpu_countに1を指定して、現状2 OCPUのAutonomous Databaseを1 OCPUにスケールダウンしてみます。

SQL> set serveroutput on
SQL> DECLARE
  2  	autonomous_database_details	dbms_cloud_oci_database_update_autonomous_database_details_t;
  3  	response_body				dbms_cloud_oci_database_autonomous_database_t;
  4  	response					dbms_cloud_oci_db_database_update_autonomous_database_response_t;
  5  	target_adb_ocid VARCHAR2(200) := 'ocid1.autonomousdatabase.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
  6  	ocpu_count NUMBER := 1;
  7  
  8  BEGIN
  9  
 10      DBMS_OUTPUT.PUT_LINE('OCID:'||target_adb_ocid);
 11      DBMS_OUTPUT.PUT_LINE('New OCPU count:'||ocpu_count);
 12  
 13  	autonomous_database_details := dbms_cloud_oci_database_update_autonomous_database_details_t();
 14  	autonomous_database_details.cpu_core_count := ocpu_count;
 15  
 16      response := DBMS_CLOUD_OCI_DB_DATABASE.UPDATE_AUTONOMOUS_DATABASE (
 17  		autonomous_database_id => target_adb_ocid,
 18  		update_autonomous_database_details => autonomous_database_details,
 19  		region => 'ap-tokyo-1',
 20  		credential_name => 'OCI$RESOURCE_PRINCIPAL'
 21      );
 22  
 23  END;
 24  /
OCID:ocid1.autonomousdatabase.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
New OCPU count:1

PL/SQLプロシージャが正常に完了しました。

SQL>

コンソールでAutonomous Databaseの状態を確認してみます。
スクリーンショット 2022-02-14 13.41.31.png
ライフサイクル状態が「スケーリング進行中」になりました。
しばらく待つと、OCPU数が1になり、ライフサイクル状態が「使用可能」になりました。
スクリーンショット 2022-02-14 13.42.15.png

PL/SQLブロックでAutonomous Databaseのスケールダウンができました。

3.Autonomous DatabaseのOCPU数を変更するストアド・プロシージャの作成

変更後のAutonomous DatabaseのOCPU数を引数として受け取り、Autonomous DatabaseのOCPU数を変更するストアド・プロシージャ"change_adb_ocpu_count"を作成します。

SQL> CREATE OR REPLACE PROCEDURE change_adb_ocpu_count( ocpu_count IN NUMBER )
  2  IS
  3  	autonomous_database_details	dbms_cloud_oci_database_update_autonomous_database_details_t;
  4  	response_body				dbms_cloud_oci_database_autonomous_database_t;
  5  	response					dbms_cloud_oci_db_database_update_autonomous_database_response_t;
  6  
  7  	target_adb_ocid VARCHAR2(200) := 'ocid1.autonomousdatabase.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
  8  
  9  BEGIN
 10  
 11  	DBMS_OUTPUT.PUT_LINE('OCID:'||target_adb_ocid);
 12  	DBMS_OUTPUT.PUT_LINE('New OCPU count:'||ocpu_count);
 13  
 14  	autonomous_database_details := dbms_cloud_oci_database_update_autonomous_database_details_t();
 15  	autonomous_database_details.cpu_core_count := ocpu_count;
 16  
 17  	response := DBMS_CLOUD_OCI_DB_DATABASE.UPDATE_AUTONOMOUS_DATABASE (
 18  		autonomous_database_id => target_adb_ocid,
 19  		update_autonomous_database_details => autonomous_database_details,
 20  		region => 'ap-tokyo-1',
 21  		credential_name => 'OCI$RESOURCE_PRINCIPAL'
 22  	);
 23  
 24  END;
 25  /

プロシージャが作成されました。

SQL>

作成したストアド・プロシージャchange_adb_ocpu_countに引数として2を渡して実行してみます。

SQL> EXECUTE change_adb_ocpu_count(2);
OCID:ocid1.autonomousdatabase.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
New OCPU count:2

PL/SQLプロシージャが正常に完了しました。

SQL>

コンソールでAutonomous Databaseの状態を確認してみます。
スクリーンショット 2022-02-14 13.59.11.png
ライフサイクル状態が「スケーリング進行中」になりました。
しばらく待つと、OCPU数が2になり、ライフサイクル状態が「使用可能」になりました。
スクリーンショット 2022-02-14 14.00.36.png

ストアド・プロシージャchange_adb_ocpu_countを使用して、Autonomous Databaseのスケールアップができました。

次に、作成したストアド・プロシージャchange_adb_ocpu_countに引数として1を渡して実行してみます。

SQL> EXECUTE change_adb_ocpu_count(1);
OCID:ocid1.autonomousdatabase.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
New OCPU count:1

PL/SQLプロシージャが正常に完了しました。

SQL>

コンソールでAutonomous Databaseの状態を確認してみます。
スクリーンショット 2022-02-14 14.01.44.png
ライフサイクル状態が「スケーリング進行中」になりました。
しばらく待つと、OCPU数が1になり、ライフサイクル状態が「使用可能」になりました。
スクリーンショット 2022-02-14 14.03.29.png

ストアド・プロシージャchange_adb_ocpu_countを使用して、Autonomous Databaseのスケールダウンができました。

4.DBMS_SCHEDULERジョブの作成

作成したストアド・プロシージャをDBMS_SCHEDULERのジョブとして登録します。

同様に、Autonomous DatabaseのOCPU数を変更するストアド・プロシージャchange_adb_ocpu_countを毎日日本時間8:00に実行するジョブ"scaleup_adb_job"を作成します。

SQL> BEGIN
  2  	DBMS_SCHEDULER.CREATE_JOB (
  3  		job_name           =>  'SCALEUP_ADB_JOB',
  4  		job_type           =>  'STORED_PROCEDURE',
  5  		job_action         =>  'ADMIN.CHANGE_ADB_OCPU_COUNT', -- ストアド・プロシージャ名
  6  		number_of_arguments => 1,
  7  		start_date         =>  TO_TIMESTAMP_TZ('2022-02-14 8:00:00 +9:00','YYYY-MM-DD HH24:MI:SS TZH:TZM'), -- 初回実行日時(日本時間2022/2/14 8:00を指定)
  8  		repeat_interval    =>  'FREQ=DAILY;INTERVAL=1', -- 実行頻度(毎日実行)
  9  		auto_drop          =>  FALSE
 10  	);
 11  END;
 12  /

PL/SQLプロシージャが正常に完了しました。

SQL>

作成したジョブ"SCALEUP_ADB_JOB"に第1引数として"2"(OCPU数)を渡す設定をします。

SQL> BEGIN
  2  	DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE (
  3  		job_name                => 'SCALEUP_ADB_JOB',
  4  		argument_position       => 1,
  5  		argument_value          => 2);
  6  END;
  7  /

PL/SQLプロシージャが正常に完了しました。

SQL> 

作成したジョブ"SCALEUP_ADB_JOB"を有効化します。

SQL> BEGIN
  2  	DBMS_SCHEDULER.ENABLE('SCALEUP_ADB_JOB');
  3  END;
  4  /

PL/SQLプロシージャが正常に完了しました。

SQL>

Autonomous DatabaseのOCPU数を変更するストアド・プロシージャchange_adb_ocpu_countを毎日日本時間18:00に実行するジョブ"scaledown_adb_job"を作成します。

SQL> BEGIN
  2  	DBMS_SCHEDULER.CREATE_JOB (
  3  		job_name           =>  'SCALEDOWN_ADB_JOB',
  4  		job_type           =>  'STORED_PROCEDURE',
  5  		job_action         =>  'ADMIN.CHANGE_ADB_OCPU_COUNT', -- ストアド・プロシージャ名
  6  		number_of_arguments => 1,
  7  		start_date         =>  TO_TIMESTAMP_TZ('2022-02-14 18:00:00 +9:00','YYYY-MM-DD HH24:MI:SS TZH:TZM'), -- 初回実行日時(日本時間2022/2/14 18:00を指定)
  8  		repeat_interval    =>  'FREQ=DAILY;INTERVAL=1', -- 実行頻度(毎日実行)
  9  		auto_drop          =>  FALSE
 10  	);
 11  END;
 12  /

PL/SQLプロシージャが正常に完了しました。

SQL>

作成したジョブ"SCALEDOWN_ADB_JOB"に第1引数として"1"(OCPU数)を渡す設定をします。

SQL> BEGIN
  2  	DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE (
  3  		job_name                => 'SCALEDOWN_ADB_JOB',
  4  		argument_position       => 1,
  5  		argument_value          => 1);
  6  END;
  7  /

PL/SQLプロシージャが正常に完了しました。

SQL>

作成したジョブ"SCALEDOWN_ADB_JOB"を有効化します。

SQL> BEGIN
  2  	DBMS_SCHEDULER.ENABLE('SCALEDOWN_ADB_JOB');
  3  END;
  4  /

PL/SQLプロシージャが正常に完了しました。

SQL>

以上で、Autonomous Databaseが自分自身のOCPUのスケールアップ/ダウンを行うようにスケジューリングすることができました。

参考

DBMS_CLOUDでのリソース・プリンシパルの使用
DBMS_CLOUD_OCI_DB_DATABASE.UPDATE_AUTONOMOUS_DATABASEファンクション
DBMS_SCHEDULER.CREATE_JOBプロシージャ
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUEプロシージャ
DBMS_SCHEDULER.ENABLEプロシージャ

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?