MySQLの基本的なチューニングまとめ

July 9, 2015

基本計算式

 innodb_buffer_pool_size
 + key_buffer_size
 + max_connections * (sort_buffer_size + read_buffer_size + 2MB)

max_connections

物理メモリをもとに基本計算式で計算。

AWS(RDS)では、DBInstanceClassMemoryの3/4が自動的に割り当てられる。

wait_timeout

mysql> set global wait_timeout=180;
mysql> show global variables like 'wait_timeout';
+---------------------------------------------------+----------+
| Variable_name                                     | Value    |
+---------------------------------------------------+----------+
| wait_timeout                                      | 180      |
+---------------------------------------------------+----------+

/etc/my.cnfに書くなら

[mysqld]
wait_timeout = 180

innodb_buffer_pool_size

DBサーバ専用なら、載ってるメモリの3/4程度は割り当てて良い。

key_buffer_size, sort_buffer_size

通常低すぎかも。数百MB当ててよい。

まとめ

InnoDBの場合


innodb_buffer_pool_sizeには当てられるだけメモリを当てる。 専用サーバなら全体の80%を。共存してるなら他のサービスと相談。 innodb_log_file_sizeは、innodb_buffer_pool_sizeの1/2にする。デフォが2枚組みだから。

innodb_log_file_sizeを変更したら、mysqlを一旦落として、 /var/lib/mysql/以下のidlogfilermしておく。で、mysql再起動。

key_buffer_size 「一般的には、マシンのメモリ使用率 25 % の値であることが好ましい」一方で 「Key_reads/Key_read_requests の比率は、0.01 より小さいことが望ましい」つまり 99.9%がキャッシュされていることが望ましいということ。

調査コマンド(コピペ用)


-- [Important]
-- innodb_buffer_pool_size + key_buffer_size +
-- max_connections * (sort_buffer_size + read_buffer_size) + max_connections * 2 MB
show variables like "%innodb_buffer%";
show variables like "%innodb_log%";
show variables like "%key_buffer_size%";
show variables like "%max_connections%";
show variables like "%sort_buffer_size%";
show variables like "%read_buffer_size%";

-- ・方法1
-- Key_reads / Key_read_requests =「キャッシュミスレート」
-- これが、1%を下回るように。
-- ・方法2
-- 100 - ( ( Key_reads / Key_read_requests ) * 100 )=Key Efficiency(%)
-- これが、90% を下回る事が無いように。
show status like "%Key_reads%";
show status like "%Key_read_requests%";

-- Key_blocks_not_flushed:変更されたが、ディスクへのフラッシュはまだされていないキーキャッシュのキーブロック
-- Key_blocks_unused :キーキャッシュの未使用ブロックの数
-- Key_blocks_used :キーキャッシュのブロックの使用数。この値は、これまで同時使用したブロックの最大値
-- [適切なkey_buffer_sizeを知るために]
-- Key_block_unused
-- これが数百ブロックといった小さな値になっている場合には増やす必要があります。
-- Key_read_requests / Key_reads 比
-- 100を大きく割り込んでいる値が記録されている場合、key_buffer_sizeは不足。
-- 体感では、Key_blocks_usedは限りなくゼロに近い方がいい。blockは恐らくディスクに近いことと思う。
show status like "%Key_blocks%";


Recent blog posts



(c) Copyright 2023 Kotaro Yoshimatsu