本記事では、Sysbenchツールを使用してOceanBaseクラウドデータベースのOLTPパフォーマンスをテストする方法について説明します。
説明
ユーザーエクスペリエンスと使いやすさを向上させ、すべての開発者がデータベースを使用する際に良好なパフォーマンスを得られるようにするため、OceanBaseデータベースはV4.0.0以降、多くの最適化作業を行っています。このパフォーマンステスト方法は、基本的なパラメータに基づいてチューニングされており、開発者が良好なデータベースパフォーマンス体験を得られるようにします。
Sysbenchとは
SysbenchはLuaJITベースのスクリプト可能なマルチスレッドベンチマークツールであり、CPU、メモリ、スレッド、I/O、データベースなどのパフォーマンステストを実行できます。様々なシステムパラメータ下でのデータベース負荷状況を評価するために広く使用されており、ソースコードを変更することなく、カスタムluaスクリプトを通じて異なる業務タイプのテストを実現できます。
環境の準備
プローブECS
プローブとしてECSを1台準備してください。OBServerと同じ仕様を推奨し、プローブがボトルネックにならないようにしてください。プローブECSはOceanBaseテナントと同一のVPCネットワークに属している必要があり、かつOceanBaseクラスタがプローブECSへのアクセスを許可するホワイトリストを開放している必要があります。
OceanBaseインスタンスの作成
- OceanBaseクラスタインスタンスを1つ作成します。操作手順については、クラスタインスタンスの作成をご参照ください。
- テナントを作成し、クラスタのリソースに応じて必要に応じてテナントの仕様を設定します。操作手順については、テナントの作成をご参照ください。
- データベースを作成します。本記事ではsysbenchを例に説明します。操作手順については、データベースの作成をご参照ください。
sysbenchツールのインストール:以下の手順に従ってSysbenchをインストールしてください。
Sysbenchをダウンロードします。
詳細については、SysbenchのダウンロードURLをご参照ください。
パラメータの説明:
パラメータ名説明--prefix Sysbenchのインストールディレクトリを指定します。 --with-mysql-includes mysqlのincludesディレクトリを指定します。 --with-mysql-libs mysqlのlibディレクトリを指定します。 --with-mysql SysbenchはデフォルトでMySQLをサポートしています。 以下のコマンドを実行し、Sysbenchが正常にインストールされているか確認します:
[xxxx@localhost sysbench-1.0.20] $./sysbench --help次の情報が返された場合、Sysbenchは正常にインストールされています。
Usage: sysbench [options]... [testname] [command] Commands implemented by most tests: prepare run cleanup help
環境最適化
テストシナリオの説明:
OceanBase分散データベースの特性をよりよく理解するために、データベースプロキシを有効にすることを推奨します。データベースプロキシ管理をご参照ください。
OceanBaseデータベースインスタンスでは、デフォルトでデータベースプロキシとOBServerは同一のECSにデプロイされます。データベースプロキシを有効にすると、パフォーマンスに積極的な影響があります。
テストの実行
- データベースの初期化
sysbench oltp_read_write.lua --mysql-host=$host --mysql-port=$port --mysql-db=$database_name --mysql-user=$user --mysql-password=****** --table_size=1000000 --tables=30 --threads=150 --report-interval=10 --time=60 cleanup
- テーブルの作成
sysbench oltp_read_write.lua --mysql-host=$host --mysql-port=$port --mysql-db=$database_name --mysql-user=$user --mysql-password=****** --table_size=1000000 --tables=30 --threads=150 --report-interval=10 --time=60 prepare
- テストの実行
sysbench oltp_read_write.lua --mysql-host=$host --mysql-port=$port --mysql-db=$database_name --mysql-user=$user@ --mysql-password=****** --table_size=1000000 --tables=30 --threads=150 --report-interval=10 --time=60 --db-ps-mode=disable run
- パラメータの説明
以下はSysbench設定ファイルのサンプルです:
--mysql-host OBServerのIP(OBProxyがある場合はOBProxyのIPを使用することを推奨します)
--mysql-port ポート番号
--mysql-db 接続したいデータベース
--mysql-user ユーザー名
--mysql-password パスワード
--table_size 各テーブルの初期化データ量
--tables 初期化するテーブル数
--threads 起動するスレッド数
--time 実行時間を0に設定すると時間制限なしを意味します
--report-interval 実行中のログの出力間隔、単位は秒
--events 最大リクエスト数を定義すると、--timeオプションが不要になる場合があります
--rand-type データアクセス時に使用するランダム関数として、special、uniform、gaussian、paretoを選択できます。デフォルトはspecialです。初期バージョンではuniformでした。
--skip_trx=on 読み取り専用テストでは、トランザクションを有効または無効にすることができます。デフォルトは有効です。
--percentile=N パーセンタイルrtを出力します。デフォルトは95です。
oltp_write_only sysbenchのluaディレクトリには、insert、point_selectなど、さまざまなシナリオ向けのテストケースが含まれています。