Mysqlの同時パラメータ調整の詳細な説明

Mysqlの同時パラメータ調整の詳細な説明

クエリキャッシュの最適化

使用することはお勧めしません。通常、アプリケーション サービスのキャッシュ レイヤーとして使用されます。結局のところ、データの同時実行能力には制限があります。

概要

MySQL クエリ キャッシュを開始すると、同じ SQL ステートメントを実行すると、サーバーはキャッシュから結果を直接読み取ります。データが変更されると、以前のキャッシュは無効になります。頻繁に変更されるテーブルは、クエリ キャッシュには適していません。

クエリプロセス

1. クライアントがサーバーにクエリを送信します。 2. サーバーは最初にクエリ キャッシュをチェックします。キャッシュにヒットした場合は、キャッシュに保存されている結果をすぐに返し、ヒットしなかった場合は次の段階に進みます。 3. サーバーは SQL を解析して前処理し、オプティマイザーが対応する実行プランを生成します。 4. 生成された実行プランに従って、ストレージ エンジン API を呼び出してクエリを実行します。 5. 結果をクライアントに返し、クエリ結果をクエリ キャッシュに格納します。

クエリキャッシュ構成

データベースがクエリキャッシュをサポートしているかどうかを確認します (YES または ON)
	'have_query_cache' のような変数を表示します。
データベース クエリ キャッシュが有効になっているかどうかを確認します。'query_cache_type' などの変数を表示します。
	OFF または 0 クエリ キャッシュ機能がオフになっています。ON または 1 クエリ キャッシュ機能がオンになっており、キャッシュ条件を満たす SELECT 結果がキャッシュされ、そうでない場合はキャッシュされず、SQL_NO_CACHE が指定され、キャッシュは実行されません。DEMAND または 2 クエリ キャッシュ機能は要求に応じて実行され、SQL_CACHE を指定する SELECT ステートメントのみがキャッシュされ、その他はキャッシュされません。クエリ キャッシュのサイズを表示するには、「query_cache_size」などの変数を表示します。
キャッシュ ステータスを確認すると、「Qcache%」のようなステータスが表示されます。
		Qcache_free_blocks キャッシュで使用可能なメモリ ブロックの数 Qcache_free_memory キャッシュで使用可能なメモリの量 Qcache_hits クエリ キャッシュ ヒットの数 Qcache_lowmen_prunes メモリ不足のためクエリ キャッシュから削除されたクエリの数 Qcache_not_cached キャッシュされていないクエリの数 (query_cache_type 設定によりキャッシュできない)
		Qcache_queries_in_cache クエリキャッシュに登録されているクエリの数 Qcache_total_blocks クエリキャッシュ内のブロックの合計数 クエリキャッシュを有効にする mysql設定ファイルを見つけてmy.cnfを追加します query_cache_type=1を追加します
	クエリキャッシュはquery_cache_type=DEMANDで有効になります   
		テーブルからSQL_CACHE IDを選択
	クエリキャッシュはquery_cache_type=ONで有効になります    
		テーブルからSQL_NO_CACHE IDを選択

クエリキャッシュの無効化

SQL ステートメントの不整合: クエリ SQL に不確実な情報があります:
	now()、current_date()、curdate()、curtime()、rand()、uuid()、database() など
テーブル クエリ ステートメントを使用せずに、mysql、infomation_schema、または performance_schema データベース内のテーブルをクエリする場合、クエリ キャッシュは使用されません。挿入、更新、削除、ドロップなど、保存された関数、トリガー、またはイベントの本体内で実行されるクエリ テーブルの変更により、クエリ キャッシュが削除されます。

メモリ管理の最適化

メモリ最適化の原則

MySQL にキャッシュ用にできるだけ多くのメモリを割り当て、オペレーティングシステムやその他のプログラム用に十分なメモリを確保します。MyISAM ストレージ エンジンのデータ ファイルの読み取りは、オペレーティングシステム自身の IO キャッシュに依存します。そのため、MyISAM テーブルがある場合は、IO キャッシュのソート領域としてオペレーティングシステム用にさらに多くのメモリを確保する必要があります。接続領域およびその他のキャッシュは、各データベース セッションに割り当てられます。デフォルト設定は、最大接続数に応じて合理的に割り当てる必要があります。設定が大きすぎると、リソースを浪費するだけでなく、同時接続が多い場合にメモリ不足を引き起こします。

MyISAM メモリ最適化

