MySQL thread_stack 接続スレッドの最適化

MySQL thread_stack 接続スレッドの最適化

MySQL は、ネットワーク経由だけでなく、名前付きパイプ経由でも接続できます。MySQL への接続にどの方法を使用するかに関係なく、すべてのクライアント要求は MySQL のスレッドによって管理されます。各クライアント接続には対応する接続​​スレッドがあります。 MySQL には、リクエストの完了後にアイドル状態の接続スレッドを破棄するのではなく保存するためのスレッド キャッシュ プールが実装されています。このように、新しい接続要求があると、MySQL はまずスレッド キャッシュにアイドル接続スレッドがあるかどうかを確認します。ある場合は、それを取り出して直接使用します。アイドル接続スレッドがない場合は、新しい接続スレッドが作成されます。具体的なパラメータ:
Thread_cache_size: スレッド キャッシュ プールに保存する接続スレッドの数。
Thread_stack: MySQL が各接続スレッドの作成時に割り当てるメモリ サイズ。 MySQL が新しい接続スレッドを作成する場合、クライアントが要求したクエリと独自のさまざまなステータスおよび処理情報を保存するために、一定量のメモリ スタック領域を割り当てる必要があります。
接続スレッドに関連するシステム変数の設定値を表示します。「thread%」などの変数を表示します。

mysql> 'thread%' のような変数を表示します。
+-------------------+--------+
| 変数名 | 値 |
+-------------------+--------+
| スレッドキャッシュサイズ | 32 |
| スレッドスタック | 196608 |
+-------------------+--------+
セット内の 2 行 (0.00 秒)

図に示すように、システムはスレッド キャッシュ プールを最大 25 個の接続スレッドをキャッシュするように設定します。各接続スレッドが作成されると、システムは 192 KB のメモリ スタックを割り当てます。
システムが接続された回数と現在のシステムの接続スレッドのステータス値を表示します。

mysql> 'connections' のようなステータスを表示します。
+---------------+-------+
| 変数名 | 値 |
+---------------+-------+
| 接続 | 620 |
+---------------+-------+
セット内の 1 行 (0.00 秒)

mysql> '%thread%' のようなステータスを表示します。
+------------------------+-------+
| 変数名 | 値 |
+------------------------+-------+
| 遅延挿入スレッド | 0 |
| 遅い起動スレッド | 0 |
| キャッシュされたスレッド | 3 |
| スレッド接続数 | 4 |
| 作成されたスレッド | 7 |
| 実行中のスレッド | 1 |
+------------------------+-------+
セット内の 6 行 (0.00 秒)

システムが起動してから、620 のクライアント接続を受信し、7 つの接続スレッドを作成しました。現在、1 つの接続スレッドがクライアントに接続されており、3 つの接続スレッドのうち 1 つだけがアクティブ状態にあります。つまり、1 つだけがクライアントから送信された要求を処理しています。合計 3 つの接続スレッドがスレッド キャッシュ プールにキャッシュされます。

スレッドキャッシュヒット率:
Thread_Cache_Hit = (接続数 - Threads_created) / 接続数 * 100%;
通常、システムが一定期間安定して稼働した後は、スレッド キャッシュのヒット率が 90% 程度に維持されていれば正常とみなされます。

実用例:

16G/32Gマシンの場合、通常512Kが設定されます

もちろん、次のエラー メッセージが表示された場合は、この値を増やすことを検討する必要があります。

mysql-debug: スレッド スタック オーバーラン

バグ情報

エラーメッセージ:
java.sql.SQLException: スレッド スタック オーバーラン: 131072 バイトのスタックのうち 5456 バイトが使用されており、128000 バイトが必要です。より大きなスタックを指定するには、「mysqld --thread_stack=#」を使用します。

公式対応情報:

デフォルト(192KB)は通常の操作には十分な大きさです。スレッドスタックのサイズが小さすぎると、サーバーが処理できるSQL文の複雑さ、ストアドプロシージャの再帰の深さ、その他のメモリを消費するアクションが制限されます。

使用可能

show variables where `variable_name` = 'thread_stack';

現在のデータベースのデフォルトのスレッド スタック サイズを照会します。通常は正常に使用できます。ただし、クエリ ステートメントまたはストアド プロシージャが複雑な場合は、スレッド スタック オーバーラン エラーが報告されます。この場合は、デフォルトの構成を変更するだけです。

