序文
最近の記事はすべて、mysqlパフォーマンスチューニングの関連コンテンツに関するものです。前の3つの記事では、それぞれ、インデックスの関連知識、 mysqlでのビューとトリガーの実装、およびmysqlのストアドプロシージャとストアド関数の関連知識を紹介しました。次の記事では、最初にmysqlのアーキテクチャを紹介します。これにより、mysqlの内部構造と動作原理をさらに理解し、mysqlのいくつかの一般的なストレージエンジンの違いと特定の使用法を紹介します。
まず、mysqlのアーキテクチャを紹介します。
1つはMysqlアーキテクチャです
mysqlアーキテクチャはmysql操作の主要部分です。mysqlの原則をよりよく理解し、mysqlを最適化する際の優れた基盤を築くには、そのアーキテクチャを理解する必要があります。次の図は、mysqlのアーキテクチャの概略図です。
この図から、MySQLサーバー全体が次の部分で構成されていることがはっきりとわかります。
- 接続プール:接続プールコンポーネント
- 管理サービスとユーティリティ:管理サービスとユーティリティ
- SQLインターフェイス:SQLインターフェイスコンポーネント
- パーサー:クエリアナライザコンポーネント
- オプティマイザー:オプティマイザーコンポーネント
- キャッシュとバッファ:キャッシュプールコンポーネント
- プラグ可能なストレージエンジン:ストレージエンジン
- ファイルシステム:ファイルシステム
上記のMySQLServerのさまざまな部分の紹介を通じて、誰もがそのアーキテクチャを一般的に理解していると思います。次に、各部分の具体的な詳細を紹介します。
- 接続層
接続層はアーキテクチャの最上位層であり、主にローカルソックス通信やクライアント/サーバー(C / S)ツールに基づくほとんどのTCP / IPのような通信を含むいくつかのクライアントおよびリンクサービスを提供します。これは主に、いくつかの同様の接続処理、承認認証、および関連するセキュリティスキームを完了します。この層では、認証と安全なアクセスを通過するクライアントにスレッドを提供するために、スレッドプールの概念が導入されています。SSLベースのセキュアリンクもこのレイヤーに実装されています。サーバーは、安全にアクセスする各クライアントに対する操作権限も確認します。 - サービス層の
第2層のアーキテクチャは、主にSQLインターフェイスなどのコアサービス機能のほとんどを完了し、キャッシュクエリ、SQL分析と最適化、およびいくつかの組み込み関数の実行を完了します。プロシージャや機能など、すべてのクロスストレージエンジン機能もこのレイヤーに実装されます。この層で、サーバーはクエリを解析して対応する内部解析ツリーを作成し、テーブルのクエリ順序の決定、インデックスを使用するかどうかなどの対応する最適化を完了し、最後に対応する実行操作を生成します。selectステートメントの場合、サーバーは内部クエリもクエリします。キャッシュスペースが十分に大きい場合、多数の読み取り操作を解決する環境でシステムのパフォーマンスを大幅に向上させることができます。 - エンジン層
ストレージエンジン層。ストレージエンジンはMySQLでのデータの保存と抽出を実際に担当し、サーバーはAPIを介してストレージエンジンと通信します。ストレージエンジンが異なればストレージ機能も異なるため、ニーズに応じて適切なストレージエンジンを選択できます。 - ストレージレイヤー
データストレージレイヤーは、主にファイルシステムにデータを保存し、ストレージエンジンとの対話を完了します。
上記は、MySQLデータベースアーキテクチャの各レイヤーの主な機能です。他のデータベースと比較して、Mysqlには独自の独自性があります。そのアーキテクチャは、さまざまなシナリオに適用でき、優れた役割を果たします。主にストレージエンジンに反映されるプラグインストレージエンジンアーキテクチャは、クエリ処理を他のシステムタスクおよびデータの保存と抽出から分離します。このアーキテクチャは、ビジネスニーズと実際のニーズに応じて適切なストレージエンジンを選択できます。次に、ストレージエンジンの関連コンテンツを紹介します。
第二に、ストレージエンジン
1.ストレージエンジンの概要
ほとんどのデータベースとは異なり、MySQLにはストレージエンジンの概念があり、さまざまなストレージ要件に最適なストレージエンジンを選択できます。実際、ストレージエンジンは、データの保存、インデックスの作成、データの更新とクエリ、およびその他のテクノロジーを提供する方法です。ストレージエンジンはテーブルベースであり、ライブラリベースではありません。したがって、ストレージエンジンはテーブルタイプとも呼ばれます。OracleやSqlServerなどのデータベースには、ストレージエンジンが1つしかありません。MySQLは、プラグインストレージエンジンアーキテクチャを提供します。したがって、MySQLにはさまざまなストレージエンジンがあり、対応するエンジンに基づいてストレージエンジンを作成できます。
MySQL 5.0でサポートされるストレージエンジンは、InnoDB、MyIAM、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATEDなどです。これらの中で、InnoDBとBDBはトランザクションセーフテーブルを提供し、その他のストレージエンジンは非トランザクションセーフテーブルです。
次に、エンジンを指定することにより、現在のデータベースでサポートされているストレージエンジンにクエリを実行できます。具体的なコマンドは次のとおりです。
show engines;
MySQLでサポートされているストレージエンジンは次のとおりです。
ここで注意する必要があるのは、新しいテーブルを作成するときに、ストレージエンジンを指定しない場合、システムはデフォルトのストレージエンジンを使用することです。mysql5.5より前のバージョンでは、デフォルトのストレージエンジンはMyISAMです。5.5以降、デフォルトのストレージエンジンはInnoDBになりました。次に、ストレージエンジンのさまざまな機能を紹介します。
2.さまざまなストレージエンジン機能
先ほどMysqlの主要なストレージエンジンを紹介し、次にこれらのストレージエンジンの特徴を紹介します。まず、主要なストレージエンジン全体の違いを理解しましょう。
2.1 InnoDB
InnoDBストレージエンジンは、Mysqlのデフォルトのストレージエンジンです。InnoDBストレージエンジンは、コミット、ロールバック、およびクラッシュリカバリ機能を備えたトランザクションセキュリティを提供します。ただし、MyISAMのストレージエンジンと比較すると、InnoDBの書き込みは効率が低く、データとインデックスを保持するためにより多くのディスク領域を使用します。
InnoDBストレージエンジンは、他のストレージエンジンとは機能が異なります。
- トランザクション制御のために、
最初にgoods_innodbテーブルを作成します。
create table goods_innodb(
id int not NULL AUTO_INCREMENT,
name varchar(20) NOT NULL,
primary key(id)
)ENGINE=innodb DEFAULT CHARSET=utf8;
次に、トランザクション制御に上記のgoods_innodbテーブルを使用します。
start transaction;
insert into goods_innodb(id, name) values(null, 'Meta40');
commit;
達成された効果は次のとおりです。
- 外部キーの制約
MySQLは、外部キーをサポートするストレージエンジンとしてInnoDBのみをサポートします。外部キーを作成する場合、親テーブルには対応するインデックスが必要です。外部キーを作成する場合、対応するインデックスもワードテーブルに自動的に作成されます。次に、country_innodbが親テーブル、city_innodbが子テーブル、country_idフィールドがcountry_innodbテーブルの主キーcountry_idに対応する外部キーである2つのテーブルを作成します。2つのテーブルの対応する情報は次のとおりです。
create table country_innodb(
country_id int NOT NULL AUTO_INCREMENT,
country_name varchar(100) NOT NULL,
primary key(country_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table city_innodb(
city_id int NOT NULL AUTO_INCREMENT,
city_name varchar(50) not NULL,
country_id int NOT NULL,
primary key(city_id),
key idx_fk_country_id(country_id),
CONSTRAINT `fk_city_country` FOREIGN KEY(country_id) REFERENCES country_innodb(country_id) ON DELETE
RESTRICT ON UPDATE CASCADE
)ENGINE= InnoDB DEFAULT CHARSET=utf8;
次の作成プロセスは上記の表と同様です。したがって、スペースを節約するために、グラフィックに直接置き換えることができます。
次に、次の2つの表のデータを挿入します。
insert into country_innodb values(null, 'China'),(null,'America'),(null,'Japan');
insert into city_innodb values(null, 'xian', 1),(null,'NewYork', 2),(null,'BeiJing', 1);
インデックスを作成するときに、親テーブルを削除または更新するときに、RESTRICT、CASCADE、SET NULL、NOACTIONなどの対応する操作を子テーブルに指定できます。
- RESTRICTとNOACTIONは同じです。つまり、子テーブルに関連レコードがある場合、親テーブルを更新することはできません。
- CASCADEは、親テーブルが更新または削除されると、子テーブルに対応するレコードが更新または削除されることを意味します。
- SET NULLは、親テーブルが更新または削除されたときに、子テーブルに対応する列がSETNULLであることを意味します。
上記で作成した2つのテーブルの場合、サブテーブルの外部キーはON DELETE RESTRICT ON UPDATE CASCADEとして指定され、メインテーブルがレコードを削除するときに、サブテーブルに対応するレコードがある場合、削除は許可されません。メインテーブルが更新されています記録時に、サブテーブルに対応するレコードがある場合、それに応じてサブテーブルが更新されます。データをクエリすることで、特定の結果を確認できます。
select * from city_innodb;
select * from country_innodb;
特定の表の情報は次のとおりです。
- 保管方法
次の2つの方法でのInnoDB店のテーブルとインデックスは:
①使用して、表スペース・ストレージの共有、この方法で作成したテーブルの構造が.frmファイルに保存されているが、データとインデックスはinnodb_data_home_dirを中に保存され、innodb_data_file_path表スペースに定義されています、複数のファイルにすることができます。
②マルチテーブルスペースストレージを使用すると、この方法で作成されたテーブル構造は.frmファイルに引き続き存在しますが、各テーブルのデータとインデックスは.idbに個別に保存されます。
2.2 MyISAM
以前にInnoDBを導入し、次にMyISAMを導入しました。MyISAMはトランザクションをサポートしていません。もちろん、外部キーもサポートしていません。その利点は、アクセス速度が速く、トランザクションの整合性を必要としないこと、または選択と挿入に基づくアプリケーションが基本的にこのエンジンを使用してテーブルを作成できることです。それらの中には、次の2つの重要な機能があります。
create table goods_myisam(
id int NOT NULL AUTO_INCREMENT,
name varchar(20) NOT NULL,
primary key(id)
)Engine=MyISAM DEFAULT CHARSET=utf8;
start transaction;
insert into goods values(null, '电脑3');
rollback;
具体的な内容は次のとおりです。
上記の実験から、myisamストレージエンジンにトランザクション制御がないことがわかります。
- ファイルの保存方法
各MyISAMはディスクに3つのファイルとして保存され、ファイル名はテーブル名と同じですが、拡張子は次のとおりです。
- .frm:ストレージテーブルの定義
- .MYD:MyData、データを保存
- .MYI:MyIndex、ストレージインデックス
2.3メモリ
メモリストレージエンジンは、テーブルデータをメモリに保存します。各メモリテーブルは実際にはディスクファイルに対応し、形式は.frmで、テーブルの構造のみが保存され、そのデータファイルはメモリに保存されます。これにより、データの迅速な処理が可能になり、効率が向上します。テーブル全体の。MEMORYタイプのテーブルアクセスは、データがメモリに格納され、デフォルトでハッシュインデックスが使用されるため非常に大きくなりますが、サービスが閉じられると、テーブル内のデータは失われます。
2.4マージ
MERGEストレージエンジンは、一連のMyISAMテーブルの組み合わせです。これらのMyISAMテーブルは、まったく同じ構造である必要があります。MERGEテーブル自体はデータを格納しません。MERGEテーブルに対してクエリ、更新、および削除操作を実行できます。これらの操作は次のとおりです。実際には、内部MyISAMテーブルで続行します。MERGEタイプのテーブルの挿入操作の場合、挿入されるテーブルはINSERT_METHOD句で定義されます。3つの異なる値があります。FIRSTまたはLASTの値が使用されるため、挿入操作は最初または最後のテーブルに適用されます。定義されていませんこの句はNOとして定義されている可能性があります。これは、MERGEテーブルで挿入操作を実行できないことを意味します。MERGEテーブルに対してDROP操作を実行できますが、この操作はMERGEテーブルの定義を削除するだけであり、内部テーブルには影響しません。テーブル間の関係は次のとおりです。MERGEテーブル
を作成して使用するには、次のケースを使用します
。1。最初に、3つのテストテーブルpayment_2006、payment_2007、payment_allを作成します。前に作成したのでテーブルの場合次に、記事の長さのため、テーブルの作成と挿入のプロセスは写真に置き換えられます。テーブルを作成するための特定のコードは次のとおりです
。2。挿入するためのコードデータは次のとおりです
。3。データテーブルの作成と挿入は両方とも終了しました。次に、これら3つのテーブルのデータをそれぞれ確認します。
select * from order_1990;
select * from order_1991;
select * from order_all;
表のデータを図に示します。
3.ストレージエンジンの選択
ストレージエンジンを選択するときは、アプリケーションシステムの特性に応じて適切なストレージエンジンを選択する必要があります。複雑なアプリケーションシステムの場合、実際の状況に応じて、さまざまなストレージエンジンを組み合わせて選択することもできます。以下は、一般的に使用されるいくつかのストレージエンジンの使用環境です。
- InnoDB:mysqlのデフォルトのストレージエンジンであり、トランザクション処理アプリケーションに使用され、外部キーをサポートします。アプリケーションのトランザクション整合性に対する要件が比較的高く、同時条件下でのデータ整合性が必要であり、データ操作に挿入およびクエリの事故に加えて多くの更新および削除操作が含まれる場合は、InnoDBストレージエンジンがより適切な選択です。InnoDBストレージエンジンは、削除や更新によって引き起こされるロックを効果的に削減するだけでなく、トランザクションの完全な送信とロールバックを保証します。課金システムや金融システムなど、高いデータ精度を必要とするシステムには、InnoDBが最適です。
- MyIsam:アプリケーションが読み取り操作と挿入操作に基づいている場合、更新操作と削除操作はわずかであり、トランザクションの整合性と同時実行性の要件はそれほど高くないため、このストレージエンジンは非常に適しています。
- メモリ:すべてのデータをRAMに保存し、高速ポジショニングレコードやその他の同様のデータが必要な環境でいくつかのブロックへのアクセスを提供できます。MEMORYの欠点は、テーブルのサイズに制限があることです。大きすぎるテーブルはメモリにキャッシュできません。次に、保証するデータを復元できます。テーブル内のデータは、異常後に復元できます。データベースの終了。MEMORYテーブルは通常、アクセス結果をすばやく取得するために頻繁に更新されない小さなテーブルを更新するために使用されます。
- MERGE:一連の同等のMyISAMテーブルを論理的に結合し、それらをオブジェクトとして参照するために使用されます。MERGEテーブルの利点は、単一のMyISAMテーブルのサイズ制限を突破できることです。また、不合理なテーブルを複数のディスクに分散することで、MERGEテーブルのアクセス効率を効果的に向上させることができます。これは、データウェアハウジングなどのVLDB環境を格納するのに非常に適しています。
総括する
最近の記事では、関連するナレッジインデックスとビュー、トリガーとストアドプロシージャ、およびストアド関数を紹介した前の2つの記事のすべてのmysqlパフォーマンスについて説明します。この記事では、アーキテクチャmysqlを紹介します。したがって、内部構造とmysqlの動作原理、およびmysqlのいくつかの典型的なストレージエンジンの違いと特定の使用法も紹介します。したがって、mysqlは非常に重要なスキルです。コンピューター内のほとんどすべてのジョブにはmysqスキルが必要です。したがって、特別な習熟が必要です。人生は終わりがなく、闘いは終わりがありません。私たちは毎日一生懸命働き、一生懸命勉強し、常に能力を向上させ、何かを学ぶと信じています。いい加減にして!!!