MySQL アドバンスト ストレージ エンジン

目次

1.MySQL アーキテクチャ

アーキテクチャ図

 各層の役割

2. ストレージエンジンの概要

2.1 現在のテーブルのストレージ エンジンを表示する

2.2 mysql でサポートされているストレージ エンジンをクエリする

2.3 InnoDB の概要

 2.4 MyISAM の概要

2.5 メモリの概要

3.ストレージエンジンの選択


1.MySQL アーキテクチャ

mysql アーキテクチャは主に上から下に、接続層 -> サービス層 -> エンジン層 -> ストレージ層の 4 つの層で構成されています。

アーキテクチャ図

 各層の役割

1. 接続層: 主に、いくつかの接続処理、認可認証、および関連するセキュリティ ソリューションを完了します。また、サーバーは、安全にアクセスする各クライアントに対してサーバーが持つ操作権限を検証します。

2. サービス層: 第 2 層のアーキテクチャは主に、SQL インターフェイスなどのほとんどのコア サービス機能を完了し、キャッシュされたクエリ、SQL 分析と最適化、およびいくつかの組み込み関数の実行を完了します。プロシージャ、関数など、すべてのクロスストレージ エンジン機能もこの層に実装されます。

3. エンジン層: ストレージ エンジンは、MySQL でのデータの保存と取得を担当し、サーバーは API を介してストレージ エンジンと通信します。ストレージエンジンが異なれば機能も異なるため、ニーズに応じて適切なストレージエンジンを選択できます。

4. ストレージ層: 主にファイル システムにデータを保存し、ストレージ エンジンとの対話を完了します。

2. ストレージエンジンの概要

ストレージ エンジンは、データの保存、インデックスの作成、データの更新/クエリなどのテクノロジの実装です。ストレージ エンジンはライブラリではなくテーブルに基づいているため、ストレージ エンジンはテーブル構造とも呼ばれます。

前にテーブルを作成したときにストレージ エンジンを指定しませんでしたが、mysql のデフォルトのストレージ エンジンは Innodb です。

2.1 現在のテーブルのストレージ エンジンを表示する

特定のテーブルのテーブル作成ステートメントを表示できます

show create table account;

 ENGINE フィールドは指定されたストレージ エンジンであるため、テーブルの作成時にこのフィールドに対応するストレージ エンジンを指定できます。

例えば:

create table sm(
    id int auto_increment primary key,
    name varchar(10)
)engine = 存储引擎名称;

2.2 mysql でサポートされているストレージ エンジンをクエリする

mysql でサポートされているストレージ エンジンをクエリするには、次のステートメントを使用できます。

show engines;

 エンジン: ストレージ エンジン名

サポート: 現在のデータベースがサポートしているかどうか

コメント: コメントの説明

トランザクション: トランザクションをサポートするかどうか

2.3 InnoDB の概要

InnoDB は、MySQL データベース管理システムで最も一般的に使用されるストレージ エンジンの 1 つであり、多くの高度な機能とパフォーマンスの最適化を提供し、トランザクション処理と高い同時実行負荷を処理するアプリケーションに特に適しています。

特徴:

  1. トランザクション サポート: InnoDB は、ACID (アトミック性、一貫性、分離性、耐久性) トランザクションをサポートするストレージ エンジンです。これは、特に金融取引やその他の重要なデータを処理する必要があるアプリケーションにおいて、データの整合性と一貫性が保証されることを意味します。

  2. 行レベル ロック: InnoDB は行レベル ロック (行レベル ロック) を使用して同時実行制御を実装し、複数のトランザクションが同じテーブルの異なる行に同時にアクセスできるようにします。 time without テーブル全体がロックされます。これにより、同時実行パフォーマンスが向上し、ロックの競合が減少します。

  3. 外部キー制約: InnoDB は、テーブル間の参照関係を確立してデータの整合性を維持できる外部キー制約をサポートしています。これにより、データベースは参照整合性チェックを実行し、親テーブルと子テーブル間の関係が一貫していることを確認できるようになります。

  4. データ キャッシュとインデックス キャッシュ: InnoDB は、データ キャッシュ (データ バッファ キャッシュ) を使用してテーブルにデータを保存し、インデックス キャッシュ (インデックス バッファ キャッシュ) を使用してインデックス データを保存します。これらのキャッシュにより、クエリのパフォーマンスが向上し、ディスク アクセスが削減されます。

  5. 自動クラッシュ リカバリ: InnoDB は自動クラッシュ リカバリ機能をサポートしており、データベースが異常にシャットダウンされた後、手動介入なしでデータベースを一貫した状態に自動的に復元できます。

  6. ホット バックアップのサポート: InnoDB はオンライン バックアップをサポートしており、データベースの実行中にダウンタイムなしでデータをバックアップできます。これはシステムの可用性を向上させるのに役立ちます。

  7. 複数バージョン同時実行制御 (MVCC): InnoDB は MVCC メカニズムを使用して、トランザクションを相互にブロックすることなく同時実行できるようにします。各トランザクションはデータベースの一貫したスナップショットを確認できるため、ダーティで反復不可能な読み取りの問題を回避できます。

  8. 適応ハッシュ インデックス: InnoDB は、ハッシュ インデックスを自動的に作成および管理して、等しい値の検索などの特定の種類のクエリ操作を高速化できます。

  9. 大容量データのサポート: InnoDB は大容量データ ストレージをサポートしており、大量のデータを保存する必要があるアプリケーションに適しています。

