この記事では、MySQL の InnoDB ストレージ エンジンについて詳しく説明します (コード例)。必要な方は参考にしてください。
InnoDB は MySQL のストレージ エンジン層に属し、プラグインの形式でデータベースに統合されます。 MySQL 5.5.8 以降、InnoDB がデフォルトのストレージ エンジンになります。 InnoDB ストレージ エンジンはトランザクションをサポートしており、その設計目標は主に OLTP アプリケーション向けです。その主な機能には、トランザクションのサポート、高同時実行性をサポートする行ロック設計、外部キーのサポート、自動クラッシュ回復、クラスター化インデックス構成テーブル構造などが含まれます。 (関連する推奨事項: MySQL チュートリアル )
システム アーキテクチャ
InnoDB ストレージ エンジンは、メモリ プール、バックグラウンド スレッド、およびメモリ プールの 3 つの部分で構成されます。ディスクストレージ。
#スレッド
InnoDB はマルチスレッド モデルを使用し、バックグラウンドで複数の異なるスレッドがさまざまなタスクの処理を担当しますマスター スレッドマスター スレッドはコア バックグラウンド スレッドであり、主にバッファ プール内のデータをディスクに非同期に更新してデータの一貫性を確保します。ダーティ ページの更新、マージされた挿入バッファ、UNDO ページのリサイクルなどが含まれます。 IO スレッド InnoDB ストレージ エンジンでは、書き込み IO リクエストを処理するために非同期 IO (Async IO) が広く使用されており、IO スレッドのジョブは主にこれらの IO リクエストのコールバックを担当します。 。 スレッドのパージトランザクションがコミットされた後、トランザクションで使用されていた UNDO ログは不要になる可能性があるため、割り当てられ使用された UNDO ページをリサイクルするには、スレッドのパージが必要です。 InnoDB は複数のパージ スレッドをサポートしており、UNDO ページのリサイクルを高速化し、CPU 使用率を高め、ストレージ エンジンのパフォーマンスを向上させることができます。 ページ クリーナー スレッドページ クリーナー スレッドは、マスター スレッドのダーティ ページ更新操作を置き換えるために使用され、元のマスター スレッドの作業とユーザー クエリ スレッドのブロックを軽減することです。 、InnoDB ストレージ エンジンのパフォーマンスがさらに向上します。メモリ
InnoDB ストレージ エンジンのメモリ構造SHOW VARIABLES LIKE 'innodb_buffer_pool_size' コマンドを使用して、バッファ プール構成を表示します。
mysql> SHOW VARIABLES LIKE 'innodb_buffer_pool_size' \G *************************** 1. row *************************** Variable_name: innodb_buffer_pool_size Value: 134217728 1 row in set (0.01 sec)バッファ プールにキャッシュされるデータ ページのタイプは、インデックス ページ、アンドゥ ページ、挿入バッファ、アダプティブ ハッシュ インデックス、InnoDB ロック情報、データ ディクショナリ情報など。インデックス ページとデータ ページはバッファ プールの大部分を占めます。 REDO ログ バッファリングバッファ プール内のページ データがディスクよりも新しい場合、新しいデータをディスクにフラッシュする必要があります。 InnoDB は、ログ先行書き込み戦略を使用してデータを更新します。つまり、トランザクションが送信されると、まず REDO ログ バッファが一定の頻度でリセット ログ ファイルに書き込まれ、次にダーティ ページが書き込まれます。チェックポイント メカニズムに従ってディスクにフラッシュされます。 REDO ログ バッファーを非常に大きく設定する必要はありません。通常、8M でほとんどのアプリケーション シナリオに対応できます。 REDO ログは、リフレッシュをトリガーする次の 3 つの状況をサポートします。
- #マスター スレッドは、REDO ログ バッファを毎秒 REDO ログ ファイルにフラッシュします
- # #各トランザクションがコミットされると、REDO ログ バッファは REDO ログ ファイルにフラッシュされます。
- REDO ログ バッファ プールの残りの領域が 1/2 未満になると、REDO ログ バッファはREDO ログ ファイルにフラッシュされます。ログ ファイルの作成
InnoDB ストレージ エンジンでは、メモリ管理が行われます。ヒープ方式で実行されるメモリと呼ばれる処理。一部のデータ構造自体のメモリを割り当てる場合、追加のメモリプールから適用する必要がありますが、この領域のメモリが不足する場合はバッファプールから適用されます。
InnoDB でサポートされているロックは次のとおりです:
##共有ロックと排他ロック- ##インテンション ロック
- レコード ロック
ギャップ ロック
自動インクリメント ロック
- インテンション共有lock : 特定の行の共有ロックを取得しようとしています
- 意図的排他ロック: 特定の行の排他ロックを取得しようとしています
トランザクション
ACIDトランザクションについて話すとき、トランザクションは OLTP としてのデータベースの最も重要な機能です。 ACID の特徴:- 原子性: トランザクションの最小作業単位 (すべて成功するかすべて失敗するか)
- 一貫性: 開始とトランザクションの終了 その後、データベースの整合性は破壊されません。
- 分離 (分離): 異なるトランザクションは相互に影響しません。4 つの分離レベルは RU (コミットされていない読み取り) です。 、RC (コミットされた読み取り)、RR (繰り返し読み取り)、SERIALIZABLE (シリアル化)
- Durability (耐久性): トランザクションが送信された後、データへの変更は、たとえトランザクションが送信されても永続的です。システム障害が失われることはありません
- Read Uncommitted Read
- Read Committed Read Committed
- Repeatable ReadRepeatable Read
- Serializable Serializable
- ダーティ リーディング
- Non-repeatable read
- ファントム リーディング
Repeatable ReadRepeatable Read
Repeatable Read、このレベルは、同じトランザクション内で同じレコードを複数回読み取った結果の一貫性を保証し、InnoDB ストレージ エンジンでのファントム読み取りと非繰り返し読み取りの両方を解決します。質問を読んでください。
InnoDB エンジンは、Next-Key Lock
を使用してファントム読み取りの問題を解決します。 Next-Key Lock
は、行ロックとギャップ ロックの組み合わせです。InnoDB がインデックス レコードをスキャンするとき、最初に行ロック (レコード ロック) をインデックス レコードに追加し、次にギャップを追加します。インデックス レコードの両側のギャップ。ギャップ ロックを追加すると、他のトランザクションはこのギャップ内のレコードを変更したり挿入したりできなくなります。
Serializable Serializable
Serializable はトランザクションを強制的にシリアルに実行することでファントム読み取りの問題を回避します。ただし、Serializable はデータの読み取り行ごとに実行されます。ロックされているため、多くのタイムアウトやロック競合の問題が発生する可能性があり、同時実行性が急激に低下するため、MySQL InnoDB での使用はお勧めできません。
#オープン トランザクション- BEGIN、BEGIN WORK、START TRANSACTION ## BEGIN コマンドを実行しても、実際には新しいトランザクションは開始されません。エンジン層 トランザクションは現在のスレッドにマークを設定するだけで、明示的に開かれたトランザクションを表します。
- START TRANSACTION READ ONLY
- MySQL サーバーがデータを変更する SQL を受信すると、そのトランザクションを直接拒否します。変更するとエラーが返されます。このエラーに対してはエンジン層には入りません。
- START TRANSACTION READ WRITE
- 現在のスレッドの読み取り専用ステータスが次の場合に、スーパー ユーザーが読み取り/書き込みトランザクションを開始できるようにします。真実。
- 一貫したスナップショットでトランザクションを開始
- ## トランザクションを開くと、エンジン層に入り、 readview
Undo ログ
- trx_t
- ) をグローバル トランザクション ID ジェネレーターに追加します。リンク リスト (
trx_serial_list
は、Undo をマークします。このトランザクションが UndoPage を 1 つだけ使用し、使用量が 3/4 ページ未満の場合は、これをマークします。ページは) のコミット トランザクション
TRX_UNDO_CACHED - です。条件が満たされず
insert undo
の場合、
TRX_UNDO_TO_FREEとしてマークされます。それ以外の場合、取り消しは更新取り消しであり、マークされます。
TRX_UNDO_TO_PURGEとして。
TRX_UNDO_CACHEDとマークされた取り消しは、エンジンによってリサイクルされます。
update undo - を
undo セグメント
undate undo を変更します。の
履歴リストに入れ、
rseg_history_len## をインクリメントします # (グローバル)。同時に、ページのTRX_UNDO_TRX_NO
を更新します。データが削除された場合は、delete_mark
をリセットし、
から - update_undo_list
から削除します。
trx_commit_in_memoryTRX_UNDO_CACHED
としてマークされている場合は、update_undo_cached
キュー## に追加します。 ##mtr_commit
(元に戻す/やり直しのログはパブリック バッファに書き込まれます) この時点で、ファイル レベルのトランザクションがコミットされます。この時点でクラッシュした場合でも、再起動後にトランザクションが送信されることが保証されます。次に行うことは、メモリ データ ステータスを更新することです ( ) -
から readview読み取り専用トランザクションでは、
readview
を変更するだけで済みます。 global リンク リストから削除し、 - trx_t
構造内の情報をリセットします。読み取り/書き込みトランザクションは、まずトランザクション ステータスを
読み取り専用トランザクションの場合は、直接返されますTRX_STATE_COMMITTED_IN_MEMORY
に設定し、すべての行ロックを解放し、rw_trx_list
、readview
からtrx_t
を削除する必要があります。グローバルreadview
リンク リストから削除されました。insert undo
がある場合は、ここで削除します。update undo
がある場合は、パージ スレッドを起動して、ゴミをクリーンアップします。 最後に、trx_t# の情報をリセットします。 ## 簡単にダウンロードできるように、トランザクションは
を使用してロールバックします。
-
##From
update undo と - insert undo
の間の最後の取り消しを検索し、この取り消しからロールバックを開始します
#update undo
の場合、削除対象としてマークされたレコードはクリーニング対象としてマークされ、更新されたデータは最も古いバージョンにロールバックされます。
insert undoの場合は、クラスター化インデックスとセカンダリ インデックスを直接削除します
すべての元に戻す操作がロールバックされたか、指定された元に戻す操作にロールバックされた場合は、元に戻すログを停止して削除します
インデックス
InnoDB エンジンは、インデックス構造として B ツリーを使用します。主キー インデックスのリーフ ノード データ フィールドには完全なフィールド データが格納され、非主キー インデックスのリーフ ノードには、そのフィールドを指す値データが格納されます。主キー。
上の図は、InnoDB メイン インデックス (データ ファイルでもあります) の概略図であり、リーフ ノードに完全なデータ レコードが含まれていることがわかります。このインデックスはと呼ばれます。クラスター化インデックス。 InnoDB のデータ ファイル自体は主キーによって集約されるため、InnoDB ではテーブルに主キーが必要です。明示的に指定されていない場合、MySQL システムはデータ レコードを一意に識別できるカラムを主キーとして自動的に選択します。列が存在しない場合、MySQL は InnoDB テーブルの主キーとして暗黙的なフィールドを自動的に生成します。このフィールドの長さは 6 バイトで、型は long です。
InnoDB の補助インデックス データ フィールドには、アドレスの代わりに、対応するレコードの主キーの値が格納されます。つまり、InnoDB のすべてのセカンダリ インデックスは、データ フィールドとして主キーを参照します。クラスター化インデックスの実装により、主キーによる検索が非常に効率的になりますが、補助インデックス検索ではインデックスを 2 回取得する必要があります。まず、補助インデックスを取得して主キーを取得し、次に主キーを使用して主キー内のレコードを取得します。索引。
以上がMySQL の InnoDB ストレージ エンジンの詳細な紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

