web-dev-qa-db-ja.com

MySQL-Windows 10でInnoDBの書き込み速度が遅い

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

私が間違っていることは明らかですか、それとももっと情報が必要ですか?私はさまざまなガイドに従ってみましたが、利用可能なすべてのオプションで迷子になっています。

現在、1秒あたり最大20件の書き込みを確認しています。

ありがとう

4
pee2pee

推奨事項#1

17に innodb_thread_concurrency があります。それは本当にゼロ(0)である必要があります。どうして ?

私が過去に書いたものをリハッシュするのではなく、 私がinnodb_thread_concurrencyが0で最良の選択であることについて書いた7つの投稿を読んでください

推奨事項#2

小さなログバッファを使用すると、REDOログに書き込むときにボトルネックになる可能性があります。

私の3年前の投稿を読んでください MySQLトランザクションサイズ-どれくらいの大きさですか? なぜそれをもっと大きくすべきか

innodb_log_buffer_size を128Mに設定することをお勧めします

推奨事項#3

REDOログも大きくする必要があります。あなたが持っている

MySQL 5.6のデフォルトサイズで innodb_log_file_size が必要です:48M

innodb_log_file_size = 1Gに設定することをお勧めします。

推奨事項#4

flush_time が0に設定されています。私見Windows OSの場合、それは大きな違いです。

Windowsのデフォルトは1800です。 MySQLがWindowsで30分ごとにディスクにフラッシュすることは信頼できません。

flush_time から300(5分ごと)をお勧めします

推奨事項#5

IOスレッドを増やす必要があります

デフォルトは

innodb_read_io_threads = 4
innodb_write_io_threads = 4

Percona Serverのデフォルトは

innodb_read_io_threads = 8
innodb_write_io_threads = 8

innodb_read_io_threadsinnodb_write_io_threads の両方で8から始める必要があります。

試してみる !!!

接続ごとのバッファに関して、私が推奨することは他にもたくさんあります: DB接続の開閉にはどれくらいのコストがかかりますか?

5
RolandoMySQLDBA

複数のクエリを1つのBEGIN ... COMMITトランザクションにまとめます。これにより、オーバーヘッドとディスクヒットが削減されます。

これを盲目的に行わないでください。単一のトランザクションで100万のクエリを実行すると、別の問題が発生します。また、エラーチェックは別の方法で処理する必要があります。 ROLLBACKだと思います。

2
Rick James