Server

InnoDBでauto_incrementの値が戻る?

投稿日:2017年3月8日 更新日:

はじめに

花粉症が辛い季節になりました。
花粉症も困りますが、本日は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

blog-page_footer_336




blog-page_footer_336




-Server
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

[WordPressのSEO対策]PageSpeed Insightsのスコアを上げる方法

1 はじめに2 現状のスコアと改善点を確認する3 ブラウザキャッシュを活用する4 圧縮を有効にする5 HTML/CCS/JavaScriptを縮小する6 画像を最適化する7 レンダリングをブロックして ...

CircleCIを使ってみた(RailsのRSpecとデプロイのサンプル)

1 はじめに2 導入するにあたって3 項目B4 補足4.1 開発環境とCI環境でdatabase.ymlが異なる5 さいごに はじめに 個人的に作成しているアプリケーションのCIツールとして、Circ ...

aws

Amazon ECSでGoアプリケーションのデプロイとALB設定をやる

1 はじめに2 独自ドメインを取得する2.1 ドメインを取得する2.2 証明書を取得する3 ALBからECSタスクにリクエストを流す3.1 ターゲットグループを作成する3.2 ALBを作成する3.3 ...

aws

Amazon ECSでGoのEchoサーバを立ち上げる

1 はじめに2 全体の流れ3 サービスの概要3.1 IAM(Identity and Access Management)3.2 VPC(Virtual Private Cloud)3.3 ECR(E ...

Docker上でTensorFlowのチュートリアルをやってみた

1 はじめに1.1 環境2 TensorFlowのコンテナを起動する3 チュートリアルをやってみた3.1 ソースコード4 さいごに はじめに こんにちは、最近個人的な勉強でPython、ディープラーニ ...

フォロー

blog-page_side_responsive

2017年3月
 1234
567891011
12131415161718
19202122232425
262728293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。