Oracle Data Guard Replicationのネットワークレイテンシの測定方法 (2022/05/02)
Oracle Data Guard Replicationのネットワークレイテンシの測定方法 (2022/05/02)
https://database-heartbeat.com/2022/05/02/latency_dg/
はじめに
Oracle Data Guardは、高可用性とディザスタリカバリのために、プライマリデータベースから1つまたは複数のスタンバイデータベースへデータをレプリケートします。Redoを同期的に転送するか非同期的に転送するかは、RTOとRPOに依存します。同期的なREDO転送はデータ損失をゼロにし、リカバリ時間を短縮しますが、アプリケーションはデータがスタンバイサイトのディスク(SYNC)またはメモリ(FASTSYNC)に書き込まれるまで、コミットに関する確認応答を取得するのを待つ必要があります。この追加時間は、主にFASTSYNCのネットワーク遅延に依存し、さらにSYNCのディスクへの書き込み時間にも依存します。
では、同期レプリケーションでアプリケーションのパフォーマンスに影響を与えない、あるいは最小限に抑えるために必要な最小のレイテンシはどれくらいでしょうか。その答えは、意外にも「人それぞれ」なのです。
Synchronous Redo Transportのベストプラクティスで説明したとおりです。
アプリケーションによって、同期レプリケーションに対する耐性は異なります。アプリケーションの同時実行性、セッション数、トランザクションサイズ(バイト単位)、セッションのコミット頻度、ログスイッチの頻度が異なると、往復のネットワーク遅延(RTT)、帯域、ログファイルの書き込みI/O性能がすべて同じでも、アプリケーションごとに影響が異なります。一般に、オラクルでは、往復のネットワーク遅延が 5ms 未満の場合は、遅延が 5ms を超える場合よりも、同期転送を使用する方が成功率が高くなると考えています。同期レプリケーションがワークロードに与える影響について具体的な結論を出す前に、必ずテストを行うことをお勧めします。
このブログでは、Data Guardレプリケーションのプライマリデータベースとスタンバイデータベース間のレイテンシをどのように測定するかについて説明します。
環境
OCI Frankfurtリージョン内の3つの可用性ドメイン間で、各AD(vmfraad1、vmfraad2、vmfraad3)にIaaS VMを1OCPU、1Gbpsのネットワーク帯域でそれぞれプロビジョンして、レイテンシーを検証してみます。
PING
Pingは、事実上すべてのオペレーティングシステムで利用可能な使いやすいユーティリティで、多くの人がネットワーク遅延を測定するために最初に思い浮かべるかもしれないものです。
[opc@vmfraad1 ~]$
ping
-c 3 10.10.0.127
PING 10.10.0.127 (10.10.0.127) 56(84) bytes of data.
64 bytes from 10.10.0.127: icmp_seq=1 ttl=64
time
=0.551 ms
64 bytes from 10.10.0.127: icmp_seq=2 ttl=64
time
=0.557 ms
64 bytes from 10.10.0.127: icmp_seq=3 ttl=64
time
=0.537 ms
--- 10.10.0.127
ping
statistics ---
3 packets transmitted, 3 received, 0% packet loss,
time
2048ms
rtt min
/avg/max/mdev
= 0.537
/0
.548
/0
.557
/0
.020 ms
しかし、pingでRTTがわかるといっても、通常、pingの主な用途はホストの到達性をテストすることです。Data Gaurdのレプリケーションでは、使用するメカニズムが異なるため、pingによるレイテンシー測定は意味がありません。
oratcptest
オラクルは、Data GuardのREDOトランスポート、GoldenGate RMANバックアップおよびリストア、マイグレーション、Data Guardのインスタンス化、およびデータベースのリモートクローンで使用するネットワークリソースを評価できるように、特にoratcptestという特定のユーティリティを設計しました。
ダウンロード
このユーティリティ(jarファイル)は、Oracle MOS Note 2064368.1よりダウンロードすることができます。MOSノートのAttachmentsの下にスクロールして、oratcptestをクリックすると、oratcptest.jarファイルがダウンロードできます。
プライマリとスタンバイの両方のデータベースサーバにファイルを保存してください。Oratcptestは任意のユーザーで実行できます。root 権限は必要ありません。私の場合は、/home/opcに保存して、opcユーザーで実行します。
# primary
[opc@vmfraad1 ~]$
ls
-l
/home/opc/
-rw-r--r--. 1 opc opc 28038 Apr 22 09:53 oratcptest.jar
# standby
[opc@vmfraad2 ~]$
ls
-l
/home/opc/
-rw-r--r--. 1 opc opc 28038 Apr 22 09:53 oratcptest.jar
準備
jarファイルを実行するために、両方のマシンにjavaをインストールする必要があります(まだインストールしていない場合)。
sudo yum install java -y
また、両方のマシンで、ポート1521、またはData Guardのトラフィックに使用するポートを開いてください。
## primary
[opc@vmfraad1 ~]$
sudo
firewall-cmd --zone=public --add-port=1521
/tcp
--permanent
success
[opc@vmfraad1 ~]$
sudo
firewall-cmd --reload
success
[opc@vmfraad1 ~]$
sudo
firewall-cmd --list-all
public (active)
...
ports: 1521
/tcp
...
## standby
[opc@vmfraad2 ~]$
sudo
firewall-cmd --zone=public --add-port=1521
/tcp
--permanent
success
[opc@vmfraad2 ~]$
sudo
firewall-cmd --reload
success
[opc@vmfraad2 ~]$
sudo
firewall-cmd --list-all
public (active)
...
ports: 1521
/tcp
...
oratcptest の実行
Oratcptest.jar は、クライアントモードとサーバーモードで実行することができます。
スタンバイホスト(サーバであるvmfraad2)上で、以下のコマンドを実行します。
java -jar oratcptest.jar -server <server_name_or_ip> -port=<port_number>
[opc@vmfraad2 ~]$ java -jar oratcptest.jar -server vmfraad2 -port=1521
OraTcpTest server started.
実行されてもプロンプトが返ってきません。
プライマリホスト(クライアントであるvmfraad1)では、3つのオプションがあります。
1. -mode=async ASYNC redo トランスポートで、スタンバイへのレイテンシはアプリケーションのパフォーマンスに影響しないため、ネットワークスループットのみを測定します。
## ASYNC
java -jar oratcptest.jar <server_name_or_ip> -mode=async -duration=100s -interval=20s -length=8k -port=1521
2. -mode=sync および -write で SYNC redo トランスポートを行い、ネットワークスループット、レイテンシ、ディスクへの書き込み時間を測定します。
## SYNC
java -jar oratcptest.jar <server_name_or_ip> -mode=
sync
-duration=100s -interval=20s -length=8k -port=1521 -write
[opc@vmfraad1 ~]$ java -jar oratcptest.jar vmfraad2 -mode=
sync
-duration=100s -interval=20s -length=8k -port=1521 -write
[Requesting a
test
]
Message payload = 8 kbytes
Payload content
type
= RANDOM
Delay between messages = NO
Number of connections = 1
Socket send buffer = (system default)
Transport mode = SYNC
Disk write = YES
Statistics interval = 20 seconds
Test duration = 100 seconds
Test frequency = NO
Network Timeout = NO
(1 Mbyte = 1024x1024 bytes)
(12:10:30) The server is ready.
Throughput Latency
(12:10:50) 7.544 Mbytes
/s
1.037 ms (disk-write 0.564 ms)
(12:11:10) 7.600 Mbytes
/s
1.029 ms (disk-write 0.568 ms)
(12:11:30) 7.641 Mbytes
/s
1.024 ms (disk-write 0.563 ms)
(12:11:50) 7.702 Mbytes
/s
1.016 ms (disk-write 0.557 ms)
(12:12:10) 7.600 Mbytes
/s
1.029 ms (disk-write 0.569 ms)
(12:12:10) Test finished.
Socket send buffer = 166400 bytes
Avg. throughput = 7.617 Mbytes
/s
Avg. latency = 1.027 ms (disk-write 0.564 ms)
3. -mode=sync without -write for FASTSYNC, ネットワークのスループットとレイテンシーを測定しますが、スタンバイのディスクへの書き込みを行わないため、全体のラウンドトリップを減らし、アプリケーションの性能を向上させます。
## FastSync
java -jar oratcptest.jar <server_name_or_ip> -mode=
sync
-duration=100s -interval=20s -length=8k -port=1521
結果
OCI Frankfurtで行ったテストの結果は以下のとおりです。平均値はすべてミリ秒です。
これらのテストは、第一印象を与えるためのものです。オンプレミス、Oracle Cloud、または他のクラウド環境において、何らかの決定を下す前に、ワークロードに対して適切なサイズのVMを使用して、ご自身の環境でテストを行ってください。
まとめ
Data Guardの同期REDO転送には、主に物理的な距離の影響を受けるネットワークのレイテンシが重要です。Oracleは、ネットワークのレイテンシとスループットを測定するためのoratcptestと呼ばれる特別で使いやすいユーティリティを提供しています。Pingの代わりにこのユーティリティを使用して、Data Guard環境の展開時に得られる正確な結果を得ることができます。
Oratcptestには、このブログ記事で説明されている以外にも多くのオプションがあります。完全な説明については、Oracle MOSノートをお読みください。
その他の情報
- Assessing and Tuning Network Performance for Data Guard and RMAN (Doc ID 2064368.1)
- Role Transition Best Practices – Data Guard and Active Data Guard
- Redo Apply Best Practices – Oracle Data Guard and Active Data Guard
- Best Practices for Synchronous Redo Transport – Data Guard and Active Data Guard
- Best Practices for Asynchronous Redo Transport – Data Guard and Active Data Guard
コメント
コメントを投稿