ホームページ データベース mysql チュートリアル InnoDBデータベース最適化例の詳細説明

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

May 24, 2017 pm 01:53 PM
innodb mysql 最適化

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 サービスとして使用する場合は、このパラメーターのサイズを可能な限り増やすことができます。

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 パラメーターを通じて表示できます。

古いページと新しいページの交差点は、中間点と呼ばれます。 ユーザーがデータにアクセスすると、InnoDB はまず InnoDB キャッシュ内のデータを検索します。キャッシュ プールにデータがない場合、InnoDB はハードディスクからデータを InnoDB キャッシュ プールに挿入します。フルの場合、LRU アルゴリズムを使用して期限切れの古いデータがクリアされます


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缓存池预热的状态信息:


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

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

5. 实例详解mysql中init_connect方法

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

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? Jun 03, 2024 pm 08:11 PM

MySQL クエリのパフォーマンスは、検索時間を線形の複雑さから対数の複雑さまで短縮するインデックスを構築することで最適化できます。 PreparedStatement を使用して SQL インジェクションを防止し、クエリのパフォーマンスを向上させます。クエリ結果を制限し、サーバーによって処理されるデータ量を削減します。適切な結合タイプの使用、インデックスの作成、サブクエリの使用の検討など、結合クエリを最適化します。クエリを分析してボトルネックを特定し、キャッシュを使用してデータベースの負荷を軽減し、オーバーヘッドを最小限に抑えます。

PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? Jun 03, 2024 pm 12:19 PM

PHP で MySQL データベースをバックアップおよび復元するには、次の手順を実行します。 データベースをバックアップします。 mysqldump コマンドを使用して、データベースを SQL ファイルにダンプします。データベースの復元: mysql コマンドを使用して、SQL ファイルからデータベースを復元します。

PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? Jun 02, 2024 pm 02:26 PM

MySQLテーブルにデータを挿入するにはどうすればよいですか?データベースに接続する: mysqli を使用してデータベースへの接続を確立します。 SQL クエリを準備します。挿入する列と値を指定する INSERT ステートメントを作成します。クエリの実行: query() メソッドを使用して挿入クエリを実行します。成功すると、確認メッセージが出力されます。

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 Dec 09, 2024 am 11:42 AM

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? Jun 02, 2024 pm 02:13 PM

PHP で MySQL ストアド プロシージャを使用するには: PDO または MySQLi 拡張機能を使用して、MySQL データベースに接続します。ストアド プロシージャを呼び出すステートメントを準備します。ストアド プロシージャを実行します。結果セットを処理します (ストアド プロシージャが結果を返す場合)。データベース接続を閉じます。

PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? Jun 04, 2024 pm 01:57 PM

PHP を使用して MySQL テーブルを作成するには、次の手順が必要です。 データベースに接続します。データベースが存在しない場合は作成します。データベースを選択します。テーブルを作成します。クエリを実行します。接続を閉じます。

C++ プログラムの最適化: 時間の複雑さを軽減する手法 C++ プログラムの最適化: 時間の複雑さを軽減する手法 Jun 01, 2024 am 11:19 AM

時間計算量は、入力のサイズに対するアルゴリズムの実行時間を測定します。 C++ プログラムの時間の複雑さを軽減するためのヒントには、適切なコンテナー (ベクター、リストなど) を選択して、データのストレージと管理を最適化することが含まれます。クイックソートなどの効率的なアルゴリズムを利用して計算時間を短縮します。複数の操作を排除して二重カウントを削減します。条件分岐を使用して、不必要な計算を回避します。二分探索などのより高速なアルゴリズムを使用して線形探索を最適化します。

Oracleデータベースとmysqlの違い Oracleデータベースとmysqlの違い May 10, 2024 am 01:54 AM

Oracle データベースと MySQL はどちらもリレーショナル モデルに基づいたデータベースですが、Oracle は互換性、スケーラビリティ、データ型、セキュリティの点で優れており、MySQL は速度と柔軟性に重点を置いており、小規模から中規模のデータ セットに適しています。 ① Oracle は幅広いデータ型を提供し、② 高度なセキュリティ機能を提供し、③ エンタープライズレベルのアプリケーションに適しています。① MySQL は NoSQL データ型をサポートし、② セキュリティ対策が少なく、③ 小規模から中規模のアプリケーションに適しています。

See all articles