Server

InnoDBでauto_incrementの値が戻る?

投稿日:

はじめに

花粉症が辛い季節になりました。
花粉症も困りますが、本日はMySQL関連で困って調べたことをまとめたいと思います。

タイトルですが、InnoDBだとDBを再起動した際にauto_incrementが最適化されてしまうとのこと。
すでに多くの知見があるようですが、今回は実際に試してみました。

5.5.9のリリースにて、最適化にてリセットされる問題は解消されたようですが、今回は試しにやってみたいと思います。
Changes in MySQL 5.5.9 (2011-02-07, General Availability)

準備

MySQLのバージョンは5.7.14になります。

とりあえず、テスト用のDBを作成します。

ストレージエンジンの一覧を見てみます。
現在はInnoDBがデフォルトですね。(というより、こんなにたくさんあるんですね。。。)

今回はInnoDBとよく比較されるMyISAMでも試したいと思います。
InnoDBとMyISAMの簡単な特徴は下記になります。

  • InnoDBはレコード単位でロックされるが、MyISAMはテーブル単位。
  • トランザクション機能がMyISAMにはない。
  • InnoDBはMyISAMに比べてデータサイズが大きくなる。
  • InnoDBは更新系、MyISAMは参照系が得意。

それでは実際にそれぞれのエンジンのテーブルを作成します。

実際に各テーブルのストレージエンジンはinformation_schemaに移動すれば見ることができます。

レコード作成

それぞれのテーブルにレコードを作成します。

とりあえず、2つレコードを削除しておきます。

テーブル最適化

それでは最適化してみます。
まずはInnoDBから。

およ、何かメッセージがでています。
どうやらInnoDBではoptimizeコマンドはALTER TABLEとして実行されるそうです。(その通知メッセージのようです。)
14.7.2.4 OPTIMIZE TABLE Syntax

続きましてMyISAMです。

それでは、再度インサートします。

最適化ではやはり戻らないですね。
次は再起動を試してみます。

MySQL再起動

それでは再起動後にインサートしてみます。
(再起動前はauto_incrementの値が13でした。)

InnoDBの方はauto incrementが戻っていました。
実際、テーブル情報を見ると、戻っていました。

さいごに

最適化では確認できませんでしたが、再起動ではInnoDBの方はauto_incrementの値が戻っておりました。
InnoDBではauto incrementのカラムをメモリ上のみに持ち、再起動のタイミングで以下で値を取得しているようです。

参考にさせていただいたリファレンス、記事

15.8.6 AUTO_INCREMENT Handling in InnoDB
【MySQL】AUTO_INCREMENTの値が戻る@InnoDBエンジンのテーブル
Changes in MySQL 5.5.9 (2011-02-07, General Availability)
MySQLの「InnoDB」と「MyISAM」についての易しめな違い
14.7.2.4 OPTIMIZE TABLE Syntax

age_footer_300rect




age_footer_300rect




-Server

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

MySQL 5.7 オプティマイザの改善〜UNION ALL〜

1 はじめに2 「UNION」と「UNION ALL」の違い3 MySQL 5.7での「UNION ALL」の改善とは4 MySQL 5.7での実行計画4.1 UNION ALL実行計画4.2 UNI …

WordPressのサーバ移設とnginxで無料SSLをやってみた

1 はじめに1.1 環境2 サーバー準備2.1 ConohaのVPSサーバーの契約2.2 sshログイン用のユーザーを作成2.3 必要なソフトウェアのインストール3 WordPressの移行3.1 D …

配牌からアガれるかアガれないか予測する

1 はじめに1.1 趣旨1.2 筆者のスペック1.3 環境1.4 機能概要2 実装に関して2.1 教師データ2.2 前処理2.3 各ノードの重みの学習3 実際に使ってみた3.1 再テスト4 学習させた …

同じレコードがないときだけインサートする!

はじめに あるアイテムを持っていない人だけ、別のアイテムをあげたい! もしくはその逆で、あるアイテムを持っている人に追加でアイテムをあげたい! そういうことってないでしょうか? 先日、僕がそのような状 …

DockerのQuickstart:Compose and Railsをやってみた

1 はじめに1.1 環境1.2 Docker for Macのインストール2 Railsプロジェクトを作成するまで2.1 Railsのプロジェクトディレクトリの作成2.2 Dockerfileの作成2 …

page_side_300rect






follow us in feedly

2017年3月
« 2月   4月 »
 1234
567891011
12131415161718
19202122232425
262728293031