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

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

結果は次のとおりです。

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

テスト環境

ハードウェア構成

サービス機械タイプCPUモデルインスタンス数
TiProxy4C8Gインテル(R) Xeon(R) Silver 4214R CPU @ 2.40GHz1
HAプロキシ4C8Gインテル(R) Xeon(R) Silver 4214R CPU @ 2.40GHz1
PD4C8Gインテル(R) Xeon(R) Silver 4214R CPU @ 2.40GHz3
TiDB8C16Gインテル(R) Xeon(R) Silver 4214R CPU @ 2.40GHz8
TiKV8C16Gインテル(R) Xeon(R) Silver 4214R CPU @ 2.40GHz8
システムベンチ8C16Gインテル(R) Xeon(R) Silver 4214R CPU @ 2.40GHz1

ソフトウェア

サービスソフトウェアバージョン
TiProxyバージョン1.0.0
HAプロキシ2.9.0
PDバージョン8.0.0
TiDBバージョン8.0.0
TiKVバージョン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 テスト結果:

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

HAProxy テスト結果:

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

読み取り専用

TiProxy テスト結果:

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

HAProxy テスト結果:

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

書き込み専用

TiProxy テスト結果:

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

HAProxy テスト結果:

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

読み書き

TiProxy テスト結果:

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

HAProxy テスト結果:

スレッドQPS平均レイテンシー(ミリ秒)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 テスト結果:

範囲サイズQPS平均レイテンシー(ミリ秒)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 テスト結果:

範囲サイズQPS平均レイテンシー(ミリ秒)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スレッドQPS平均レイテンシー(ミリ秒)P95レイテンシー(ミリ秒)TiProxy CPU使用率TiDB 全体の CPU 使用率
240585080.680.97190%1200%
4801048900.761.16390%2000%
61201555200.771.14590%2900%
81602021340.791.18800%3900%

長時間接続テスト

テスト計画

このテストは、クライアントが長時間接続を使用する場合、多数のアイドル接続がQPSに最小限の影響しか与えないことを検証することを目的としています。このテストでは、5,000、10,000、15,000のアイドル状態の長時間接続を作成し、 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

テスト結果

接続数QPS平均レイテンシー(ミリ秒)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秒あたりの新規接続数QPS平均レイテンシー(ミリ秒)P95レイテンシー(ミリ秒)TiProxy CPU使用率TiDB 全体の CPU 使用率
100955970.520.65330%1800%
200946920.530.67330%1800%
300941020.530.68330%1900%

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