概要
タイトルの通り。
ただし、後でわかったのだが、この件数減少は表面上の一時的な現象だった模様。
結論
待てばよし。
発生状況詳細
数億レコード規模のテーブルを扱っていたのだけれど、訳あってテーブル名変更することになった。
状況は以下の通り。
- MySQLWorkbenchを使っていた
- テーブル名変更前は、レコードが数億件レベルで存在することを確認済み
- そのテーブルはpartition分割されていた
- Renameを実施したところ、レコード行数 (
Table rows:
)が一時的に0件
と表示された- これは、MySQLWorkbenchの
TableInspector
機能によるInfo
タブ画面上の表示件数
- これは、MySQLWorkbenchの
ちなみに、テーブル名変更のために実行したSQLは以下の通り。
RENAME TABLE <スキーマ名>.<テーブル名> TO <新テーブル名>;
/* Example */
RENAME TABLE staging_database.old_user TO user;
経過
- 最初はめちゃ慌てた
- 慌ててすぐに逆 Rename して、旧テーブル名に戻した (新テーブル名 --> 旧テーブル名)
- すると、レコードの件数は元の状態へとすぐに復活した
- しかし、落ち着いて再度 Rename を実行 (旧テーブル名 --> 新テーブル名)
- 際 Rename 後、 30分程度 待ったところ、8000万件近くまでレコード件数が回復(?)していた。
- さらにしばらく待つと、元のテーブルの件数にほぼ近い値に復旧 (ただし、なぜか完全には一致せず...)
補足
なお、partition側の TABLE_NAME
については、 親のテーブル名変更のタイミングで、自動的に新しいテーブル名に書き換わっていた。
なので、partition側の TABLE_NAME
を一つ一つ書き換えるとか、そういう面倒なことはしなくても大丈夫。
partitionの状況は以下のSQLで確認可能。
SELECT
TABLE_SCHEMA, TABLE_NAME, PARTITION_NAM,
PARTITION_ORDINAL_POSITION, TABLE_ROWS
FROM INFORMATION_SCHEMA.PARTITIONS
/* WHERE文は、必要なければ削除して実行してもOK */
WHERE TABLE_NAME = 'テーブル名' AND TABLE_SCHEMA = 'スキーマ名';
参考資料
partitionの情報確認をするためのSQLは、以下の記事に書かれていました。
感じたこと
こういう情報がどこにもなかったので、半日〜1日近くこの問題の対処をしてしまった。
ので、記事化した。
みんな、困った後解決したら、記事を書こう。