myisam ストレージ エンジンは、key_buffer を使用してインデックス ブロックをキャッシュし、myisam インデックスの読み取りと書き込みを高速化します。 MySQLにはMyISAMテーブルのデータブロック用の特別なキャッシュメカニズムはなく、オペレーティングシステムのIOキャッシュkey_buffer_size=512Mに完全に依存しています。
	key_buffer_size の値が大きいほど、効率が高くなります。使用可能なメモリの少なくとも 1/4 を key_buffer_size に割り当てることをお勧めします。
'key_buffer_size' のような変数を表示し、key_buffer_size red_buffer_size のサイズを照会します
	MyISAM テーブルを頻繁に連続スキャンする場合は、read_buffer_size の値を増やすことでパフォーマンスを向上させることができますが、key_buffer_size は各セッション専用であるため、あまり増やさないでください。複数設定すると、リソースが無駄になります。
	ソートを頻繁に必要とする MyISAM テーブルに対するクエリの場合、SQL に order by 句が含まれていると、red_rnd_buffer_size の値を適切に増やすことで、そのような SQL のパフォーマンスを向上させることができます。これもセッション専用であり、あまり大きく設定することはできません。

InnoDB メモリ最適化

InnoDBはメモリ領域をIOバッファプールとして使用します。これは、InnoDBインデックスブロックをキャッシュするだけでなく、InnoDBデータブロックをキャッシュするためにも使用されます。 inodb_buffer_pool_size
	この変数は、innoDB ストレージ エンジンとインデックス データの最大キャッシュ サイズを決定します。オペレーティング システムとその他のプログラムに十分なメモリが確保されていることを前提として、値が大きいほどキャッシュ ヒット率が高くなり、innoDb テーブルへのアクセスに必要なディスク IO が少なくなり、パフォーマンスが向上します。innodb_buffer_pool_size=521M
innodb_log_buffer_size
	Innodb の再実行ログ バッファのサイズを決定します。大量の更新レコードを生成する可能性のある大規模なトランザクションの場合、innodb_log_buffer_size のサイズを増やすと、トランザクションがコミットされる前に Innodb がディスク IO に不要なログ書き込みを実行するのを回避できます。
	innodb_log_buffer_size=10M
'innodb_buffer_pool_size' のような変数を表示します。
innodb_flush_log_at_trx_commit
	InnoDB がログ バッファ内のデータをログ ファイルに書き込み、ディスクをフラッシュする時間を制御します。値は 0、1、2 です。
innodb_thread_concurrency
	同時実行可能な Innodb スレッドの数を設定します。デフォルト値は 0 で、無制限を意味します。innodb_log_buffer_size を設定する場合は、サーバーの CPU コア数と同じか、CPU コア数の 2 倍にすることをお勧めします。
	ログファイルの実行に使用されるメモリサイズ(M単位) innodb_log_files_in_group
	ログファイルを複数のファイルに循環的に書き込む read_buffer_size
	MySQLの読み取りバッファサイズ。テーブルのシーケンシャルスキャンの要求は読み取りバッファread_rnd_buffer_sizeに割り当てられます。
	MySQL ランダム読み取りバッファサイズ

接続の最適化

最大接続数

最大接続数。デフォルトは 151 ですが、Linux は通常、サーバー パフォーマンス評価に応じて 500 ~ 1000 をサポートできます (「max_connections」などの変数が表示されます)。
	最大接続数を表示する

やり残し

最大接続数を超えた後の待機接続の最大数はスタックに保存され(通常50+(max_connections/5))、最大値は900を超えません。
「back_log」のような変数を表示する

テーブルオープンキャッシュ

すべての SQL ステートメント実行スレッドで開くことができるテーブル キャッシュの数を制御します。SQL ステートメントを実行する場合、各 SQL 実行スレッドは少なくとも 1 つのテーブル キャッシュを開く必要があります。このパラメータの値は、接続の最大数 max_connectons と、各接続による関連クエリの実行に関係するテーブルの最大数に応じて設定する必要があります。

スレッドキャッシュサイズ

データベースへの接続を高速化するために、MySQL は一定数のカスタマー サービス スレッドをキャッシュして再利用します。パラメータ thread_cache_size を使用して、MySQL キャッシュ カスタマー サービス スレッドの数を制御できます。

innodb_lock_wait_timeout

