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 の入力コンポーネントのいくつかの機能を実装し、それをコンポーネントにカプセル化します (サンプルコード)

推薦する

シャトルボックス機能を実装するためのVueの詳細なコード

Vue - シャトルボックス機能を実装します。効果図は次のようになります。 CS 。移行{ ディスプ...

W3C チュートリアル (6): W3C CSS アクティビティ

スタイル シートは、ドキュメントの表示方法、発音方法、または入力方法を記述します。スタイル シートは...

Linux で MySQL データベースのスケジュールされたバックアップを実装する簡単な方法

詳細な手順は次のとおりです。 1. ディスク容量を確認します。 [root@localhost バッ...

HTMLでカスタムタグを使用する方法

カスタム タグは XML ファイルと HTML ファイルで自由に使用できますが、いくつか注意すべき点...

Linuxでファイルの作成時間を表示する方法

1. はじめにLinux でファイルの作成時刻が見つかるかどうかは、ファイル システムの種類によって...

IIS7~IIS8.5 サーバープロトコルヘッダーの削除または変更

要件: IIS 7、7.5、8.0、8.5、および ASP.NET で HTTP 応答ヘッダーを削除...

JS WebSocket 切断理由とハートビートの仕組みの詳しい説明

1. 切断理由WebSocket が切断される理由は多数あります。WebSocket が切断されたと...

HTMLデータ送信投稿_PowerNode Java Academy

HTTP/1.1 プロトコルで指定されている HTTP リクエスト メソッドには、OPTIONS、...

jsを使用して写真をアップロードする機能を実現する

フロントエンドで画像をアップロードする原理は、入力 type="file" タグ...

Linux manコマンドの具体的な使い方

01. コマンドの概要Linux には充実したヘルプ マニュアルが用意されています。コマンドのパラメ...

MySQL のテーブル内のレコード数を制限する方法

目次1. トリガーソリューション2. パーティションテーブルソリューション3. 一般的な表領域ソリュ...

Nginxはドメイン名のアクセス方法を定義しています

最近Nginxを構築しているのですが、ドメイン名でアクセスできません。 nginx 構成ファイル n...

Zabbix設定 DingTalkアラーム機能実装コード

必要Zabbix で DingTalk アラームを設定する方法は、Prometheus で Ding...

ウィンドウ環境設定Mysql 5.7.21 windowx64.zip無料インストール版チュートリアル詳細説明

1. 公式サイトのmysqlダウンロードページからmysql-5.7.21-windowx64.zi...

VUE uni-app でよく使用される API についての簡単な説明

目次1. ルーティングとページジャンプ2. インターフェース要約する1. ルーティングとページジャン...