TiProxy パフォーマンス テスト レポート

このレポートでは、Sysbench の OLTP シナリオで TiProxy のパフォーマンスをテストし、 HAプロキシと比較します。

結果は次のとおりです。

  • TiProxy の QPS 上限はワークロードの種類によって影響を受けます。Sysbench の基本ワークロードと同じ CPU 使用率の場合、TiProxy の QPS は HAProxy よりも約 25% 低くなります。
  • TiProxy が保持できる TiDBサーバーインスタンスの数は、ワークロードの種類によって異なります。Sysbench の基本ワークロードでは、TiProxy は同じモデルの TiDBサーバーインスタンスを 5 ~ 12 個保持できます。
  • クエリ結果セットの行数は TiProxy の QPS に大きな影響を与え、その影響は HAProxy の場合と同じです。
  • TiProxy のパフォーマンスは、vCPU の数に応じてほぼ直線的に増加します。そのため、vCPU の数を増やすと、QPS の上限を効果的に向上させることができます。
  • 長い接続の数と短い接続の作成頻度は、TiProxy の QPS にほとんど影響を与えません。

テスト環境

ハードウェア構成

サービスマシンタイプCPUモデルインスタンス数
Tiプロキシ4C8GIntel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz1
HAプロキシ4C8GIntel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz1
PD4C8GIntel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz3
ティビ8C16GIntel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz8
ティクヴ8C16GIntel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz8
システムベンチ8C16GIntel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz1

ソフトウェア

サービスソフトウェアバージョン
Tiプロキシバージョン1.0.0
HAプロキシ2.9.0
PDバージョン8.0.0
ティビバージョン8.0.0
ティクヴバージョン8.0.0
システムベンチ1.0.17

コンフィグレーション

TiProxy の設定

テストでは、クライアントと TiProxy 間、または TiProxy と TiDBサーバー間で TLS が有効になっていません。

proxy.conn-buffer-size: 131072

HAProxy 設定 - haproxy.cfgファイル

global # Global configuration. log 127.0.0.1 local2 # Specifies the global syslog server. You can define up to two. pidfile /var/run/haproxy.pid # Write the PID of the HAProxy process to pidfile. maxconn 4096 # The maximum number of concurrent connections that a single HAProxy process can accept, equivalent to the command line parameter "-n". nbthread 4 # The maximum number of threads. The upper limit of the number of threads is the same as the number of CPUs. user haproxy # Same as UID parameter. group haproxy # Same as GID parameter. A dedicated user group is recommended. daemon # Run HAProxy as a daemon in the background, which is equivalent to the command line parameter "-D". You can also disable it with the "-db" parameter on the command line. stats socket /var/lib/haproxy/stats # The location where the statistics are saved. defaults # Default configuration. log global # Inherit the settings of the global configuration section. retries 2 # The maximum number of times to try to connect to the upstream server. If the number of retries exceeds this value, the backend server is considered unavailable. timeout connect 2s # The timeout period for HAProxy to connect to the backend server. If the server is located on the same LAN as HAProxy, set it to a shorter time. timeout client 30000s # The timeout period for the client to be inactive after the data transmission is completed. timeout server 30000s # The timeout period for the server to be inactive. listen tidb-cluster # Configure database load balancing. bind 0.0.0.0:3390 # Floating IP address and listening port. mode tcp # HAProxy uses layer 4, the transport layer. balance leastconn # The server with the least number of connections receives the connection first. `leastconn` is recommended for long session services, such as LDAP, SQL, and TSE, rather than short session protocols, such as HTTP. This algorithm is dynamic, and the server weight is adjusted during operation for slow-start servers. server tidb-1 10.9.18.229:4000 check inter 2000 rise 2 fall 3 # Detects port 4000 at a frequency of once every 2000 milliseconds. If it is detected as successful twice, the server is considered available; if it is detected as failed three times, the server is considered unavailable. server tidb-2 10.9.39.208:4000 check inter 2000 rise 2 fall 3 server tidb-3 10.9.64.166:4000 check inter 2000 rise 2 fall 3

