Nowhere主にWebまわりのエンジニア的なお仕事に関するようなことのあれこれ。この広告は、90日以上更新していないブログに表示しています。2011-04-27大きなサイズのデータをmyisamからinnodbに移行する検証をしたメモMySQLハマってなんとか解決したことや、現状困ったりしていることを書いてみる。前置き対象のデータ(現在1テーブル)は、約1億レコード、50G。引き続き膨張していくことが予想される。今はmyisamで運用。更新処理が非常に高負荷。ロックが発生するため、オンライン中の更新ができない。1日1回新旧のテーブルを置き換えることで更新。目指すところは、参照のパフォーマンスを落とさずにリアルタイム更新。テーブルを参照時の条件に沿う形で分割。更新する単位でパーティショニング。これにより参照&更新のパフォーマンスアップを狙う。myisamからinnodbにすることでロックなしでオンライン中の更新を実現にする。32Gibdata1、大きくなり過ぎ!myisamと違ってinnodbのデータファイル(ibdata1)はデフォルトでは一つにまとまっていて、何もしないとこれが際限なく大きくなる。db全体で100G程度のサイズ。データの更新などを繰り返すうちに200G以上にサイズが膨れ上がった。ibdata1だけで100G以上に。これを回避する方法は以下2つinnodb_data_file_pathにibdata1の最大サイズを指定するinnodb_file_per_tableを設定し、テーブルごとにデータファイルを作る。際限のない膨張は回避できたが、既に膨れ上がったibdataのサイズを縮小するのはけっこう大変。MySQLのInnoDBデータファイル「ibdata1」の最適化ただ、dump->drop->restoreだと時間がいくらあっても足りないので、innodbのテーブルのみ一度全部drop->ibdata1をrmで削除->innodbのテーブル再作成、という強引な手を使った。