1
0

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 1 year has passed since last update.

Oracle RACの Dynamic Resource Mastering (DRM) の動作を確認してみた

Posted at

Oracle DatabaseのRACには Dynamic Resource Mastering (DRM) という機能があります。
Oracle Databaseではデータアクセスする際に該当データをバッファキャッシュ上にキャッシュします。
RACでは複数あるノードのどれか1つにキャッシュされますが、そのキャッシュ先ノードを動的に変更できるのがDRMです。
DRMを使うことで、より対象データにアクセスする頻度が高いノードにキャッシュを移せますので、データ取得の効率が向上します。
英語になりますが詳しくは下記MOSドキュメントを参照ください。
DRM - Dynamic Resource management (Doc ID 390483.1)

ちなみにDRMという略語は Dynamic Re-mastering という機能の略称でも使われていますが、こちらは別物ですのでご注意ください。
Dynamic Re-masteringについては下記がご参考になります。
https://blogs.oracle.com/otnjp/post/tsushima-hakushi-79

とあるきっかけで前者のDRMの動作確認をする機会がありましたので、その際のコマンドとログを残しておきます。

環境概要

動作確認した環境の概要は以下の通りです。

  • OS: Oracle Linux 7.9
  • DBバージョン: 19c (19.3)
  • DB構成: 2ノードRAC(CDB構成)

確認手順

適当な一般のDBユーザでPDBにログインし、テーブルを作成します。
ノードはどちらでも大丈夫です。

create table test_easy(col1 number, col2 number, col3 varchar2(20));

begin
for i in 1..10000 loop
insert into test_easy values(i, mod(i,5), 'dummy');
end loop;
end;
/

作成したテーブルのオブジェクトIDを確認し、メモしておきます。

select object_id, owner, object_type from dba_objects where object_name='TEST_EASY' and object_type='TABLE';

sysでPDBにログインし、GV$GCSPFMASTER_INFO に問合せてDRMの実行状況を確認します。
この段階では結果は特に何も返ってきません。

select * from GV$GCSPFMASTER_INFO where DATA_OBJECT_ID=<メモしたオブジェクトID>;

ノード2に接続後、sysでPDBにログインして手動でDRMを実行します。
これでノード2がテーブル「test_easy」のキャッシュにおけるマスターとなります。

oradebug setmypid
oradebug lkdebug -m pkey <メモしたオブジェクトID> 1

再度 GV$GCSPFMASTER_INFO に問合せると以下のように返ってきます。
テーブル「test_easy」のキャッシュについて、マスターがノード2上のインスタンスになっていると分かります。

select * from GV$GCSPFMASTER_INFO where DATA_OBJECT_ID=<メモしたオブジェクトID>;

   INST_ID    FILE_ID DATA_OBJECT_ID GC_MASTERING_PO CURRENT_MASTER PREVIOUS_MASTER REMASTER_CNT ...
---------- ---------- -------------- --------------- -------------- --------------- ------------
         1          0    <object id>        Affinity              2           32767            1

ちなみに「PREVIOUS_MASTER」のカラムには今の状態になる直前までマスターだったインスタンスの番号が通常入ります。
ですが対象オブジェクトに対して初めてDRMが実行された場合は、上記のように PREVIOUS_MASTER に「32767」が入るようです。

ここまでDRMの動作状況を GV$GCSPFMASTER_INFO で確認して来ましたが、LMDのトレースファイルからも確認できます。
LMDのトレースファイルでは以下のように表記されます。

---ノード1の場合---
* received DRM start msg from 2 (cnt 1, last 1, rmno 2)
*   (domid 1, numhv 0, addhv 0)
Rcvd DRM(2) AFFINITY Transfer pkey 1.4.4294967295 to 2 objscan 1
...(略)...
End DRM(2) for pkey transfer request(s) from 2

---ノード2の場合---
Begin DRM(2) (active 0)(swin 1) - AFFINITY transfer pkey 1.4.4294967295 to 2 objscan 1 req 0x90599fb0
...(略)...
* End DRM for pkey remastering request(s) (locally requested)

以上、簡単ですがDRMの手動実行による動作確認でした。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?