関連するファイル構造:

 InnoDB エンジンの各テーブルは、テーブル構造 (frm、sdi)、データ、インデックスを保存する xxx.ibd のようなテーブル スペース ファイルに対応します。

 2.4 MyISAM の概要

MyISAM エンジンは、MySQL の初期のデフォルト ストレージ エンジンです。

特徴:

  1. トランザクションはサポートされていません: MyISAM はトランザクションをサポートしていないため、厳密な ACID (アトミック性、一貫性、分離性、耐久性) トランザクション サポートを必要とするアプリケーションには適していません。これは、MyISAM テーブルで INSERT、UPDATE、または DELETE 操作を実行中にエラーが発生した場合、以前の状態にロールバックする方法がないことを意味します。

  2. テーブル レベルのロック: MyISAM はテーブル レベルのロック (テーブル レベル ロック) を使用して同時アクセスを制御します。つまり、1 つのトランザクションがテーブル内の行を変更すると、他のトランザクションはテーブル内の他の行を同時に変更できなくなり、ロックの競合やパフォーマンスの問題が発生する可能性があります。

  3. 全文検索のサポート: MyISAM ストレージ エンジンは全文検索をサポートしているため、テキスト検索が必要なアプリケーションに優れています。 MySQL のフルテキスト インデックスを使用すると、テキスト検索操作を高速化できます。

  4. 外部キーをサポートしていません: MyISAM は外部キー制約をサポートしていないため、テーブル間の参照関係を維持できません。これにより、データの整合性がある程度制限されます。

  5. 圧縮テーブルのサポート: MyISAM はテーブルレベルのデータ圧縮をサポートしており、データ ファイルのサイズを削減し、ディスク領域を節約できます。これは、大量の静的データを保存するテーブルに役立ちます。

  6. テーブル レベルのロックのサポート: MyISAM ではテーブル レベルの読み取りロックと書き込みロックが可能で、テーブルのバックアップや最適化などの特殊なケースを簡単に実行できます。ロックを解除すること。

  7. クラッシュ リカバリはサポートされていません: MyISAM には自動クラッシュ リカバリ メカニズムがありません。データベースがクラッシュしたりハードウェア障害が発生した場合は、テーブルを手動で修復する必要がある場合があります。

  8. 読み取り専用またはほとんど変更されないデータに適しています: トランザクションとテーブルレベルのロックはサポートされていないため、MyISAM は通常、読み取り専用またはほとんど変更されないデータに適しています。アーカイブデータ、ログデータなど

関連するファイル構造:

xxx.sdi: テーブル構造情報を格納します。

xxx.MYD: データを保存します

xxx.MYI: ストレージインデックス

2.5 メモリの概要

メモリ ストレージ エンジンは、MySQL データベース管理システムの特別なストレージ エンジンであり、「HEAP」ストレージ エンジンとしても知られています。他の一般的なストレージ エンジン (InnoDB、MyISAM など) とは異なり、メモリ ストレージ エンジンはデータをディスクではなくメモリに完全に保存するため、メモリ ストレージ エンジンは非常に高速になります。

メモリ エンジンのテーブル データはメモリに保存されますが、ハードウェアの問題や停電により、これらのテーブルは一時テーブルまたはキャッシュとしてしか使用できなくなります。