基本的な作業負荷テスト

テスト計画

このテストの目的は、ポイント選択、読み取り専用、書き込み専用、読み取り書き込みの 4 種類のワークロードで TiProxy と HAProxy の QPS を比較することです。各種類のワークロードは、異なる同時実行性でテストされ、TiProxy と HAProxy の QPS を比較します。

テストを実行するには、次のコマンドを使用します。

sysbench $testname \ --threads=$threads \ --time=1200 \ --report-interval=10 \ --rand-type=uniform \ --db-driver=mysql \ --mysql-db=sbtest \ --mysql-host=$host \ --mysql-port=$port \ run --tables=32 --table-size=1000000

ポイント選択

TiProxy テスト結果:

スレッド品質保証平均レイテンシー(ミリ秒)P95レイテンシー(ミリ秒)TiProxy CPU 使用率TiDB 全体の CPU 使用率
20412730.480.64190%900%
501002550.500.62330%1900%
1001376880.731.01400%2600%

HAProxy テスト結果:

スレッド品質保証平均レイテンシー(ミリ秒)P95レイテンシー(ミリ秒)HAProxy CPU 使用率TiDB 全体の CPU 使用率
20448330.450.61140%1000%
501036310.480.61270%2100%
1001630690.610.77360%3100%

読み取り専用

TiProxy テスト結果:

スレッド品質保証平均レイテンシー(ミリ秒)P95レイテンシー(ミリ秒)TiProxy CPU 使用率TiDB 全体の CPU 使用率
507207611.0912.75290%2500%
10010970414.5817.63370%3800%
20011751927.2132.53400%4100%

HAProxy テスト結果:

スレッド品質保証平均レイテンシー(ミリ秒)P95レイテンシー(ミリ秒)HAProxy CPU 使用率TiDB 全体の CPU 使用率
507576010.5612.08250%2600%
10012173013.1415.83350%4200%
20013171224.2730.26370%4500%

書き込み専用

TiProxy テスト結果:

スレッド品質保証平均レイテンシー(ミリ秒)P95レイテンシー(ミリ秒)TiProxy CPU 使用率TiDB 全体の CPU 使用率
100819577.3210.27290%3900%
30010304017.4531.37330%4700%
50010486928.5952.89340%4800%

HAProxy テスト結果:

スレッド品質保証平均レイテンシー(ミリ秒)P95レイテンシー(ミリ秒)HAProxy CPU 使用率TiDB 全体の CPU 使用率
100817087.3410.65240%3700%
30010600816.9531.37320%4800%
50012236924.4547.47350%5300%

読み書き

TiProxy テスト結果:

スレッド品質保証平均レイテンシー(ミリ秒)P95レイテンシー(ミリ秒)TiProxy CPU 使用率TiDB 全体の CPU 使用率
505857117.0719.65250%2600%
1008843222.6029.19330%3900%
20010875836.7351.94380%4800%

HAProxy テスト結果:

スレッド品質保証平均レイテンシー(ミリ秒)P95レイテンシー(ミリ秒)HAProxy CPU 使用率TiDB 全体の CPU 使用率
506122616.3319.65190%2800%
1009656920.7026.68290%4100%
20012016331.2849.21340%5200%

結果セットテスト

テスト計画

このテストの目的は、異なる結果セットの行数での TiProxy と HAProxy のパフォーマンスを比較することです。このテストでは 100 の同時実行を使用し、結果セットの行数が 10、100、1000、10000 の場合の TiProxy と HAProxy の QPS を比較します。

テストを実行するには、次のコマンドを使用します。

sysbench oltp_read_only \ --threads=100 \ --time=1200 \ --report-interval=10 \ --rand-type=uniform \ --db-driver=mysql \ --mysql-db=sbtest \ --mysql-host=$host \ --mysql-port=$port \ --skip_trx=true \ --point_selects=0 \ --sum_ranges=0 \ --order_ranges=0 \ --distinct_ranges=0 \ --simple_ranges=1 \ --range_size=$range_size run --tables=32 --table-size=1000000

