web-dev-qa-db-ja.com

innodb_online_alter_log_max_sizeはRAMまたはハードディスクからメモリを取得しましたか

インデックスを追加するために巨大なテーブル(400 G)を変更しているときに、Mysql(5.7)エラーが発生しました。

ERROR 1799 (HY000): Creating index 'FTS_DOC_ID_INDEX' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.

innodb_online_alter_log_max_sizeを増やす必要があったと思いますが、RAMから取得している間は、すでに十分にいっぱいになっているため、増加していると思います。

N.B:tmpdirパスに十分なスペースがありました。

2
SWahi

私がマニュアルを読んだとき:

InnoDBテーブルのオンラインDDL操作中に使用される一時ログファイルのサイズの上限を指定します。作成されるインデックスまたは変更されるテーブルごとに、このようなログファイルが1つあります。このログファイルには、DDL操作中にテーブルに挿入、更新、または削除されたデータが格納されます。一時ログファイルは、必要に応じてinnodb_sort_buffer_sizeの値によって、innodb_online_alter_log_max_sizeで指定された最大値まで拡張されます。一時ログファイルがサイズの上限を超えると、ALTER TABLE操作が失敗し、コミットされていないすべての同時DML操作がロールバックされます。したがって、このオプションの値を大きくすると、オンラインDDL操作中に発生するDMLが増えますが、ログからのデータを適用するためにテーブルがロックされているDDL操作の最後の期間も延長されます。

これは、RAMではなくディスク領域を指します。そして、それは必要に応じて成長し、設定から開始されません。 innodb_online_alter_log_max_sizeは、使用可能なディスク領域よりも小さい値に設定する必要がありますが、それ以外の場合は小さすぎません。

innodb_sort_buffer_sizeデフォルトは1MBです。それを変更する理由はおそらくないでしょう。特定の操作では、これだけのスペースがRAMに割り当てられます。おそらくそれらの1つが(RAMで)テーブルの各インデックスに割り当てられます。

4
Rick James