Mysql

從伺服器上的 MySQL 非同步複製是否有最大 IOPS?

  • November 20, 2019

我一直在為這個問題苦苦掙扎一段時間。我在兩個系統上都安裝了 MySQL 8.0.15 的簡單主從設置。在日常操作中,slave 可以毫無問題地跟上 Master,但不幸的是,在我們的網路中,兩台伺服器之間的連接有時會中斷幾個小時或更長時間。當這種情況發生並且連接最終恢復時,似乎中繼日誌以預期的速度(網路速度)寫入從屬設備,但是將這些日誌應用到 MySQL 數據庫中並沒有達到物理磁碟的全部潛力.

分配的 RAM 和 CPU 也沒有接近上限。當複制趕上從屬伺服器時,磁碟僅達到 600KB/s 左右,但在典型操作(Windows 操作)中,這些 SSD 可以達到 > 500MB/s。我知道這些是更“隨機”的寫入,但我沒想到會出現這麼多的性能下降。這實際上與我們使用的類似設置的速度相同,該設置僅使用指定的 IOPS 低得多的旋轉磁碟。

主機和從機上的硬體/軟體相同:數據分區設置在單獨的 SSD RAID-10 中,作業系統和應用程序位於單獨的 RAID 1、64GB RAM、88 個 CPU 上,兩者都執行 Windows 2016 MySQL 8.0.15,它們使用類似的配置文件。以下是我目前使用的啟動配置:

$$ client $$

埠=3306

預設字元集=utf8

$$ mysql $$

無嗶聲

預設字元集=utf8

$$ mysqld $$

port=3306

datadir=“W:/Data”

character-set-server=utf8

default_authentication_plugin=mysql_native_password

default-storage-engine=INNODB

sql-mode=“STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION”

log-output=FILE

general-log=0

general_log_file=" S:/general.log"

slow-query-log=1

slow_query_log_file=“S:/slow.log”

long_query_time=10

log-bin=“S:/bin”

log-error=“S:/error.log”

伺服器-id=10

lower_case_table_names=1

安全文件-priv=""

鬆散本地infile=1

max_connections=500

table_open_cache=2000

tmp_table_size=7G

thread_cache_size=48

myisam_max_sort_file_size=100G

myisam_sort_buffer_size = 12G的key_buffer_size

= 11M

read_buffer_size = 64K

read_rnd_buffer_size = 256K

innodb_data_home_dir =“W:/數據”的

innodb_flush_log_at_trx_commit = 1

innodb_thread_concurrency參數= 0

innodb_autoextend_increment = 64

innodb_buffer_pool_instances = 8

innodb_log_buffer_size = 120M

innodb_buffer_pool_size = 50G

innodb_log_file_size = 15G

innodb_concurrency_tickets = 5000

innodb_old_blocks_time = 1000

innodb_open_files = 1000

innodb_stats_on_metadata=0

innodb_file_per_table=1

innodb_checksum_algorithm=0

back_log=80

flush_time=0

join_buffer_size=1M

max_allowed_pa​​cket=1G

slave_max_allowed_pa​​cket=1G

max_connect_errors=2147483648

open_files_limit=4161 sort_buffer_size

=2M

table_definition_cache=1400

binlog_row_event_max_size=8K

sync_master_info=10000

sync_relay_log=10000

sync_relay_log_info=10000

loss_mysqlx_port=33060 複製

複製-相同-伺服器-id=0

sync_binlog=1

gtid-mode=ON

強制-gtid-consistency=true

從屬優化

slave-parallel-type=LOGICAL_CLOCK

slave-parallel-workers=88

slave-compressed-protocol=ON

log-slave-updates=0

binlog-group-commit-sync-delay=4000

binlog-group-commit-sync-no-delay -count=5

binlog-row-image=MINIMAL

binlog-format=STATEMENT

我們所有的數據庫都只使用 innodb 表。我從網上的研究中嘗試了各種優化。我嘗試調整從屬並行設置和各種 innodb 設置,當從屬追趕時,這些設置似乎都不會影響磁碟吞吐量。有沒有人在這裡看到我需要調整的任何內容或有關如何解決此問題的任何建議?或者即使你認為我應該關注硬體與軟體?謝謝!

如果您需要更多資訊,請告訴我。

立即修復奴隸

SET GLOBAL innodb_flush_log_at_trx_commit = 2;

這應該會稍微加快從站的速度。

轉到從站上的 my.cnf 並添加

[mysqld]
innodb_flush_log_at_trx_commit = 2
innodb_flush_method=O_DIRECT

並重新啟動mysqld。

請閱讀我的舊文章Dynamic change to innodb_flush_log_at_trx_commit以獲得更多說明。

引用自:https://dba.stackexchange.com/questions/253737