スレッド スタック オーバーラン: MySQL のエラー 1436
エラーの説明
MySQL エラー 1436、 ER_STACK_OVERRUN_NEED_MORE は、スレッド スタック オーバーランを示します。このエラーは、スレッドが利用可能なスタック メモリを超えてスタック メモリを使用しようとした場合、通常は複雑なクエリまたはトリガーの実行中に発生します。
根本原因
プライマリエラー 1436 の原因は、スレッド スタック サイズが不十分であることです。デフォルトのスレッド スタック サイズは通常 128KB (131072 バイト) に設定されていますが、my.cnf 構成ファイルで構成できます。
エラー詳細の分析
エラーメッセージには次のような内容が表示されます詳細:
-
1436: エラー番号。
-
スレッド スタック: ローカル変数と関数パラメーターの保存に使用されるメモリ領域スレッド実行中。
-
オーバーラン: スタックは超過しました。
-
6136 bytes used: エラー時に使用されたスタック メモリの量。
-
131072 byte stack: 合計サイズスレッド スタックの。
-
128000 バイト必要な: 現在のスレッド操作に必要なスタック メモリの量。
スレッド スタック ソースの決定
スレッドの場所を決定するにはスタック値は次から取得されます:
- my.cnf 設定ファイルを確認してください。明示的な thread_stack 設定。
- performance_schema.variables_info テーブルを使用して、「thread_stack」変数の VARIABLE_SOURCE 列をクエリします。これにより、値がコンパイルされたバイナリ、構成ファイル、または動的設定から取得されたものであるかがわかります。
解決策
エラー 1436 を解決するには、スレッド操作のメモリ要件に合わせてスレッド スタック サイズを増やします。これは、次の方法で実現できます。
-
my.cnf ファイルを変更します。 'thread_stack' パラメータをより高い値 (通常は 256KB 以上) に設定します。
- スレッド スタック サイズを動的に調整する: 'thread_stack' を使用するユーザー定義変数を使用して、個々の接続に特定のスタック サイズを設定します。
-
クエリまたはトリガーの最適化: クエリまたはトリガーを最適化し、複雑さを軽減することで、クエリまたはトリガーのスタック使用量を削減します。
-
MySQL のカスタム ビルドが使用されたかどうかの確認: カスタム ビルドでエラーが発生した場合は、デフォルトのビルドが使用されていることを確認します。スレッド スタック サイズはコンパイル プロセス中に変更されませんでした。
以上がMySQL エラー 1436:「スレッド スタック オーバーラン」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。