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はグラデーションを巧みに利用して高度な背景光アニメーションを実現します

推薦する

MySQL主キー命名戦略関連

最近、データライフサイクル管理の詳細を整理していたときに、小さな問題を発見しました。それは、MySQ...

Apache Web サーバーを使用して 2 つ以上のサイトを構成する方法

人気があり強力な Apache Web サーバーで 2 つ以上のサイトをホストする方法。前回の記事で...

コピー&ペーストはパッケージングの敵です

OO、デザイン パターン、および多くのオブジェクト指向の原則について話す前に、まず 1 つのことを習...

Tencent Cloudでhive3.1.2を構築する方法を教えます

環境の準備操作を開始する前に、hadoop バージョンがインストールされていることを確認してください...

Nginx 最適化サービスで Web ページ圧縮を実装する方法

リソースを節約するためにWebページの圧縮を設定する1.まず、設定を変更しましょう vim /usr...

Docker でタイムゾーンの問題に対処する方法

背景ここ 2 日間 Docker を使用していたところ、コンテナの起動後に date -R の出力タ...

MySQL InnoDB ロックの概要

目次1. 共有ロックと排他ロック2. 意図ロック3. レコードロック4. ギャップロック5. ネクス...

MySQL の order by ステートメントの最適化方法の詳細な説明

この記事では、ORDER BY文の最適化について学びます。その前に、インデックスの基礎的な理解が必要...

MySQL累積計算実装方法の詳しい説明

目次序文需要分析MySQL ユーザー変数累積計算にMysqlユーザー変数を使用する要約するこの記事で...

nginx のインストールが完了した後に PHP を解析できない問題の解決方法

目次方法1方法2 nginxをインストールした後、PHPコードを解析できないことがわかりました。解決...

Linux カーネルプログラミングにおけるコンテナの of() 関数の紹介

序文Linux カーネルプログラミングでは、マクロ関数 container_of(ptr, type...

Dockerプライベートウェアハウスの構築とインターフェース管理の詳細な説明

1. レジストリについて公式 Docker ハブは、パブリックイメージを管理するのに適した場所です。...

JS の精度外数値問題の解決

精度の問題に対する最もわかりやすい説明たとえば、1÷3=0.33333333...という数字は、3が...

CSS3 は本当に SCSS に取って代わるのでしょうか?

Web ページのスタイル設定に関しては、プロジェクトで純粋な CSS または SCSS (および他...

MySQLが基礎データ構造としてB+ツリーを使用する理由

MySQL の基盤となるデータ構造が B+ ツリーであることは誰もが知っていますが、ではなぜ赤黒ツリ...