データベースの最適化では、クエリ要件に従ってインデックス作成戦略を選択する必要があります。1。クエリに複数の列が含まれ、条件の順序が固定されている場合、複合インデックスを使用します。 2。クエリに複数の列が含まれているが、条件の順序が修正されていない場合、複数の単一列インデックスを使用します。複合インデックスは、マルチコラムクエリの最適化に適していますが、単一列インデックスは単一列クエリに適しています。

MySQLスロークエリを最適化するには、slowquerylogとperformance_schemaを使用する必要があります。1。LowerQueryLogを有効にし、しきい値を設定して、スロークエリを記録します。 2。performance_schemaを使用してクエリの実行の詳細を分析し、パフォーマンスのボトルネックを見つけて最適化します。

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

MySQL非同期マスタースレーブレプリケーションにより、BINLOGを介したデータの同期が可能になり、読み取りパフォーマンスと高可用性が向上します。 1)マスターサーバーレコードはBinlogに変更されます。 2)スレーブサーバーは、I/Oスレッドを介してBINLOGを読み取ります。 3)サーバーSQLスレッドは、BINLOGを適用してデータを同期させます。

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

MySQLのインストールと基本操作には、次のものが含まれます。1。mysqlをダウンロードしてインストールし、ルートユーザーパスワードを設定します。 2。sqlコマンドを使用して、createdatabaseやcreateTableなどのデータベースとテーブルを作成します。 3. CRUD操作を実行し、挿入、選択、更新、コマンドを削除します。 4.パフォーマンスを最適化し、複雑なロジックを実装するためのインデックスとストアドプロシージャを作成します。これらの手順を使用すると、MySQLデータベースをゼロから構築および管理できます。

Innodbbufferpoolは、データとインデックスページをメモリにロードすることにより、MySQLデータベースのパフォーマンスを向上させます。 1)データページは、ディスクI/Oを削減するためにBufferPoolにロードされます。 2)汚れたページは、定期的にディスクにマークされ、リフレッシュされます。 3)LRUアルゴリズム管理データページの排除。 4)読み出しメカニズムは、可能なデータページを事前にロードします。

MySQLは、インストールが簡単で、強力で管理しやすいため、初心者に適しています。 1.さまざまなオペレーティングシステムに適した、単純なインストールと構成。 2。データベースとテーブルの作成、挿入、クエリ、更新、削除などの基本操作をサポートします。 3.参加オペレーションやサブクエリなどの高度な機能を提供します。 4.インデックス、クエリの最適化、テーブルパーティション化により、パフォーマンスを改善できます。 5。データのセキュリティと一貫性を確保するために、バックアップ、リカバリ、セキュリティ対策をサポートします。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

メモ帳++7.3.1
使いやすく無料のコードエディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ホットトピック