innoDB トランザクションが行ロックを待機する時間を設定します。デフォルト値は 50 ミリ秒ですが、必要に応じて動的に設定できます。高速フィードバックを必要とするビジネス システムの場合、行ロック待機時間を短縮して、トランザクションの長時間停止を回避できます。バックグラウンドで実行されるバッチ処理プログラムの場合、行ロック待機時間を長くして、大規模なロールバック操作を回避できます。show variables like 'innodb_lock_wait_timeout';

ログ

エラー ログ ファイルの名前。このファイルには、MySQL の起動時および停止時の情報と、サーバーの実行中に発生した検証エラーが記録されます。

ログビン

データベースに変更を加えるすべてのステートメントを記録するために使用されるバイナリ ログ ファイルの名前を指定します。

binlog_do_db binlog_ignore_db

バイナリ ログで更新するデータベースを指定します。明示的に指定されていない他のすべてのデータベース更新は無視され、ログに記録されません。

同期バイナリログ

ディスクを同期する前にログを書き込む回数を指定します

一般ログ=1

クエリログを有効にするかどうか

general_log_file ファイル名 (デフォルトは host_name.log)

クエリ ログ ファイル名を指定します。ユーザーはすべてのクエリ ステートメントをクエリ ログ ファイル名に記録します: slow_query_log_file=slow_query.log
mysqldumpslow slow_query.log; スロークエリログファイルを表示する

遅いクエリログ=1

スロークエリログを有効にするかどうか。1 は有効、0 は無効を意味します。

長いクエリ時間=3

低速クエリ時間を設定します。この時間を超えるクエリ ステートメントのみがログに記録されます。

ログの遅い管理ステートメント

管理ステートメントをスロークエリログに書き込むかどうか

これで、MySQL 同時実行パラメータ調整の詳細な説明に関するこの記事は終了です。MySQL 同時実行パラメータ調整に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL ロック制御同時実行方法
  • MySQL 同時実行制御の原則に関する知識ポイント
  • MySQLデータの同時更新を処理する方法

<<:  JavaScript のモジュール性の説明

>>:  CSSはグラデーションを巧みに利用して高度な背景光アニメーションを実現します

推薦する

IDEAでVUEプロジェクトをデバッグするための詳細な手順

js コードをデバッグするには、コード内にデバッガーを記述するか、Chrome で毎回ブレークポイン...

Dockerはプロセス操作を管理するためにSupervisorを使用する

Docker コンテナは、起動時に、たとえば ssh または apache デーモン サービスなどの...

WeChatアプレットがスネークゲームを実装

この記事では、参考までに、スネークゲームを実装するためのWeChatアプレットの具体的なコードを紹介...

MySQL5.7.27-winx64 バージョン win10 のダウンロードとインストールのチュートリアル図

MySQL 5.7 のインストール私たちは学校で MySQL データベースを学んでいます。先生は私た...

Vue ブラウザログアウトの実装例

目次1. beforeunload イベント2. アンロードイベント3. ソースコードプロジェクトの...

MySQL接続クエリにおけるととwhereの違いの簡単な分析

1. テーブルを作成する テーブル「学生」を作成( `id` int(11) NULLではない、 `...

WeChatアプレットでグローバル変数を監視する方法

最近、仕事で問題に遭遇しました。グローバル変数 red_heart があります。これは多くの場所で使...

Docker で MySQL マスター スレーブ レプリケーションを実装するためのサンプル コード

目次1. 概要1. 原則2. 実装3. スレーブインスタンスを作成する4. マスタースレーブ構成要約...

MySQL 5.5 で範囲パーティションを追加および削除する例

導入RANGE パーティション分割は、指定された連続した間隔範囲に基づいています。RANGE の初期...

JavaScript でツリー構造を構築するための効率的なアルゴリズムについての簡単な説明

目次導入アイデアID配列インデックスのマッピング関係を確立するツリー構造の構築原理要約する導入組織階...

MySQL 5.7.21 winx64 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.21のインストールに関する注意事項をまとめ、皆さんと共有します。 ...

Reactはconetxtを通じてマルチコンポーネント値転送関数を実装します

この関数の効果はvue的provide/injectに似ています。 contextを通じて反応できる...

Dockerを使用してMQTTサーバーを構築するプロセスの詳細な説明

1. イメージをプルするdocker pull registry.cn-hangzhou.aliyu...

Javascript実践におけるコマンドモードの詳しい説明

目次意味構造例カスタムショートカットキー元に戻すとやり直し録音と再生マクロ要約する意味リクエストをオ...

K8S クラスターを構築し、Hyper-V で Docker をインストールする方法

Win10 システムをインストールしていて、k8s クラスターを構築する場合、Win10 に付属する...