MySQL ネイティブ レプリケーションに基づいて HA システムをデプロイする場合、準同期レプリケーションのタイムアウト期間が にダウングレードされることが判明しました。非同期レプリケーションが非常に長く設定されると、パフォーマンスに重大な影響を及ぼします。これは非常に奇妙な現象です。
さまざまなパラメータを組み合わせて、ストレス テストに sysbench を使用します。
sysbench --db-driver=mysql --mysql-db=test2 --mysql-host=srdsdevapp69 --mysql-table-engine=innodb --oltp-table-size=5000000 --num-threads =10 --max-time=10 --max-requests=0 --oltp-test-mode=complex --oltp-read-only=off --test=/opt/sysbench-0.5/sysbench/tests/db /insert.lua 実行 |
結果は次のとおりです:
rpl_semi_sync_master_enabled | rpl_semi_sync_master_timeout | qps | メモ |
---|---|---|---|
21474836480 | 13.9 | 約248日 | |
196.3 | 約24.8日 | ||
1251.67 | 約2.5日 | ||
86400000 | 2146.96 | 1日 | |
43200000 | 3211.17 | 12時間 | |
21600000 | 3583.02 | 6時間 | |
10000 | 3637.16 | 10秒 (デフォルト値) | |
オフ | - | 8926.76 |
上記の表から、rpl_semi_sync_master_timeout が大きい場合、各クエリの実行時間が rpl_semi_sync_master_timeout に比例することがわかります。
なぜこのような奇妙なことが起こるのですか? MySQL コードを開くと、真実がすぐに明らかになります。
プラグインemisyncsemisync_master.cc:
そのコード内の while を同等の記述に置き換えると、問題は解決されます。測定された qps は約 3700 ですが、これは rpl_semi_sync_master_timeout とは関係ありません。
pluginsemisyncsemisync_master.cc:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_FAST_MUTEXES=1make
http://www.bkjia.com/PHPjc/1108686.html