試験結果

TiProxy テスト結果:

範囲サイズ品質保証平均レイテンシー(ミリ秒)P95レイテンシー(ミリ秒)TiProxy CPU 使用率TiDB 全体の CPU 使用率受信ネットワーク (MiB/秒)送信ネットワーク (MiB/秒)
10801571.251.61340%2600%140140
100559361.792.43370%2800%820820
1000103139.6913.70310%1500%13701370
10000106493.88142.39250%600%14301430

HAProxy テスト結果:

範囲サイズ品質保証平均レイテンシー(ミリ秒)P95レイテンシー(ミリ秒)HAProxy CPU 使用率TiDB 全体の CPU 使用率受信ネットワーク (MiB/秒)送信ネットワーク (MiB/秒)
10943761.061.30250%4000%150150
100701291.421.76270%3300%890890
1000950111.1814.73240%1500%11801180
10000955104.61320.17180%1200%12001200

スケーラビリティテスト

テスト計画

このテストの目的は、TiProxy のパフォーマンスが仕様に比例していることを確認し、TiProxy の仕様をアップグレードすることで QPS の上限を向上できることを確認することです。このテストでは、vCPU 数と同時実行性が異なる TiProxy インスタンスを使用して QPS を比較します。

テストを実行するには、次のコマンドを使用します。

sysbench oltp_point_select \ --threads=$threads \ --time=1200 \ --report-interval=10 \ --rand-type=uniform \ --db-driver=mysql \ --mysql-db=sbtest \ --mysql-host=$host \ --mysql-port=$port \ run --tables=32 --table-size=1000000

試験結果

仮想CPUスレッド品質保証平均レイテンシー(ミリ秒)P95レイテンシー(ミリ秒)TiProxy CPU 使用率TiDB 全体の CPU 使用率
240585080.680.97190%1200%
4801048900.761.16390%2000%
61201555200.771.14590%2900%
81602021340.791.18800%3900%

長時間接続テスト

テスト計画

このテストの目的は、クライアントが長時間接続を使用する場合に、多数のアイドル接続が QPS に与える影響が最小限であることを確認することです。このテストでは、5000、10000、および 15000 のアイドル長時間接続を作成し、 sysbench実行します。

このテストでは、 conn-buffer-size構成のデフォルト値を使用します。

proxy.conn-buffer-size: 32768

テストを実行するには、次のコマンドを使用します。

sysbench oltp_point_select \ --threads=50 \ --time=1200 \ --report-interval=10 \ --rand-type=uniform \ --db-driver=mysql \ --mysql-db=sbtest \ --mysql-host=$host \ --mysql-port=$port \ run --tables=32 --table-size=1000000

試験結果

接続数品質保証平均レイテンシー(ミリ秒)P95レイテンシー(ミリ秒)TiProxy CPU 使用率TiProxyメモリ使用量 (MB)TiDB 全体の CPU 使用率
5000966200.520.64330%9201800%
10000961430.520.65330%17101800%
15000960480.520.65330%25701900%

ショート接続テスト

テスト計画

このテストの目的は、クライアントが短い接続を使用する場合、接続の頻繁な作成と破棄が QPS に与える影響が最小限であることを確認することです。このテストでは、別のクライアント プログラムを起動して、 sysbench実行しながら 1 秒あたり 100、200、300 の短い接続を作成および切断します。

テストを実行するには、次のコマンドを使用します。

sysbench oltp_point_select \ --threads=50 \ --time=1200 \ --report-interval=10 \ --rand-type=uniform \ --db-driver=mysql \ --mysql-db=sbtest \ --mysql-host=$host \ --mysql-port=$port \ run --tables=32 --table-size=1000000

試験結果

1秒あたりの新規接続数品質保証平均レイテンシー(ミリ秒)P95レイテンシー(ミリ秒)TiProxy CPU 使用率TiDB 全体の CPU 使用率
100955970.520.65330%1800%
200946920.530.67330%1800%
300941020.530.68330%1900%

このページは役に立ちましたか?