解決する

Windows: MySQL インストール ディレクトリの my-small.ini または my.ini ファイルを 256k 以上に修正し、サービスを再起動します。

[mysqld]
スレッドスタック = 256k
linux: 設定ファイルも変更する必要がありますが! ! !インストールディレクトリの設定ファイルではなく、/etc/my.cnfです。このファイルのみが有効になり、サービスservice mysql restartを再起動します。

[mysqld]
スレッドスタック = 256k

以下もご興味があるかもしれません:
  • MySQL パフォーマンス最適化設定パラメータ thread_cache と table_cache の詳細な説明
  • Mysql エラー コード: 1436 スレッド スタック オーバーラン
  • mysql - パラメータ thread_cache_size 最適化方法の概要
  • Mysql の最適化とチューニングにおける 2 つの重要なパラメータ: table_cache と key_buffer
  • MySQL キャッシュの起動方法とパラメータの詳細 (query_cache_size)
  • MySQL パフォーマンス最適化のための table_cache 構成パラメータの分析
  • mysql 最適化のための重要なパラメータ key_buffer_size table_cache
  • mysql key_buffer_size設定を最適化する
  • mysql key_buffer_sizeパラメータの最適化設定

<<:  Linux で複数のファイルの名前を一度に変更する方法

>>:  js は、Element の入力コンポーネントのいくつかの機能を実装し、それをコンポーネントにカプセル化します (サンプルコード)

推薦する

スキン効果を実現するJavaScript(背景の変更)

この記事では、スキン変更効果を実現するためのJavaScriptの具体的なコードを参考までに紹介しま...

CSS3 フィルターを使用して PNG 画像の色を変更するサンプル コード

この方法は、CSS3のdrop-shadow filterを使用して、png画像の不透明部分に任意の...

Dockerがコンテナサービスを停止または削除できない問題の解決策

序文今日、開発者から、コンテナ サービスを停止、rm (docker rm -f)、または強制終了で...

CentOS はローカル yum ソースを使用して LAMP 環境を構築するグラフィック チュートリアル

この記事では、ローカル yum ソースを使用して CentOS 上に LAMP 環境を構築する方法に...

HTML で点線の境界線を設定する方法

CSSスタイルとHTMLタグ要素を使用するさまざまな HTML タグに点線の境界線を追加するために、...

Docker に influxdb をインストールするための詳細なチュートリアル (パフォーマンス テスト)

1. 前提条件1. プロジェクトが展開されました2. Dockerはすでにインストールされている2...

Centos8 で yum を使用して rabbitmq をインストールするチュートリアル

/etc/yum.repos.d/フォルダに入るrabbitmq-erlang.repo ファイルを...

デザイン理論:計画、リソース、コミュニケーションの問題について

<br />多くの中小企業ではこの問題は発生しません。中小企業はデザイナーをサポートし、...

仮想マシン VMware に Kali Linux をインストールする最新の超詳細なグラフィック チュートリアル

目次1. システムイメージファイルをダウンロードする2. 新しい仮想マシンを作成する3. Kali ...

MySQL 8の新機能ROLEの詳しい説明

MySQL ROLE はどのような問題を解決しますか?プロフェッショナルな資質を持ち、権限管理に細心...

Vue3 コンパイルプロセス - ソースコード分析

序文: Vue3 がリリースされてからかなり経ちますが、最近、会社のプロジェクトでVue3 + Ty...

JavaScript ES 新機能ブロックスコープ

目次1. ブロックスコープとは何ですか? 2. ブロックスコープが必要なのはなぜですか? 3. 関数...

Vue はトークンの有効期限が切れると自動的にログインページにジャンプする機能を実装します

このプロジェクトは最近テストされ、テスターから、トークンの有効期限が切れたため、ルートが自動的にログ...

MySQLトリガーの使用と理解

目次1. トリガーとは何ですか? 2. トリガーを作成するトリガーを作成するための構文は次のとおりで...

MySQLトランザクションの基本的な学習と経験の共有

トランザクションは、論理的な操作のグループです。この操作グループを構成する各ユニットは、成功するか失...