30GB 15M行のInnoDB MySQL 5.5.15テーブルがあります。他の多くのMyISAMテーブル(300GB db)を持つサーバーで実行されています。システムには48GBのRAMが搭載されています。デフォルトの構成に加えて、次の値を変更しました。
key_buffer_size
のMyISAMは8 GBで、Memcacheで8 GBを使用できるようにし、Redisをインストールします(使用量はわかりません)。
設定しようとする他の値はありますか?
key_buffer_size が8GBあるとおっしゃっていました。
質問:本当に8 GBのMyISAMインデックスがありますか?
このクエリを実行してください
SELECT
KBS/power(1024,0) KBS_BB,
KBS/power(1024,1) KBS_KB,
KBS/power(1024,2) KBS_MB,
KBS/power(1024,3) KBS_GB
FROM
(
SELECT SUM(index_length) KBS
FROM information_schema.tables
WHERE engine='MyISAM' AND table_schema NOT IN
('information_schema','performance_schema','mysql')
) A;
これにより、key_buffer_sizeの大きさがになる必要があることがわかります(すべてのMYIページがロードされた場合)。現実的な画像を取得するには、以下を実行してください。
SELECT
FLOOR((A.variable_value * B.variable_value)/power(1024,2)+0.5) KBS_USED_IN_MB
FROM
information_schema.global_variables A,
information_schema.global_status B
WHERE
A.variable_name = 'key_cache_block_size' AND
B.variable_name = 'Key_blocks_used'
;
これにより、key_buffer_sizeが使用されているMB数(メガバイト)がわかります。これを最も近いGBに切り上げる必要があります。
5MB
は innodb_log_file_size のデフォルトサイズです。 Perconaの mysqlperformanceblog.com は、特定のMySQLインスタンスの適切なサイズの計算に関する2つの優れた記事を提供しています。
基本的に、ブログでは、1時間でInnoDBログファイルに書き込まれるバイト数を測定することをお勧めしています。これは私がそれを理解するために実行するものです
SET @TimeInterval = 3600;
SELECT variable_value INTO @num1 FROM information_schema.global_status
WHERE variable_name = 'Innodb_os_log_written';
SELECT SLEEP(@TimeInterval);
SELECT variable_value INTO @num2 FROM information_schema.global_status
WHERE variable_name = 'Innodb_os_log_written';
SET @ByteWrittenToLog = @num2 - @num1;
SET @KB_WL_HR = @ByteWrittenToLog / POWER(1024,1) * 3600 / @TimeInterval;
SET @MB_WL_HR = @ByteWrittenToLog / POWER(1024,2) * 3600 / @TimeInterval;
SET @GB_WL_HR = @ByteWrittenToLog / POWER(1024,3) * 3600 / @TimeInterval;
SELECT @KB_WL_HR,@MB_WL_HR,@GB_WL_HR;
@MB_WL_HR
、半分にして、innodb_log_file_sizeのサイズを変更します。私の投稿を参照してください MySQLのinnodb変数「innodb_log_file_size」を安全に変更する方法?