読者です 読者をやめる 読者になる 読者になる

悪あがきプログラマー

悪あがきを続けていきたい技術と書評なブログです。トレタでiOSエンジニアやってます。

ERROR /usr/local/mysql/bin/mysqld: The table 'xxxx_table' is full(パーティション)

MySQLでエラー発生です
ストレージエンジンはMyISAM
月毎にパーティショニングしているテーブルで発生です

エラーメッセージ

120815 9:52:49 [ERROR] /usr/local/mysql/bin/mysqld: The table 'xxxx_table' is full
120815 9:52:49 [ERROR] /usr/local/mysql/bin/mysqld: The table 'xxxx_table' is full
120815 9:52:49 [ERROR] /usr/local/mysql/bin/mysqld: The table 'xxxx_table' is full
120815 9:52:49 [ERROR] /usr/local/mysql/bin/mysqld: The table 'xxxx_table' is full
120815 9:52:49 [ERROR] /usr/local/mysql/bin/mysqld: The table 'xxxx_table' is full
120815 9:52:49 [ERROR] /usr/local/mysql/bin/mysqld: The table 'xxxx_table' is full
120815 10:16:36 [ERROR] /usr/local/mysql/bin/mysqld: The table 'xxxx_table' is full

データは3,000万件でデータ量1.5GB、インデックス1.5GBほど
上限?そんなばかな

ググってみるとMyISAMでは4GB上限があるとか
でもそれは昔の話でしょ?そんなばかな

壊れてるのか?と思いmyisamchkをしかけてみる

[xxxxx@xxxxxxxx ~]$ sudo /usr/local/mysql/bin/myisamchk /var/lib/mysql/xxxxxx_db/xxxx_table#P#p201208.MYI
Checking MyISAM file: /var/lib/mysql/xxxxxx_db/xxxx_table#P#p201208.MYI
Data records: 16777215 Deleted blocks: 0
myisamchk: warning: 1 client is using or hasn't closed the table properly

  • check file-size

myisamchk: warning: Datafile is almost full, 754974675 of 754974718 used

  • check record delete-chain
  • check key delete-chain
  • check index reference
  • check data record references index: 1

720MBをほぼ使い切っていてあと43Bしか残ってないと
1レコード45Bなので入らないわけだ

いやいや。。。

違うパーティションを見てみると720MB以上のファイルがある

むぅ。。

パーティションごとの情報を見れないかと色々あさってみる

select partition_name, data_length, max_data_length from information_schema.partitions where table_name = 'xxxx_table';

ビンゴ!

f:id:y_koh:20120815230943p:plain

8月のパーティションのMAX_DATA_LENGTHが720MBになってる
なぜかこれだけやたら低い

気づかなかったけど5月のパーティションもだ。。

とりあえずテーブルを作りなおして対応しました

結局のところMAX_DATA_LENGTHが変わってしまった(最初からこうだった?)原因はわからないまま

うーん、気持ち悪い