innodb_log_file_sizeに関するオンライン を読むと、
ログファイルの合計サイズは4GB未満である必要があります
それで、もっと大きくする必要がある場合はどうなりますか?
本やオンラインでは、innodb_log_file_sizeを少なくとも1時間分の書き込みに設定すると書かれています。
現在、2 GBの1 GBログファイルがあり、Innodb_os_log_written
を1時間計算すると、少なくとも10 GB必要になります。 2GBのログファイルでは、ピーク負荷時に20分の書き込みしか実行できません。
ティア!
数年前、私は innodb_log_file_size を2047Mに設定しました。これは、InnoDBの4GBの制限を超えずにトランザクションログファイルを作成できる最大数です。それは現在のバージョン(MySQL 5.5)にも当てはまると思います。 InnoDBは32ビット環境で動作するように設計されているため、4 GBの制限があることに注意してください。
Percona Serverのバイナリは、実際にはこの制限を超えています。 1つのインストールで4GBを innodb_log_file_size として見たと思います。そうです、4GBと言いましたib_logfile0
および4GB ib_logfile1
、**合計8GB **。ここに私の雇用主のクライアントの1つのDBサーバーからの現在のリストがあります:
[root@*** ~]$ ls -l /var/lib/mysql/ib*
-rw-rw---- 1 mysql mysql 2283798528 Jan 16 22:53 /var/lib/mysql/ibdata1
-rw-rw---- 1 mysql mysql 4294967296 Jan 16 22:52 /var/lib/mysql/ib_logfile0
-rw-rw---- 1 mysql mysql 4294967296 Jan 16 22:53 /var/lib/mysql/ib_logfile1
Mysqlにログインすると、次のウェルカムメッセージが表示されます。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 177401833
Server version: 5.1.45-51-log Percona SQL Server (GPL), XtraDB 10
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
したがって、Percona Server 5.1.45では、巨大なInnoDBトランザクションログを作成できます。 SO、Percona Server 5.5(XtraDBを使用)では、2 GBを超えるInnoDBログファイルを作成できると確信しています。
本当に大きなログファイル(> 2G)が必要な場合は、 XtraDBストレージエンジンを搭載したPerconaサーバー にアップグレードしてください。これはInnoDBの優れたドロップイン代替品です。
ログファイルが大きいほど、シャットダウンプロセスにかかる時間が長くなる可能性があります。私は以下をお勧めします:
[mysqld]
innodb_fast_shutdown=0
これにより、ibdata1に残っているコミットされていないトランザクションは、起動時のMySQLのクラッシュリカバリではなく、シャットダウン時にコミットされます。
あなたの最後の2つのコメントから、私へのあなたの質問は
負荷に対してinnodb_log_file_sizeが低すぎる-1時間未満の場合の欠点は何ですか?
頻繁にチェックポイントをディスクに書き込む必要があると思います。 InnoDBが ([〜#〜] mvcc [〜#〜] を処理するのが非常に面倒になる可能性があります トランザクション分離 。
ピーク時のトランザクション率に応じてInnoDBログファイルのサイズを適切に設定できます。私は以前これについて書きました: 48GB RAMを搭載したサーバー上の30GB InnoDBテーブルの適切なチューニング (セクションLog File Size
)。ここに私の以前の投稿からの抜粋があります:
5MB
は innodb_log_file_size のデフォルトサイズです。 Perconaの mysqlperformanceblog.com は、適切なサイズの計算に関する2つの優れた記事を提供しました特定のMySQLインスタンスの場合:
基本的に、ブログでは、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」を安全に変更する方法?