InnoDB は、Mysql が大量のデータを処理するときに最大のパフォーマンスが得られるように設計されています。その CPU 効率は、おそらく他のディスクベースのリレーショナル データベース エンジンに匹敵しません。 Innodb は、大量のデータを扱う Web サイトやアプリケーションの間で非常に人気があります。その場合、最適化する必要はありません。答えは明らかです。もちろんそうではありません。 ! !
勉強計画は簡単に中断されますが、それを継続するのも簡単ではありません。最近社内で会議があり、事業の方向性を調整する必要があり、NodeJSを学ぶことを勧められました。 NodeJS については以前から少し知っていましたが、詳しくは勉強していませんでした。 Node の構文は基本的にクライアント側 JS と同じです。過去 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_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 'innodb_old_blocks%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | innodb_old_blocks_pct | 37 | | innodb_old_blocks_time | 1000 | +------------------------+-------+
3. InnoDB キャッシュ プールのウォームアップ。
MySQL サーバーが一定期間起動された後、InnoDB は頻繁にアクセスされるデータ (ビジネス データ、管理データ) を InnoDB キャッシュに置きます。つまり、InnoDB キャッシュ プールには頻繁にアクセスされるデータ (ホット データと呼ばれます) が格納されます。 )。 InnoDB キャッシュ プールのサイズが数十ギガバイトまたは数百ギガバイトの場合、MySQL を再起動する場合、以前の InnoDB キャッシュ プールのホット データを InnoDB キャッシュ プールにロードするとどうなるでしょうか。
InnoDB キャッシュ プールを予熱するために InnoDB 自体にのみ依存する場合、ビジネスが忙しいシステムの場合、長時間のハングアップは重大な運用上の事故であり、許容できません。幸いなことに、MySQL バージョン 5.6 は、サービスのシャットダウン時に、まずハードディスク内のホット データを InnoDB キャッシュにロードすることによってホット データをハードディスクに保存することをサポートしています。これにより、ウォームアップ時間が短縮され、ビジー状態の同時実行性が向上します。ビジネスの時間効率。
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_dump_at_shutdown
パラメータを有効にして MySQL サービスを停止すると、InnoDB キャッシュ内のホット データがハードディスクに保存されます。默认是关闭的,如果开启该参数,启动MySQL服务时,MySQL将本地硬盘的热数据加载到InnoDB缓存池中。 innodb_buffer_pool_dump_now 默认关闭,如果开启该参数,停止MySQL服务时,以手动方式将InnoDB缓存池中的热数据保存到本地硬盘。 innodb_buffer_pool_load_now 默认关闭,如果开启该参数,启动MySQL服务时,以手动方式将本地硬盘的数据加载到InnoDB缓存池中, innodb_buffer_pool_filename 如果开启InnoDB预热功能,停止MySQL服务是,MySQL将InnoDB缓存池中的热数据保存到数据库根目录下,默认文件名是这个参数的值。 开启InnoDB缓存后,可以使用如下命令查看当前InnoDB缓存池预热的状态信息: 这里面的英语都比较简单,就不解释了。 四、InnoDB实时监控show status like 'innodb_buffer%';
+---------------------------------------+-------------+
| 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 |
+---------------------------------------+-------------+
mysql> show engine innodb status\G
以上がMySQL 最適化のための InnoDB 最適化コードの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。