MySQL - 在 Windows 10 上缓慢的 InnoDB 写入速度

pee*_*pee 4 mysql innodb windows mysql-5.6 windows-10

我有 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
Run Code Online (Sandbox Code Playgroud)

有什么明显的我做错了或者你需要更多信息吗?我试过遵循各种指南,但对所有可用的选项感到迷失。

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

谢谢

Rol*_*DBA 6

建议#1

你有innodb_thread_concurrency在 17。它真的需要为零(0)。为什么 ?

不要重复我过去写的东西,请阅读我写的关于 innodb_thread_concurrency 是 0 的最佳选择的 7 篇文章

建议#2

在写入重做日志时,使用小的日志缓冲区可能是一个瓶颈。

请阅读我 3 年前发布的MySQL 事务大小 - 多大才算大?为什么它应该更大

我建议将innodb_log_buffer_size设置为 128M

建议#3

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

你有innodb_log_file_size在对MySQL 5.6的默认大小:48M

我建议设置innodb_log_file_size = 1G。

建议 #4

您已将flush_time设置为0。恕我直言,对于任何Windows 操作系统,这是一个很大的NO-NO。

Windows 的默认值为 1800。我不相信 MySQL 每 30 分钟在 Windows 中刷新到磁盘。

我建议flush_time为 300(每五(5)分钟)

建议#5

您应该增加 IO 线程

默认值为

innodb_read_io_threads = 4
innodb_write_io_threads = 4
Run Code Online (Sandbox Code Playgroud)

Percona Server 的默认值是

innodb_read_io_threads = 8
innodb_write_io_threads = 8
Run Code Online (Sandbox Code Playgroud)

对于innodb_read_io_threadsinnodb_write_io_threads ,您应该从 8 开始。

试一试 !!!

在每个连接的缓冲区方面,我还有很多要推荐的:打开和关闭数据库连接的成本是多少?