MySQLでtmp_table_sizeに満たない一時テーブルがディスクに書かれてしまう問題と対策

MySQLでtmp_table_sizeに満たない一時テーブルがディスクに書かれてしまう問題と対策

MySQLが稼働しているDBサーバの負荷が高まり、確認したところ、tmp_table_sizeに満たないサイズにもかかわらず、ディスク上に多数の一時テーブルが作成されてしまう現象に遭遇しました。

リファレンスを調べてみると、テーブル内にBLOBまたはTEXTカラムがある場合や、特定条件下で512バイト以上の文字列を指定した場合、tmp_table_size以下であってもディスク上に一時テーブルが作られてしまう事が分かりました。

http://dev.mysql.com/doc/refman/5.6/ja/internal-temporary-tables.html

今回の場合、参照しているテーブルの一つにTEXTカラムが含まれている事が原因だったのですが、かなり使用箇所の多いテーブルだったため、TEXTカラムを切り離すのは影響範囲が大きく断念。

幸い、DBサーバの搭載メモリにかなり余裕があったので、大容量のRAMディスクを作成し、MySQLのtmpdirを作成したRAMディスクに向ける事で、一時テーブルによるディスクIOとDBサーバの負荷軽減に成功しました。

TAG

  • このエントリーをはてなブックマークに追加
福ちゃん
プロジェクトマネージャー 福ちゃん fukuchan

PM兼、SE兼、雑用係。 プログラムを書く機会はめっきり減ってしまったので、DBやインフラに関する記事を書いていきます。 子育て、筋トレ、資産運用、鳥取県のPRに関心があります。