このトピックでは、Data Transmission Service (DTS) パフォーマンステストのテスト環境、テストツール、テスト方法、およびテスト結果について説明します。 例として、ApsaraDB RDS for MySQLインスタンス間の一方向データ同期タスクを使用します。
テスト環境
ソースデータベースとターゲットデータベースに関する情報
テストで使用されるApsaraDB RDS for MySQLインスタンスでは、自動ストレージ拡張機能が有効になっています。
データベース | リージョン | タイプ | バージョン | 仕様 | CPU | メモリ |
ソースデータベース | 中国 (杭州) | RDS High-availability Editionを実行する標準のApsaraDB RDS for MySQLインスタンス | 8.0 | mysql.x4.xlarge.2c (専用) | 8 | 32 GB |
同期先データベース |
クライアント
クライアントとして使用するECSインスタンスのIPアドレスを、ApsaraDB RDS for MySQLインスタンスのIPアドレスホワイトリストに追加する必要があります。 詳細については、「IPアドレスホワイトリストの設定」をご参照ください。
タイプ | リージョン | ネットワークタイプ | OS | 仕様 | vCPU | メモリ | パブリックIPが割り当てられているかどうか |
ECS インスタンス | 中国 (杭州) | VPC 説明 ECSインスタンスのVPCおよびvSwitchは、ApsaraDB RDS for MySQLインスタンスのVPCおよびvSwitchと同じです。 | CentOS 7.9 64ビット | ecs.c7.8xlarge (計算最適化タイプc7) | 32 | 64 | 必須 |
テストツール
概要
ツール | バージョン | 説明 |
SysBench | 1.0.20 | 複数のスレッドを使用して、さまざまなプラットフォーム間で高負荷のデータベースシステムのパフォーマンスをテストできるモジュール式ベンチマークツール。 コアメトリックのデータは、データベースシステムのパフォーマンスをすばやく知るのに役立ちます。 |
BenchmarkSQL | 5.0 (Java 8ベース) | データベースシステムのパフォーマンス評価とストレステストのために、オンライントランザクション処理 (OLTP) ワークロードをシミュレートできるオープンソースのデータベースパフォーマンステストツール。 |
ツールのインストール
Sysbenchのインストール
Sysbenchをダウンロードし、ECSインスタンスにインストールします。
# Install the dependency library of Sysbench. yum -y install make automake libtool pkgconfig libaio-devel yum -y install mariadb-devel openssl-devel # Download the source code of Sysbench. wget "https://codeload.github.com/akopytov/sysbench/zip/refs/tags/1.0.20" -O sysbench-1.0.20.zip # Install the Unzip utility. yum -y install unzip # Decompress the source code. unzip sysbench-1.0.20.zip # Compile the source code. cd sysbench-1.0.20 ./autogen.sh ./configure sed -i 's/MYSQL_OPT_COMPRESSION_ALGORITHMS/MYSQL_OPT_COMPRESS/g' ./src/drivers/mysql/drv_mysql.c make -j # Install Sysbench. make install大きなテーブルが使用されるシナリオ用のLuaスクリプト (dm_large_table_write_only.lua) 、ホットデータ更新シナリオ用のスクリプト (dm_hot_update_only.lua) 、およびDDL同期シナリオ用のスクリプト (dm_ddl_only.lua) を準備します。
3つのLuaスクリプトをECSインスタンスにアップロードし、Sysbenchスクリプトディレクトリ
/usr/local/share/sysbench/にコピーします。# Copy the script for the scenarios where large tables are used. cp dm_large_table_write_only.lua /usr/local/share/sysbench/ # Copy the script for the hot data update scenario. cp dm_hot_update_only.lua /usr/local/share/sysbench/ # Copy the script for the DDL synchronization scenario. cp dm_ddl_only.lua /usr/local/share/sysbench/
BenchmarkSQLのインストール
# Install Apache Ant.
yum -y install ant
# Download the source code of BenchmarkSQL.
wget "https://github.com/jackysp/benchmarksql/archive/refs/heads/5.0-mysql-support-opt-2.1.zip" -O benchmarksql-5.0-mysql-support-opt-2.1.zip
# Decompress the source code.
unzip benchmarksql-5.0-mysql-support-opt-2.1.zip
# Build the source code.
cd benchmarksql-5.0-mysql-support-opt-2.1
antテスト方法
概要
次の方法を使用して、さまざまなディメンションからデータ同期タスクのパフォーマンスをテストできます。
テストツール | テストモデルまたはスクリプト | テスト済みの機能 |
Sysbench | oltp_write_only | フルデータ同期と増分データ同期 |
dm_large_table_write_only | フルデータ同期と増分データ同期 | |
dm_hot_update_only | 増分データ同期 | |
dm_ddl_only | 増分データ同期 | |
BenchmarkSQL | TPC-C | フルデータ同期と増分データ同期 |
手順
oltp_write_only
基本データを準備します。
ECSインスタンスで、Sysbenchを使用してソースApsaraDB RDS for MySQLインスタンス用に10個のテーブルを作成し、各テーブルに1,000万個のデータエントリをインポートします。
説明/usr/local/share/sysbench/ディレクトリで次のコマンドを実行します。sysbench --db-driver=mysql \ --mysql-host={HOST} \ --mysql-port={PORT} \ --mysql-user= \ --mysql-password= \ --mysql-db={DATABASE} \ --threads=64 --table_size=10000000 --tables=10 oltp_write_only.lua \ prepareパラメーター
説明
補足
関連ドキュメント
-- mysql-host
ApsaraDB RDS for MySQLインスタンスの内部エンドポイントを指定します。
{HOST}をApsaraDB RDS for MySQLインスタンスの内部エンドポイントに置き換えます。-- mysqlポート
ApsaraDB RDS for MySQLインスタンスの内部ポート番号を指定します。
{PORT}をApsaraDB RDS for MySQLインスタンスの内部ポート番号に置き換えます。-- mysql-user
ApsaraDB RDS for MySQLインスタンスで作成されたデータベースアカウントのユーザー名。
データベースアカウントに必要な権限があることを確認してください。
-- mysql-password
ApsaraDB RDS for MySQLインスタンスで作成されたデータベースアカウントのパスワード。
-- mysql-db
ストレステストが実行されるデータベースの名前。
事前にデータベースを作成し、
{database}をデータベースの名前に置き換えます。-- テーブル
テーブルの数。
この例では、このパラメーターは10に設定されています。
非該当
-- table_size
各テーブルのデータエントリ数。
この例では、このパラメーターは10000000に設定されています。
DTSデータ同期タスクを作成します。
同期タイプ パラメーターに スキーマ同期 および 完全データ同期 を選択します。 詳細については、「ApsaraDB RDS For MySQLインスタンス間の一方向データ同期の設定」をご参照ください。
完全なデータ同期が完了するまで待ちます。
増分データ同期のストレステストを実行します。
ECSインスタンスでoltp_write_onlyモデルを使用して、データ同期タスクのソースデータベースでストレステストを実行し、バイナリログを生成します。
説明異なるDML操作の割合: INSERT:UPDATE:DELETE = 1:2:1。
sysbench --db-driver=mysql \ --mysql-host={HOST} \ --mysql-port={PORT} \ --mysql-user= \ --mysql-password= \ --mysql-db={DATABASE} \ --threads=64 --table_size=1000000 --tables=10 --time=600 oltp_write_only.lua \ runパラメーター
説明
補足
-時間
ストレステストの期間。 単位は秒です。
この例では、このパラメーターは600に設定されています。
-- threads
ストレステスト用のスレッド数。
この例では、このパラメーターは64に設定されています。
DTSデータ同期タスクの パフォーマンスモニタリング ページで、タスクのパフォーマンスを表示します。
詳細については、「タスクのパフォーマンスの監視」をご参照ください。
dm_large_table_write_only
基本データを準備します。
ECSインスタンスで、Sysbenchを使用して、ソースApsaraDB RDS for MySQLインスタンス用に10個のテーブルを作成します。 各テーブルに10,000データエントリをインポートします。
説明/usr/local/share/sysbench/ディレクトリで次のコマンドを実行します。sysbench -- db-driver=mysql \ -- mysql-host={HOST} \ -- mysql-port={PORT} \ -- mysql-user= \ -- mysql-password= \ -- mysql-db={データベース} \ -- threads=64 -- table_size=10000 -- tables=10 dm_large_table_write_only.lua \ 準備するパラメーター
説明
補足
関連ドキュメント
-- mysql-host
ApsaraDB RDS for MySQLインスタンスの内部エンドポイントを指定します。
{HOST}をApsaraDB RDS for MySQLインスタンスの内部エンドポイントに置き換えます。-- mysqlポート
ApsaraDB RDS for MySQLインスタンスの内部ポート番号を指定します。
{PORT}をApsaraDB RDS for MySQLインスタンスの内部ポート番号に置き換えます。-- mysql-user
ApsaraDB RDS for MySQLインスタンスで作成されたデータベースアカウントのユーザー名。
データベースアカウントに必要な権限があることを確認してください。
-- mysql-password
ApsaraDB RDS for MySQLインスタンスで作成されたデータベースアカウントのパスワード。
-- mysql-db
ストレステストが実行されるデータベースの名前。
事前にデータベースを作成し、
{database}をデータベースの名前に置き換えます。-- テーブル
テーブルの数。
この例では、このパラメーターは10に設定されています。
非該当
-- table_size
各テーブルのデータエントリ数。
この例では、このパラメーターは10000に設定されています。
DTSデータ同期タスクを作成します。
同期タイプ パラメーターに スキーマ同期 および 完全データ同期 を選択します。 詳細については、「ApsaraDB RDS For MySQLインスタンス間の一方向データ同期の設定」をご参照ください。
完全なデータ同期が完了するまで待ちます。
増分データ同期のストレステストを実行します。
ECSインスタンスで、dm_large_table_write_onlyモデルを使用して、データ同期タスクのソースデータベースでストレステストを実行し、バイナリログを生成します。
sysbench -- db-driver=mysql \ -- mysql-host={HOST} \ -- mysql-port={PORT} \ -- mysql-user= \ -- mysql-password= \ -- mysql-db={データベース} \ -- threads=64 -- table_size=10000 -- tables=10 -- time=600 dm_large_table_write_only.lua \ 実行パラメーター
説明
補足
-時間
ストレステストの期間。 単位は秒です。
この例では、このパラメーターは600に設定されています。
-- threads
ストレステスト用のスレッド数。
この例では、このパラメーターは64に設定されています。
DTSデータ同期タスクの パフォーマンスモニタリング ページで、タスクのパフォーマンスを表示します。
詳細については、「タスクのパフォーマンスの監視」をご参照ください。
dm_hot_update_only
DTSデータ同期タスクを作成します。
同期タイプ パラメーターに 完全データ同期 を選択しないでください。 対応するデータベースとテーブルが移行先ApsaraDB RDS for MySQLインスタンスに作成されていない場合は、スキーマ同期 を選択する必要があります。 詳細については、「ApsaraDB RDS For MySQLインスタンス間の一方向データ同期の設定」をご参照ください。
ストレステストを実行するテーブルのデータを初期化します。
sysbench -- db-driver=mysql \ -- mysql-host={HOST} \ -- mysql-port={PORT} \ -- mysql-user= \ -- mysql-password= \ -- mysql-db={データベース} \ -- threads=64 -- tables=2 dm_hot_update_only.lua \ 準備するパラメーター
説明
補足
関連ドキュメント
-- mysql-host
ApsaraDB RDS for MySQLインスタンスの内部エンドポイントを指定します。
{HOST}をApsaraDB RDS for MySQLインスタンスの内部エンドポイントに置き換えます。-- mysqlポート
ApsaraDB RDS for MySQLインスタンスの内部ポート番号を指定します。
{PORT}をApsaraDB RDS for MySQLインスタンスの内部ポート番号に置き換えます。-- mysql-user
ApsaraDB RDS for MySQLインスタンスで作成されたデータベースアカウントのユーザー名。
データベースアカウントに必要な権限があることを確認してください。
-- mysql-password
ApsaraDB RDS for MySQLインスタンスで作成されたデータベースアカウントのパスワード。
-- mysql-db
ストレステストが実行されるデータベースの名前。
事前にデータベースを作成し、
{database}をデータベースの名前に置き換えます。-- テーブル
テーブルの数。
この例では、このパラメーターは2に設定されています。
非該当
増分データ同期のストレステストを実行します。
ECSインスタンスで、dm_hot_update_onlyモデルを使用して、データ同期タスクのソースデータベースでストレステストを実行し、バイナリログを生成します。
sysbench -- db-driver=mysql \ -- mysql-host={HOST} \ -- mysql-port={PORT} \ -- mysql-user= \ -- mysql-password= \ -- mysql-db={データベース} \ -- threads=64 -- tables=2 -- time=600 dm_hot_update_only.lua \ 実行パラメーター
説明
補足
-時間
ストレステストの期間。 単位は秒です。
この例では、このパラメーターは600に設定されています。
-- threads
ストレステスト用のスレッド数。
この例では、このパラメーターは64に設定されています。
DTSデータ同期タスクの パフォーマンスモニタリング ページで、タスクのパフォーマンスを表示します。
詳細については、「タスクのパフォーマンスの監視」をご参照ください。
dm_ddl_only
DTSデータ同期タスクを作成します。
同期タイプ パラメーターに 完全データ同期 を選択しないでください。 対応するデータベースとテーブルが移行先ApsaraDB RDS for MySQLインスタンスに作成されていない場合は、スキーマ同期 を選択する必要があります。 詳細については、「ApsaraDB RDS For MySQLインスタンス間の一方向データ同期の設定」をご参照ください。
増分データ同期のストレステストを実行します。
ECSインスタンスで、dm_ddl_onlyモデルを使用して、データ同期タスクのソースデータベースでストレステストを実行し、バイナリログを生成します。
sysbench -- db-driver=mysql \ -- mysql-host={HOST} \ -- mysql-port={PORT} \ -- mysql-user= \ -- mysql-password= \ -- mysql-db={データベース} \ -- threads=64 -- tables=2 -- time=600 dm_ddl_only.lua \ 実行パラメーター
説明
補足
関連ドキュメント
-- mysql-host
ApsaraDB RDS for MySQLインスタンスの内部エンドポイントを指定します。
{HOST}をApsaraDB RDS for MySQLインスタンスの内部エンドポイントに置き換えます。-- mysqlポート
ApsaraDB RDS for MySQLインスタンスの内部ポート番号を指定します。
{PORT}をApsaraDB RDS for MySQLインスタンスの内部ポート番号に置き換えます。-- mysql-user
ApsaraDB RDS for MySQLインスタンスで作成されたデータベースアカウントのユーザー名。
データベースアカウントに必要な権限があることを確認してください。
-- mysql-password
ApsaraDB RDS for MySQLインスタンスで作成されたデータベースアカウントのパスワード。
-- mysql-db
ストレステストが実行されるデータベースの名前。
事前にデータベースを作成し、
{database}をデータベースの名前に置き換えます。-- threads
ストレステスト用のスレッド数。
この例では、このパラメーターは64に設定されています。
非該当
-- テーブル
テーブルの数。
この例では、このパラメーターは2に設定されています。
-時間
ストレステストの期間。 単位は秒です。
この例では、このパラメーターは600に設定されています。 これは、DDL操作が600秒間実行されることを意味する。
DTSデータ同期タスクの パフォーマンスモニタリング ページで、タスクのパフォーマンスを表示します。
詳細については、「タスクのパフォーマンスの監視」をご参照ください。
TPC-C
基本データを準備します。
ECSインスタンスのBenchmarkSQLの作業ディレクトリに移動します。
cd benchmarksql-5.0-mysql-support-opt-2.1/run/設定ファイルprops.mysqlでソースインスタンスの接続情報を指定します。
vim props.mysql次のコードブロックは、構成ファイルのサンプルを示しています。
{HOST}、{PORT}、{USER}、{PASSWORD}、および{DATABASE}を、ソースのApsaraDB RDS for MySQLインスタンスに関する対応する情報に置き換えます。db=mysql driver=com.mysql.jdbc.Driver conn=jdbc:mysql://{HOST }:{ PORT}/{DATABASE}?readOnlyPropagatesToServer=false&rewriteBatchedStatements=true&failOverReadOnly=false&connectTimeout=3000&allowMultiQueries=true&clobberStreamtrue Results 0 user={USER} password={パスワード} 倉庫=1000 loadWorkers=100 terminals=128 // 指定されたトランザクションを端末ごとに実行するには-runMinsはゼロに等しくなければなりません runTxnsPerTerminal=0 // 指定された分実行するには-runTxnsPerTerminalはゼロに等しくなければなりません runMins=10 // 1分あたりの総トランザクション数 limitTxnsPerMin=0 // 4.x互換モードで実行するにはtrueに設定します。 を使用するにはfalseに設定します。// 構成されたデータベース全体。 terminalWarehouseFixed=true // 次の5つの値を合計して100 // 45、43、4、4、4のデフォルトの割合はTPC-Cの仕様と一致します newOrderWeight=45 paymentWeight=43 orderStatusWeight=4 deliveryWeight=4 stockLevelWeight=4 // 詳細な結果データを収集するために作成するディレクトリ名。 // これを抑制するためにコメントしてください。 resultDirectory=my_result_% tY-% tm-% td_% tH % tM % tS // osCollectorScript=./misc/os_collector_linux.py // osCollectorInterval=1 // osCollectorSSHAddr=user @ dbhost // osCollectorDevices=net_eth0 blk_sdaパラメーター
説明
補足
conn
インスタンスの接続設定。 {HOST} と {PORT} を次の情報に置き換えます。
HOST: ApsaraDB RDS for MySQLインスタンスの内部エンドポイント。
PORT: ApsaraDB RDS for MySQLインスタンスの内部ポート番号。
DATABASE: ApsaraDB RDS for MySQLインスタンスでテスト用に作成されたデータベースの名前。
{HOST}、{PORT}、および{DATABASE}を対応する情報に置き換えます。user
ApsaraDB RDS for MySQLインスタンスで作成されたデータベースアカウントのユーザー名。
{USER}を対応する情報に置き換えます。password
ApsaraDB RDS for MySQLインスタンスで作成されたデータベースアカウントのパスワード。
{PASSWORD}を対応する情報に置き換えます。runMins
ストレステストの期間。 単位は分です。
この例では、このパラメーターは10に設定されています。
TPC-Cテストの基本データを初期化します。
. /runDatabaseBuild.sh props.mysql10個のテーブルを作成します。 合計で約500万件のデータエントリをテーブルにインポートします。
DTSデータ同期タスクを作成します。
同期タイプ パラメーターに スキーマ同期 および 完全データ同期 を選択します。 詳細については、「ApsaraDB RDS For MySQLインスタンス間の一方向データ同期の設定」をご参照ください。
完全なデータ同期が完了するまで待ちます。
増分データ同期のストレステストを実行します。
ECSインスタンスで、TPC-Cモデルを使用して、データ同期タスクのソースデータベースでストレステストを実行し、バイナリログを生成します。
. /runBenchmark.sh props.mysqlパラメーター
説明
補足
-時間
ストレステストの期間。 単位は秒です。
この例では、このパラメーターは600に設定されています。
-- threads
ストレステスト用のスレッド数。
この例では、このパラメーターは64に設定されています。
DTSデータ同期タスクの パフォーマンスモニタリング ページで、タスクのパフォーマンスを表示します。
詳細については、「タスクのパフォーマンスの監視」をご参照ください。
テスト結果
増分データ同期タスクの最大パフォーマンスの詳細については、 データ同期パフォーマンスデータ。 タスクのパフォーマンスは、同期された行数 /秒 (RPS) で測定されます。
oltp_write_only
完全なデータ同期
インスタンスタイプ | RPS (行 /秒) | BPS (MB/s) | 期間 |
マイクロ | 17.95W | 34.19 | 557 |
small | 18.18W | 34.63 | 550 |
medium | 19.64W | 37.42 | 509 |
大きい | 19.96W | 38.02 | 501 |
増分データ同期
インスタンスタイプ | RPS (行 /秒) | BPS (KB/s) | 最大パフォーマンスに達したかどうか |
マイクロ | 200 | 86 | 必須 |
small | 2000 | 982 | 必須 |
medium | 5000 | 2605 | 必須 |
大きい | 11000 | 5489 | 必須 |
dm_large_table_write_only
完全なデータ同期
インスタンスタイプ | RPS (行 /秒) | BPS (MB/s) | 期間 |
マイクロ | 469.48 | 35.09MB | 213 |
small | 480.77 | 35.94MB | 208 |
medium | 552.49 | 41.30MB | 181 |
大きい | 584.80 | 43.71 | 171 |
増分データ同期
インスタンスタイプ | RPS (行 /秒) | BPS (KB/s) | 最大パフォーマンスに達したかどうか |
マイクロ | 200 | 9086.3 | 必須 |
small | 683 | 31741.51 | 選択可能 |
medium | 1033 | 56676.41 | 選択可能 |
大きい | 1537 | 84344.32 | 選択可能 |
dm_hot_update_only
デフォルトでは、trans.hot.merge.enableパラメーターはfalseに設定されています。 このパラメーターを変更する方法の詳細については、「DTSインスタンスのパラメーターの変更」をご参照ください。
trans.hot.merge.enableパラメーターはfalseに設定されています。
増分データ同期
インスタンスタイプ | RPS (行 /秒) | 最大パフォーマンスに達したかどうか |
マイクロ | 200 | 必須 |
small | 1,200 | 選択可能 |
medium | 1,200 | 選択可能 |
大きい | 1,200 | 選択可能 |
trans.hot.merge.enableパラメーターはtrueに設定されています。
増分データ同期
インスタンスタイプ | RPS (行 /秒) | 最大パフォーマンスに達したかどうか |
マイクロ | 200 | 必須 |
small | 2000 | 必須 |
medium | 5000 | 必須 |
大きい | 11000 | 必須 |
dm_ddl_only
増分データ同期
インスタンスタイプ | RPS (行 /秒) | 最大パフォーマンスに達したかどうか |
マイクロ | 68 | 選択可能 |
small | 68 | 選択可能 |
medium | 68 | 選択可能 |
大きい | 68 | 選択可能 |
TPC-C
完全なデータ同期
インスタンスタイプ | RPS (行 /秒) | BPS (MB/s) | 期間 |
マイクロ | 12.04W | 17.52 | 4143 |
small | 12.09W | 17.59 | 4127 |
medium | 12.73W | 18.52 | 3921 |
大きい | 13.50W | 19.64 | 3696 |
増分データ同期
インスタンスタイプ | RPS (row/s) | BPS (KB/s) | 最大パフォーマンスに達したかどうか |
マイクロ | 200 | 138 | 必須 |
small | 2000 | 1920 | 必須 |
medium | 5000 | 3847 | 必須 |
大きい | 11000 | 7542 | 必須 |