Naoya Murakami
visio****@gmail*****
2013年 8月 22日 (木) 15:59:20 JST
お世話になっております。村上です。 インデックスを無効にした状態で大量にデータをinsertし、 alter table enable keysをすると、大容量のインデックスが 一気に構築されます。 このとき、仮想メモリサイズを超えるインデックスを作ろうとすると、 mysqldがクラッシュします。 swapを大きくして、作成されるインデックスサイズよりも仮想メモリサイズを 大きくすることでmysqldがクラッシュすることを回避することができます。 しかしながら、事前にインデックスサイズを正確に見積もるのは難しく、 あらかじめ、swapを大きくするのを忘れると、データが破壊されて悲しい 思いをします。 仮想メモリサイズを超える場合には、データディレクトリ上に一時ファイル を作る等の挙動にしていただくことは可能でしょうか? こうすると、びくびくswapをでかめにとる必要がなくなるので、 ご検討いただけるとうれしいです。 なお、swapを大きくするという対応策があるので、検討の優先度が低くても 実現できなくても大丈夫です! ・groongaログ 2013-08-19 21:35:57.243693|n|dc11e700|flushed: 3223 encsize:1892227 2013-08-19 21:35:57.244116|n|dc11e700|nblocks=3224, update_buffer_size=57423251523 2013-08-19 21:36:18.862693|n|dc11e700|nterms=4 chunk=348 total=0KB ・・・ 2013-08-19 21:37:19.234557|n|dc11e700|nterms=304 chunk=143017 total=3695955KB 2013-08-19 21:37:26.867652|n|b6964720|mroonga 3.06 started. ・mysqldログ 130819 21:37:24 - mysqld got signal 11 ; このときは、実メモリ32G、swap8Gでした。 このあと、swapを数十GB足したらうまくインデックス構築できました。 以上、よろしくお願いします。