MySQLは,使いやすく,高いパフォマンスと拡張性を実現するという評価を勝得ています。MySQL 5.5よりも前では,MyISAM
がデフォルトのストレジエンジンでした。我々の経験上,ほとんどのユザはデフォルト設定を変更しませんでした。MySQL 5.5以上では,InnoDB
がデフォルトのストレジエンジンです。やはりほとんどのユザがデフォルト設定を変更しないと予想されます。ただし,InnoDB
を使用すれば,デフォルト設定でもユザがRDBMSから期待する利点(酸トランザクション,参照整合性,およびクラッシュリカバリが得られます。InnoDB
テーブルを使用してMySQLユーザー,DBA,または開発者としての生活を改善する方法を探ってみましょう。
ストレジエンジンの使用傾向
MySQLの成長期の1年目には,初期のWebベースのアプリケーションによって並列性と可用性の限界が押し広げられることはありませんでした。近年では,ハ。MySQLのパフォーマンスの限界を押し広げているユーザーは,信頼性やクラッシュリカバリに多くの関心を持っています。MySQLデタベスは,大規模で,高負荷で,強固で,分散型で,重要です。
InnoDB
は,このようなユザの最優先事項に対処します。ストレジエンジンの使用傾向は,より拡張可能なInnoDB
の方へシフトしています。MySQL 5.5は;InnoDB
をデフォルトのストレジエンジンにするための論理遷移リリスでした。
MySQLは,以前はMyISAM
テブルが必要だったユスケスへの対処に取り組み続けています。MySQL 5.6以上には,次のような特性があります。
InnoDB
は,全文
ereplicationンデックスタereplicationプを使用した全文検索を実行できます。詳細は,セクション14.2.13.3 " fulltext 10.1ンデックス"を参照してください。InnoDB
は,読み取り専用または読み取りが大半のワクロ,ドで,より適切に機能するようになりました。自動コミットモドでは,InnoDB
クエリに自動的な最適化が適用され,启动事务只读
という構文を使用すると,読み取り専用としてトランザクションに明示的にマクできます。詳細は,セクション14.13.14 " InnoDBの読み取り専用トランザクションの最適化"を参照してください。読み取り専用メディア上に配布されたアプリケションでは,
InnoDB
テブルが使用されるようになりました。詳細は,セクション14.3.1 "読み取り専用操作用のInnoDBの構成"を参照してください。
デフォルトのMySQLストレジエンジンとしてのInnoDBの重要性
MySQL 5.5.5以降,新しいテブル用のデフォルトのストレジエンジンはInnoDB
です。この変更は,新たに作成されたテ,ブルの中で,= MyISAM引擎
などの句を使用してストレジエンジンが指定されていないものに適用されます。MySQL 5.5は;MyISAM
が使用されているテブルがInnoDB
に切り替えることによる利点を得られるかどうかを評価するための論理ポ邮箱ントになる可能性があります。
MySQL内部仕様の一部が実装されているmysql
およびinformation_schema
デタベスでは,引き続きMyISAM
が使用されます。特に,付与テ,ブルを切り替えても,InnoDB
を使用できません。
InnoDBテブルの利点
MyISAM
テブルを使用しているが,技術的な理由でそれらに関与していない場合は,InnoDB
テブルを使用すると,さらに便利な点が数多く見。
ハードウェアまたはソフトウェアの問題が原因でサーバーがクラッシュした場合でも,その時点でデータベースに何が発生していたのかには関係なく,データベースの再起動後に特別なことは何もする必要がありません。
InnoDB
のクラッシュリカバリを使用すると自動的に,クラッシュ時の前にコミットされた変更はすべて完了し,処理中だったがコミットされなかった変更はすべて取り消されます。単に再起動し,終了した場所から続行するだけです。MySQL 5.1以前よりも大幅に高速になりました。テ
InnoDB
のバッファプルにキャッシュされます。頻繁に使用されるデタは,直接メモリから処理されます。このキャッシュは非常に数多くのタプの情報に適用され,これにより処理速度が大幅に上がります。その結果,専用のデタベ80%がInnoDB
のバッファプルに割り当てられます。関連デタをさまざまなテブルに分割すると,強制的に参照整合性が適用される外部キを設定できます。デタを更新または削除すると,ほかのテタも自動的に更新または削除されます。プライマリテーブル内に対応するデータが存在しないセカンダリテーブルにデータを挿入しようとすると,自動的に不正なデータが除外されます。
ディスク上またはメモリ内のデタが破損した場合は,偽のデタを使用する前に,チェックサムメカニズムによって警告が発行されます。
挿入,更新,および削除は,変更バッファリングと呼ばれる自動化メカニズムによって最適化されます。
InnoDB
では,同じテーブルへの並列読み取りおよび書き込みアクセスが許可されているだけでなく,ディスクI / Oが効率化されるように変更されたデータがキャッシュに入れられます。パフォマンスの利点は,長時間実行されるクエリブルだけに限定されません。同じ行が1のテブルから何度もアクセスされると,適応型ハッシュ邮箱ンデックスと呼ばれる機能に引き継がれ,ハッシュテーブルから読み取られたかのように,これらの検索がさらに高速になります。
InnoDBテブルのベストプラクティス
長期間InnoDB
を使用していれば,すでにトランザクションや外部キ。そうでない場合は,この章全体でこれらにいて参照してください。手短に言えば,次のとおりです。
もっとも頻繁にクエリが実行されるカラム(複数の場合あり)を使用しているすべてのテブルに,主キーを指定します。明示的な主キが存在しない場合は,自動邮箱ンクリメント値を指定します。
複数のテブルにある同じid値に基づいて,それらのテ,結合の概念を取り入れます。結合のパフォーマンスを高速にするには、結合カラム上に外部キを定義し,各テブル内でそれらのカラムを同じデタ型で宣言します。また,外部キーを使用すると,影響を受けるすべてのテーブルに削除または更新が反映され,親テーブルに対応するIDが存在しない場合は,子テーブル内のデータの挿入が回避されます。
自動コミットをオフにします。1秒間に何百回もコミットすると、パフォーマンスに上限が設定されます (これは、ストレージデバイスの書き込み速度で制限されます)。
関連するDML操作のセットを
开始事务
と提交
ステトメントで囲むことで,トランザクションにグルプ化します。頻繁にはコミットしたくない一方で,コミットなしで何時間も実行される插入
、更新
,または删除
ステトメントの巨大なバッチも発生させたくありません。锁表
ステトメントの使用を停止します。InnoDB
は,一度に同じテーブルへのすべての読み取りおよび書き込みを行うことで,信頼性や高パフォーマンスを犠牲にせずに,複数のセッションを処理できます。行のセットへの排他的な書き込みアクセス権を取得するには,选择……更新
という構文を使用して,更新対象の行のみをロックします。innodb_file_per_table
オプションを有効にして,単一の巨大なシステムテブルスペス内の代わりに,個別のファ。この設定は,テブルの圧縮および高速の切り捨てなどのその他の機能の一部を使用する際に必要となります。使用中のデタおよびアクセスパタンによって,
创建表
ステトメントで新しいInnoDB
テブルの圧縮機能 (ROW_FORMAT =压缩
からの利点が得られるかどうかを評価します。読み取りおよび書き込みの機能を犠牲にせずに,InnoDB
テブルを圧縮できます。オプション
——sql_mode = NO_ENGINE_SUBSTITUTION
を付けてサバを実行して,创建表
の引擎=
句で指定されたストレージエンジンで問題が発生した場合に,別のストレージエンジンを使用してテーブルが作成されないようにします。
InnoDBテブルに対する最近の改善点
テブルおよび関連付けられた。
以前よりも大幅に小さいパフォマンスや可用性への影響度で,ンデックスを作成および削除できます。
テブルの切り捨てが大幅に高速になり,
InnoDB
でのみ再使用される可能性のあるシステムテーブルスペース内の領域を解放するのではなく,オペレーティングシステムで再使用されるディスク領域を解放できます。动态
行フォーマットを使用することで,テーブルデータのストレージレイアウトがBLOBおよび長いテキストフィールドでより効率的になりました。INFORMATION_SCHEMA
テブルでクエリを実行することで,ストレジエンジンの内部動作をモニタできます。performance_schema
テブルでクエリを実行することで,ストレできます。パフォマンスに関して多くの改善点があります。特に,クラッシュリカバリ,つまりデータベースが再起動するときにすべてのデータを自動的に整合させる処理の速度および信頼性が向上しました(
InnoDB
ユザが従来経験してきた速度よりずっと高速です)。デタベスが大きいほど,大幅に速度が向上します。ほとんどの新しいパフォマンス機能は自動的です。そうでない場合でも,必要なことは,多くても構成オプションの値を設定するだけです。詳細は,セクション14.13 " InnoDBのパフォマンス"を参照してください。アプリケションコドで適用できる
InnoDB
固有のチュニング技術にいては,セクション8.5 " InnoDBテブルの最適化"を参照してください。上級ユザは,セクション14.12 " InnoDBの起動オプションおよびシステム変数"を再確認してください。
デフォルトのストレジエンジンとしてInnoDBを使用したテストおよびベンチマク
MySQL 5.1以前からMySQL 5.5以降へのアップグレードが完了する前でも,データベースサーバーまたはアプリケーションでデフォルトのストレージエンジンとして,InnoDB
が正常に動作するかどうかをプレビュできます。以前のMySQLリリスでデフォルトのストレジエンジンとしてInnoDB
を設定するには,コマンド行で——default-storage-engine = InnoDB
を指定するか,またはmy.cnf
ファ邮箱ルの(mysqld)
セクションにdefault-storage-engine = innodb
を追加してから,サバを再起動します。
デフォルトのストレージエンジンを変更しても,新たに作成されたテーブルしか影響を受けないため,アプリケーションのインストールおよび設定ステップをすべて実行して,すべてが正しくインストールされたことを確認します。次に,すべてのアプリケーション機能を実行して,データのロード,編集,およびクエリー機能がすべて動作することを確認します。テブルが一部のMyISAM
固有の機能に依存している場合は,エラが受信されます。エラを回避するには,= MyISAM引擎
句を创建表
ステトメントに追加します(たとえば,全文検索に依存するテブルは)InnoDB
テブルではなく,MyISAM
テブルにする必要があります)。
ストレジエンジンにいて慎重な決定を行わなかった場合に,特定のテブルがInnoDB
で作成されたときにどのように動作するのかをプレビュするには,テブルごとに修改表table_name =InnoDB;
コマンドを発行します。また,元のテーブルを配布せずに,テストクエリーおよびその他のステートメントを実行するには,次のようなコピーを作成します。
创建InnoDB_Table表SELECT * FROM MyISAM_Table;
MySQL 5.5以上には,非常に多くのInnoDB
のパフォーマンス拡張機能があるため,現実的なワークロードで完全なアプリケーションを使用したときのパフォーマンスについて正確な考察を得るには,最新のMySQLサーバーをインストールして,ベンチマークを実行してください。
完全なアプリケーションのライフサイクル(インストールから頻繁な使用まで),およびサーバーの再起動をテストします。電源障害のシミュレーションを行うために,データベースの負荷が高いときにサーバープロセスを強制終了し,サーバーの再起動時にデータが正常にリカバリされるかどうかを確認します。
特に,マスターおよびスレーブ上でさまざまなMySQLバージョンやオプションを使用している場合は,レプリケーション構成をテストします。
InnoDBがデフォルトのストレジエンジンであるかどうかの確認
古いMySQLを使用して假设テストを行うのか,最新のMySQLを使用して包括的なテストを行うのかに関係なく,InnoDB
のステタスを確認する方法は,次のとおりです。
显示引擎;
コマンドを発行して,さまざまなMySQLストレジエンジンをすべて表示します。InnoDB
行で默认的
を探します。InnoDB
がまったく存在しない場合は,InnoDB
のサポトなしでコンパmysqld
バereplicationナリがあるため,別のバereplicationナリを入手する必要があります。InnoDB
は存在するが,無効になっている場合は,起動オプションおよび構成ファ,ルまで戻って,すべてのskip-innodb
オプションを削除します。