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

推薦する

Nginx 急ぎ購入 電流制限構成 実装分析

ビジネス上のニーズにより、急ぎの購入が発生することが多いため、ロード バランシング フロント エンド...

スライディングカルーセル効果を実現する js

この記事では、スライディングカルーセル効果を実現するためのjsの具体的なコードを参考までに共有します...

HTMLテキストオーバーフローの2つの一般的な解決策は省略記号を表示することです

方法1: CSSオーバーフロー省略を使用して解決する解決策は次のとおりです。 CSSコード: ディス...

Quill エディタでカスタム HTML レコードを挿入する詳細な例

もう2020年です。飢えた人間は単純なテキストでは満足できなくなり、さまざまなスタイルの派手なテキス...

docker での psql データベースのバックアップとリカバリの詳細な説明

1. DockerでのPostgresデータベースのバックアップ注文: docker exec it...

Websocket に基づくシンプルなチャットルームダイアログの実装

この記事では、WebSocketを使用して簡単なチャットルームの会話を実装するための具体的なコードを...

nginxとバックエンドポート間の競合の解決策

質問: Alice 管理システムを開発しているときに、すべてのバックエンド インターフェイスが最初の...

Docker ベースの ELK ログ システムを構築する方法

背景要件:ビジネスがどんどん大きくなると、サーバーの数も増え、さまざまなアクセスログ、アプリケーショ...

OpenSSL を使用した Kubernetes 証明書の生成の概要

Kubernetes は、基本認証、トークン認証、CA 認証の 3 種類の認証をサポートしています。...

CentOS 7でsambaを使用してフォルダーを共有するための完全な手順

序文Samba は、サーバー プログラムとクライアント プログラムで構成され、Linux システム上...

TypeScript で時間を費やした場所の概要

TS で時間を過ごした場所をいくつか記録します。 (まず、文句を言わせてください。stackover...

mysql5.7 の新しい json フィールド タイプの使用例の分析

この記事では、MySQL 5.7 で追加された json フィールド タイプの使用方法を例を使って説...

Tomcatサーバーのセキュリティ設定方法

Tomcat は、Java Community Process を通じて Sun が開発した、広く使...

USE DB 輻輳に対する MySQL ソリューションの詳細な説明

障害に遭遇すると、障害の根本的な原因を考えるのではなく、障害を解決する方法を考えることがよくあります...

mysql インストーラ コミュニティ 8.0.12.0 インストール グラフィック チュートリアル

このチュートリアルでは、参考のためにmysqlインストーラコミュニティ8.0.12.0のインストール...