ホームページ  >  記事  >  データベース  >  InnoDBデータベース最適化例の詳細説明

InnoDBデータベース最適化例の詳細説明

Y2J
Y2Jオリジナル
2017-05-24 13:53:031295ブラウズ

InnoDB は、Mysql が膨大なデータ量を処理する場合に最大のパフォーマンスを発揮できるように設計されています。その CPU 効率は、おそらく他のディスクベースのリレーショナル データベース エンジンに匹敵しません。 Innodb は、大量のデータを扱う Web サイトやアプリケーションの間で非常に人気があります。その場合、最適化する必要はありません。答えは明らかです。もちろんそうではありません。 ! !

勉強計画は簡単に中断されますが、それをやり続けるのも簡単ではありません。最近、社内で事業の方向性を調整する会議があったので、NodeJSを学んでみようと提案しました。 NodeJS については以前から少し知っていましたが、詳しくは勉強していませんでした。 Node の構文は基本的にクライアント側の J と同じです。過去 6 か月間、クライアント側のものはほとんど開発されていません。 JS の基本的な知識は十分にありましたが、この知識については不慣れでした。知識は頻繁に使わないとすぐに忘れてしまうようです。そこで改めてJSの関連知識を復習してみました。 Nodeのサーバーとソケットの知識を学びました。 MySQL の計画は保留になり、午前中は食べたり飲んだり寝たりして、午後まで起きていました。それではさっそく、MySQL の最適化シリーズを続けてみましょう。今回は InnoDB の最適化項目を見てみましょう。 InnoDB のメイン

index

は、クラスター化インデックス、インデックスとデータの共通のテーブル スペースです。 InnoDB の場合、データはインデックスであり、インデックスはデータです。 InnoDB のキャッシュ メカニズムと MyISAM の最大の違いは、InnoDB がインデックスをキャッシュするだけでなく、データもキャッシュすることです。 1. InnoDB キャッシュ プール InnoDB バッファ プール (InnoDB バッファ プール) は、データ、インデックス、さらにはその他の管理データ (メタデータ、行レベルのロック) をキャッシュすることができます。 。 「innodb%pool%」などの show 変数を使用して、関連するパラメーター オプションを表示できます。

mysql> show variables like 'innodb%pool%';
+-------------------------------------+----------------+
| Variable_name            | Value     |
+-------------------------------------+----------------+
| innodb_additional_mem_pool_size   | 8388608    |
| innodb_buffer_pool_dump_at_shutdown | OFF      |
| innodb_buffer_pool_dump_now     | OFF      |
| innodb_buffer_pool_filename     | ib_buffer_pool |
| innodb_buffer_pool_instances    | 8       |
| innodb_buffer_pool_load_abort    | OFF      |
| innodb_buffer_pool_load_at_startup | OFF      |
| innodb_buffer_pool_load_now     | OFF      |
| innodb_buffer_pool_size       | 134217728   |
+-------------------------------------+----------------+

innodb_buffer_pool_size

innodb_buffer_pool_size は、InnoDB キャッシュ プール (InnoDBBufferPool) のサイズを設定するために使用されます。デフォルト値は、InnoDB の全体的なパフォーマンスに大きな影響を与えます。現在の MySQL サーバーが専用の場合 MySQL サービスとして使用する場合は、このパラメーターのサイズを可能な限り増やすことができます。 <br>

innodb_buffer_pool_instance

innodb_buffer_pool_instance のデフォルト値は 1 です。これは、InnoDB キャッシュ プールが 1 つの領域に分割されることを意味します。これは、InnoDB の同時実行パフォーマンスを向上させることができます。

innodb_Additional_mem_pool_size

データ ディクショナリやその他の内部データを保存するために InnoDB が使用するキャッシュ サイズを指定します。デフォルト値は 2M であり、このパラメータのサイズは適切に増加する必要があります。

2. InnoDB キャッシュ プールの内部構造

InnoDB は、データとインデックスをキャッシュするためにメモリ内にキャッシュ プールを維持します。キャッシュ プールは、非常に長いリンク リスト (

リスト

) として考えることができます。リンク リストは 2 つのサブリンク リストに分かれており、1 つのサブリンク リストには古いページ データが保存されます。他のサブリンク リストには、

new ページが保存されます。新しいページは、最近アクセスされたデータ ページです。古いページは、デフォルトでリンク リスト全体のサイズの 37% を占めます。これは、innodb_old_blocks_pct パラメーターを通じて表示できます。

mysql> show variables like &#39;innodb_old_blocks%&#39;;
+------------------------+-------+
| Variable_name     | Value |
+------------------------+-------+
| innodb_old_blocks_pct | 37  |
| innodb_old_blocks_time | 1000 |
+------------------------+-------+
古いページと新しいページの交差点は、中間点と呼ばれます。 ユーザーがデータにアクセスすると、InnoDB はまず InnoDB キャッシュ内のデータを検索します。キャッシュ プールにデータがない場合、InnoDB はハードディスクからデータを InnoDB キャッシュ プールに挿入します。フルの場合、LRU アルゴリズムを使用して期限切れの古いデータがクリアされます

