定期的にメンテしているWebアプリの、あるテーブル(マスタ系)にcsvデータをインポートするときに出たエラー。一度くらい見た記憶があったが、どんな対応をとったか忘れていたので、今回はメモを残す。
photo credit: Yuri Yu. Samoilov via photopin cc
サマリー
1.現象
2.原因と解決策
3.MyISAMとInnoDBの利点・欠点
1.現象
MySQLのテーブルにcsvをインポートしようとすると下記のエラー。
Got error 139 from storage engine
2.原因と解決策
テーブルがInnoDBであったのが原因。InnoDBの行サイズの上限はデフォルトでは約8000バイト。
varchar型などのテキストデータは先頭の768バイトのみ内部に保存され、それ以外は外部に保存される仕組み。
なのでvarchar型のフィールドを多く(X個)持つ場合、その先頭「768バイト * X」だけで8000バイトを超えてしまう場合があるので、そのような場合に上記エラーとなってしまう。
以下でMyISAMに変換することで、正常にcsvがインポートできる状態となる。
alter table my_table engine=MyISAM;
3.MyISAMとInnoDBの利点・欠点
MyISAM
- テーブルロック方式のため、気軽に更新をかけにくい(更新処理の期間は排他ロックされる)
- 壊れやすい(壊れたらrepare必要)
- 更新なしテーブルでは高速
- 全文検索に有利
InnoDB
- 壊れにくい(再起動だけでrepareできる)
- innodb_buffer_pool_sizeによるテーブルデータのキャッシュ管理
- 「よほどの理由がない限りはこっち」と言われている。
以上。
エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド
- 作者: 奥野幹也
- 出版社/メーカー: 技術評論社
- 発売日: 2010/06/12
- メディア: 大型本
- 購入: 16人 クリック: 204回
- この商品を含むブログ (31件) を見る
- 作者: 石田豊
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2005/03
- メディア: 単行本
- 購入: 22人 クリック: 439回
- この商品を含むブログ (35件) を見る
Webエンジニアのための データベース技術[実践]入門 (Software Design plus)
- 作者: 松信嘉範
- 出版社/メーカー: 技術評論社
- 発売日: 2012/03/09
- メディア: 単行本(ソフトカバー)
- 購入: 20人 クリック: 486回
- この商品を含むブログを見る