Mysql

MySQL - Windows 10 上的 InnoDB 寫入速度慢

  • January 18, 2016

我有 Windows 10 訓練營。我已經安裝了最新版本的 MySQL 社區伺服器。我還在 IIS 上安裝了 WordPress。MacBook 有 16Gb 的記憶體。這是我的配置文件

[client]
no-beep

# pipe
# socket=0.0
port=3306

[mysql]

default-character-set=utf8

[mysqld]
port=3306
datadir=C:/ProgramData/MySQL/MySQL Server 5.6/Data
character-set-server=utf8
]default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
log-output=FILE
general-log=0
general_log_file="DESKTOP-F1OO1LC.log"
slow-query-log=1
slow_query_log_file="DESKTOP-F1OO1LC-slow.log"
long_query_time=10
log-error="DESKTOP-F1OO1LC.err"
server-id=1
max_connections=151
query_cache_size=0
table_open_cache=2000
tmp_table_size=90M
thread_cache_size=10
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=171M
key_buffer_size=8M
read_buffer_size=64K
read_rnd_buffer_size=256K
innodb_additional_mem_pool_size=13M
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size=7M
innodb_buffer_pool_size = 4G
innodb_log_file_size=48M
innodb_thread_concurrency=17
innodb_autoextend_increment=64
innodb_buffer_pool_instances=8
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=300
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_algorithm=0
back_log=80
flush_time=0
join_buffer_size=256K
max_allowed_packet=4M
max_connect_errors=100
open_files_limit=4161
query_cache_type=0
sort_buffer_size=256K
table_definition_cache=1400
binlog_row_event_max_size=8K
sync_master_info=10000
sync_relay_log=10000
sync_relay_log_info=10000

有什麼明顯的我做錯了還是你需要更多資訊?我嘗試過遵循各種指南,但對所有可用的選項都迷失了方向。

目前正在查看每秒最多 20 次寫入!

謝謝

建議 #1

您的innodb_thread_concurrency為 17。它確實需要為零(0)。為什麼 ?

不要重複我過去寫的東西,請閱讀我寫的關於 innodb_thread_concurrency 是 0 的最佳選擇的 7 篇文章

建議 #2

寫入重做日誌時,使用小日誌緩衝區可能會成為瓶頸。

請閱讀我 3 歲的文章MySQL 事務大小 - 多大才算太大?為什麼它應該更大

我建議將innodb_log_buffer_size設置為 128M

建議#3

重做日誌也需要更大。你有

MySQL 5.6 的預設大小為innodb_log_file_size:48M

我建議設置innodb_log_file_size = 1G。

建議 #4

您已將flush_time設置為 0。恕我直言,對於任何 Windows 作業系統,這是一個很大的 NO-NO。

對於 Windows,預設值為 1800。我不相信 MySQL 在 Windows 中每 30 分鐘刷新一次磁碟。

我建議將 flush_time 設置為 300(每五 (5) 分鐘)

建議 #5

你應該增加 IO 執行緒

預設值為

innodb_read_io_threads = 4
innodb_write_io_threads = 4

Percona 伺服器的預設設置是

innodb_read_io_threads = 8
innodb_write_io_threads = 8

對於innodb_read_io_threadsinnodb_write_io_threads,您應該從 8 開始。

試一試 !!!

關於每個連接的緩衝區,我還有很多要推薦的:打開和關閉數據庫連接的成本是多少?

將多個查詢收集到單個BEGINCOMMIT事務中。這將減少成本和磁碟命中。

不要盲目地這樣做——單個事務中的一百萬個查詢還有其他問題。並且錯誤檢查需要以不同的方式處理;想ROLLBACK

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