特徴:

  1. データはメモリに保存されます: メモリ ストレージ エンジンはテーブルのデータをメモリに保存します。つまり、テーブルの読み取りおよび書き込み操作は非常に高速です。これは、セッション キャッシュや一時テーブルなど、一時データへの高速アクセスが必要な状況に特に適しています。

  2. トランザクションはサポートされていません: メモリ ストレージ エンジンはトランザクションをサポートしていないため、ACID プロパティを必要とするアプリケーションには適していません。データベースがクラッシュしたりエラーが発生したりすると、データが失われる可能性があります。

  3. テーブル レベルのロック: メモリ ストレージ エンジンはテーブル レベルのロックを使用します。つまり、1 つの接続がテーブルの一部を変更すると、他の接続は同じテーブルの他の部分を変更できません。同時にテーブル。これにより、ロックの競合が発生する可能性があります。

  4. インデックス タイプがサポートされていません: メモリ ストレージ エンジンは基本的なインデックスをサポートしていますが、フルテキスト インデックスなどの一部の高度なインデックス タイプはサポートしていません。これにより、一部のクエリの効率が制限される可能性があります。

  5. 外部キー制約はサポートされていません: メモリ ストレージ エンジンは外部キー制約をサポートしていないため、テーブル間の参照関係を維持できません。

  6. データは永続的ではありません: データはメモリに保存されるため、データベース サーバーがシャットダウンまたはクラッシュすると、データは失われます。したがって、メモリ ストレージ エンジンは通常、永続的なストレージではなく、一時的なデータまたはキャッシュを保存するために使用されます。

  7. 一時データとキャッシュの場合: メモリ ストレージ エンジンは、頻繁に再構築する必要があるキャッシュ ストレージや一時データなど、データを迅速に読み書きする必要があるアプリケーションに適しています。 。 表面。

 関連するファイル構造:

xxx.sdi: テーブル構造情報を格納します。

3.ストレージエンジンの選択

ストレージエンジンの特性はそれぞれ異なりますので、実際の状況に応じて最適なストレージエンジンを選択するだけです。

  1. InnoDB ストレージ エンジン:

    • 適用可能なシナリオ: ほとんどのアプリケーション、特にトランザクションのサポートとデータの整合性を必要とするアプリケーションに適しています。
    • 利点: ACID トランザクション、行レベルのロック、外部キー制約をサポートしており、同時実行性とトランザクション処理が多いアプリケーションに適しています。
    • 注: 他のストレージ エンジンと比較して、InnoDB は通常より多くのメモリを必要とするため、適切なシステム リソースを構成する必要があります。
  2. MyISAM存储引擎

    • 適用可能なシナリオ: 静的データやログ データなど、読み取り専用データまたはほとんど変更されないデータに適しています。
    • 利点: 読み取りパフォーマンスが高く、トランザクションをサポートしていないアプリケーションでもその速度の恩恵を受けることができます。
    • 注: トランザクションとテーブルレベルのロックはサポートされていないため、同時書き込みとデータ整合性の要件が高いアプリケーションには適していません。
  3. Memory存储引擎

    • 適用可能なシナリオ: データの高速な読み取りと書き込みが必要なキャッシュまたは一時的なデータ ストレージに適しています。
    • 利点: データはメモリに保存され、読み取りと書き込みが非常に高速で、キャッシュや一時データ テーブルに適しています。
    • 注: トランザクションとテーブル レベルのロックはサポートされておらず、データは永続化されないため、データの長期保存が必要なアプリケーションには適していません。

ストレージ エンジンを選択する際には、次の要素を考慮することができます。

  • トランザクション要件: アプリケーションでトランザクションをサポートする必要がある場合 (金融トランザクションの処理やデータの一貫性の要求など)、InnoDB などのトランザクションをサポートするストレージ エンジンを選択する必要があります。 。

  • 同時実行要件: アプリケーションの同時実行要件を考慮してください。 InnoDB の行レベルのロックでは同時実行性が向上しますが、MyISAM のテーブル レベルのロックではパフォーマンスの問題が発生する可能性があります。

  • データの永続性: 永続的なデータ ストレージが必要な場合は、InnoDB などのデータの永続性をサポートするストレージ エンジンを選択する必要があります。データ損失が許容できる場合は、メモリ ストレージ エンジンがオプションになる可能性があります。

  • 読み取りおよび書き込みのパターン: 適切なストレージ エンジンを選択できるように、アプリケーションの読み取りおよび書き込みのパターンを理解します。たとえば、読み取り専用操作が頻繁に行われるアプリケーションの場合、MyISAM が合理的な選択となる可能性があります。

  • システム リソース: システムのメモリ、CPU、ディスク リソースに基づいてストレージ エンジンを選択します。ストレージ エンジンが異なれば、リソース使用に関する要件も異なります。

  • 全文検索要件: アプリケーションで全文検索機能が必要な場合は、全文インデックス作成をサポートしているため、通常は InnoDB よりも MyISAM の方が適しています

おすすめ

転載: blog.csdn.net/m0_64642443/article/details/133608276