ホームページ >データベース >mysql チュートリアル >InnoDBデータベース最適化例の詳細説明
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 キャッシュ プール (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 'innodb_old_blocks%';
+------------------------+-------+
| 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 '%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 キャッシュ プールにホット データをロードします。 <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 '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 | +---------------------------------------+-------------+
这里面的英语都比较简单,就不解释了。
四、InnoDB实时监控
mysql> show engine innodb status\G
<br>
【相关推荐】
1. Mysql免费视频教程
2. 详解innodb_index_stats导入数据时 提示表主键冲突的错误
3. 实例详解 mysql中innodb_autoinc_lock_mode
以上がInnoDBデータベース最適化例の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。