從伺服器上的 MySQL 非同步複製是否有最大 IOPS?
我一直在為這個問題苦苦掙扎一段時間。我在兩個系統上都安裝了 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_packet=1G
slave_max_allowed_packet=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以獲得更多說明。