https://bugs.mysql.com/bug.php?id=32917 の 5a587b6d2897e786b515d05a09b37ef81695dab7
の和訳
temp-pool
が有効になっている場合、本質的に一時テーブルを使うある種のクエリは一時テーブル用ファイル名の衝突によりクラッシュする可能性がある。
temp-pool
はLinuxにカーネルにおいて発生する問題を回避するため、一時テーブルのための異なるファイル名を減らすため、<tmp_file_prefix>_<pid>_<temp_pool_slot_num>
の3部分から成るファイル名を使った小さなプールから確保しようとする。ファイル名として使ったとき、temp_pool_slot_num
に一致するビットが temp-pool
のために管理されたビットマップにセットされる。再利用のため一時テーブルが削除された後にこれはクリアされる。
誤った条件下で create_tmp_table()
関数呼び出しが行われると、 free_tmp_table()
と bitmap_lock_clear_bit()
を呼び出してしまい、同じビットを2回クリアしてしまう。free_tmp_table()
はテーブルとファイルを削除し、同じ関数である bitmap_lock_clear_bit()
を呼び出すことでビットをクリアする。