2011-06-30

MySQL Got error 139 from storage engine.

現在、運用・保守しているシステムの本番環境にて以下のエラーが発生した。
環境:MySQL 5.1.47、innodb plugin 1.0.8
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs

開発環境で同様の操作を行うと以下のエラーが発生。
環境:MySQL 5.1.45、Built-In innodb
ERROR 1030 (HY000): Got error 139 from storage engine

いろいろ検索してみると以下のような原因でエラーが発生している模様。
  • InnoDBの行サイズの上限はページサイズの約半分で、デフォルトでは約8KB。
  • 可変長カラム(VARBINARY、VARCHAR、BLOB、TEXT)のデータは行の外部に保存されるが、先頭の768Bだけは行の内部に保存される。
  • 一つのテーブルに11個のTEXT型フィールドを作り、それぞれに768B以上のデータを入れようとすると、768 * 11 = 8448 > 8000 なので保存できない。

MySQLのリファレンスマニュアルにも「InnoDBテーブルにおける制限」として以下のように記載されていました。
MySQL 5.1 Reference Manual :: 13.6.14. Restrictions on InnoDB Tables
The maximum row length, except for variable-length columns (VARBINARY, VARCHAR, BLOB and TEXT), is slightly less than half of a database page. That is, the maximum row length is about 8000 bytes. LONGBLOB and LONGTEXT columns must be less than 4GB, and the total row length, including BLOB and TEXT columns, must be less than 4GB.

まとめ:行サイズについて
MySQL自体の上限は、64KB。しかし、BLOBのデータは他の領域に格納されるので含みません。さらに、ストレージエンジンごとに制限が存在する場合があります。
InnoDBは、テーブルスペースのページサイズの約半分でが上限となり、ページサイズのデフォルトは16KBなのでデフォルトの行サイズは約8KBとなります。ページサイズを変更することも出来ますが、MySQLをソースからコンパイルして、さらにテーブルスペースとログファイルを再作成する必要があります。ページサイズの変更を行うと、ページサイズの上限は64KBとなるので、その場合の1行の最大サイズは32KBとなります。ちなみに、MySQL Clusterは1行あたり最大8KBです。

設計を見直すか・・・

※また、本ページを作成するのに以下のサイトを参考にしました。
InnoDBの意外な制約: Got error 139 from storage engine | へびにっき
Nix::WebLab : Got error 139 from storage engine
MySQL :: MySQL 5.1 Reference Manual :: 13.6.14 Restrictions on InnoDB Tables

2011-06-29

MySQL Innodb pluginバージョン確認

MySQLのInnodb pluginのバージョン確認方法。
mysql> SELECT @@innodb_version;
+------------------+
| @@innodb_version |
+------------------+
| 1.0.8            |
+------------------+
1 row in set (0.00 sec)

2011-05-25

Lua インストール

phpのセッション管理をTokyo Tyrantで行いたい場合、有効期限切れのセッションを削除する必要がある。
その削除処理がLuaにて稼動するので、Luaをインストールする。

Luaインストール。
# cd /usr/local/src
# wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
# tar zxf lua-5.1.4.tar.gz
# cd lua-5.1.4
# make linux
# make install INSTALL_TOP=/usr/local/lua
「/usr/local/lua」にluaがインストールされているので動作確認のため以下のコマンドを実施。
# /usr/local/lua/bin/lua
以下のように表示されればOK。
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
>

2011-05-04

白夜行 (集英社文庫)

白夜行 (集英社文庫) 引用:Amazon

前作「秘密」で、温かくて切ない物語を紡いだ東野圭吾が、今回は読む者の心を冷え冷えと切なくさせる。 1973年に起こった質屋殺しがプロローグ。最後に被害者と会った女がガス中毒死して、事件は迷宮入りする。物語の主人公は、質屋の息子と女の娘だ。当時小学生だった二人が成長し、社会で“活躍”するようになるまでを、世相とともに描ききる。2人の人生は順風満帆ではなく、次々忌まわしい事件が降りかかる……。当然ミステリーだから謎が隠されているわけだが、真相は途中で暗示されてしまう。しかし謎の存在などどうでもよくなるほどのスケールの大きさが読後に残る。(石飛徳樹)

2011-05-03

容疑者Xの献身 (文春文庫)

容疑者Xの献身 (文春文庫) 引用:Amazon

天才数学者でありながら不遇な日日を送っていた高校教師の石神は、一人娘と暮らす隣人の靖子に秘かな想いを寄せていた。彼女たちが前夫を殺害したことを知った彼は、二人を救うため完全犯罪を企てる。だが皮肉にも、石神のかつての親友である物理学者の湯川学が、その謎に挑むことになる。ガリレオシリーズ初の長篇、直木賞受賞作。

2011-05-02

予知夢 (文春文庫)

予知夢 (文春文庫) 引用:Amazon

東野圭吾ほど、多彩な作品をおくりだす作家は珍しいだろう。デビュー作は、学園を舞台にした本格推理小説『放課後』(第31回江戸川乱歩賞)。第52回日本推理作家協会賞受賞の『秘密』では、ミステリーの形式を踏みながら家族の美しい情愛をせつなくつづった。クローン技術を題材にした『分身』や大型原子炉が危機に陥る『天空の蜂』などの社会派小説も生みだしている。作品ごとに、まったく違った味わいを読者に与えてくれるのだ。
本書は「探偵ガリレオ」シリーズ2作目。帝都大学理工学部物理学科助教授、探偵ガリレオこと湯川学が、摩訶不思議な事件を論理的に解決していく、本格推理短編集である。

素封家の屋敷に侵入者があった。犯人は27歳の青年。2階で眠っていた娘を襲おうとしたらしい。逮捕された犯人は、17年前、その少女と結婚する夢を見たという。夢に現れた少女が現実に存在するとは? 予知夢はあるのか?

ロマンチックにも感じられる第1章「夢想る(ゆめみる)」をはじめ、「霊視る(みえる)」「騒霊ぐ(さわぐ)」「絞殺る(しめる)」「予知る(しる)」の、全5作が収録されている。軽快な文章の中に凝縮された、オカルチックな題材と巧妙なトリック、明晰な推理と確固たる論理。本書はたぐい稀なるストーリーテラーである著者の技を堪能できる作品といえよう。(冷水修子)

2011-05-01

探偵ガリレオ(文春文庫)

探偵ガリレオ (文春文庫) 引用:Amazon

突然、燃え上がった若者の頭、心臓だけ腐った男の死体、池に浮んだデスマスク、幽体離脱した少年…警視庁捜査一課の草薙俊平が、説明のつかない難事件にぶつかったとき、必ず訪ねる友人がいる。帝都大学理工学部物理学科助教授・湯川学。常識を超えた謎に天才科学者が挑む、連作ミステリーのシリーズ第一作。