<br> 3. InnoDB キャッシュ プールのウォームアップ。

MySQL サーバーが一定期間起動された後、InnoDB は頻繁にアクセスされるデータ (ビジネス データ、管理データ) を InnoDB キャッシュに置きます。つまり、InnoDB キャッシュ プールには頻繁にアクセスされるデータ (ホット データと呼ばれます) が格納されます。 )。 InnoDB キャッシュ プールのサイズが数十ギガバイトまたは数百ギガバイトの場合、MySQL を再起動する場合、以前の InnoDB キャッシュ プールのホット データを InnoDB キャッシュ プールにロードするとどうなるでしょうか。

InnoDB キャッシュ プールを予熱するために InnoDB 自体にのみ依存する場合、ビジネスが忙しいシステムの場合、長時間のハングアップは重大な運用上の事故であり、許容できません。幸いなことに、MySQL バージョン 5.6 は、サービスのシャットダウン時に、まずハードディスク内のホット データを InnoDB キャッシュにロードすることによってホット データをハードディスクに保存することをサポートしています。これにより、ウォームアップ時間が短縮され、ビジー状態の同時実行性が向上します。ビジネスの時間効率。

mysql> show variables like &#39;%innodb%pool%&#39;;
+-------------------------------------+----------------+
| Variable_name            | Value     |
+-------------------------------------+----------------+
| innodb_additional_mem_pool_size   | 8388608    |
| innodb_buffer_pool_dump_at_shutdown | OFF      |
| innodb_buffer_pool_dump_now     | OFF      |
| innodb_buffer_pool_filename     | ib_buffer_pool |
| innodb_buffer_pool_instances    | 8       |
| innodb_buffer_pool_load_abort    | OFF      |
| innodb_buffer_pool_load_at_startup | OFF      |
| innodb_buffer_pool_load_now     | OFF      |
| innodb_buffer_pool_size       | 134217728   |
+-------------------------------------+----------------+

innodb_buffer_pool_dump_at_shutdown

パラメータを有効にして MySQL サービスを停止すると、InnoDB キャッシュ内のホット データがハードディスクに保存されます。このパラメータがオンになっている場合、MySQL サービスの開始時に、MySQL はローカル ハードディスクから InnoDB キャッシュ プールにホット データをロードします。 <br>

innodb_buffer_pool_dump_now

默认关闭,如果开启该参数,停止MySQL服务时,以手动方式将InnoDB缓存池中的热数据保存到本地硬盘。

innodb_buffer_pool_load_now

默认关闭,如果开启该参数,启动MySQL服务时,以手动方式将本地硬盘的数据加载到InnoDB缓存池中,

innodb_buffer_pool_filename

如果开启InnoDB预热功能,停止MySQL服务是,MySQL将InnoDB缓存池中的热数据保存到数据库根目录下,默认文件名是这个参数的值。

开启InnoDB缓存后,可以使用如下命令查看当前InnoDB缓存池预热的状态信息:

<br>

show status like &#39;innodb_buffer%&#39;;
+---------------------------------------+-------------+
| Variable_name             | Value    |
+---------------------------------------+-------------+
| Innodb_buffer_pool_dump_status    | not started |
| Innodb_buffer_pool_load_status    | not started |
| Innodb_buffer_pool_pages_data     | 218     |
| Innodb_buffer_pool_bytes_data     | 3571712   |
| Innodb_buffer_pool_pages_dirty    | 0      |
| Innodb_buffer_pool_bytes_dirty    | 0      |
| Innodb_buffer_pool_pages_flushed   | 1      |
| Innodb_buffer_pool_pages_free     | 7973    |
| Innodb_buffer_pool_pages_misc     | 0      |
| Innodb_buffer_pool_pages_total    | 8191    |
| Innodb_buffer_pool_read_ahead_rnd   | 0      |
| Innodb_buffer_pool_read_ahead     | 0      |
| Innodb_buffer_pool_read_ahead_evicted | 0      |
| Innodb_buffer_pool_read_requests   | 1497    |
| Innodb_buffer_pool_reads       | 219     |
| Innodb_buffer_pool_wait_free     | 0      |
| Innodb_buffer_pool_write_requests   | 1      |
+---------------------------------------+-------------+

这里面的英语都比较简单,就不解释了。

四、InnoDB实时监控

mysql> show engine innodb status\G

<br>

【相关推荐】

1. Mysql免费视频教程

2. 详解innodb_index_stats导入数据时 提示表主键冲突的错误

3. 实例详解 mysql中innodb_autoinc_lock_mode

4. MySQL中添加新用户权限的实例详解

5. 实例详解mysql中init_connect方法

以上がInnoDBデータベース最適化例の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。