2017-09-20 43 views
0

は突然、私のLaravelアプリケーションは、私がログインしようとしたときに動作を停止。Laravelのmax_prepared_stmt_countエラー

多くの接続を開いたが閉じていない...と、いくつかの制限に達するとされているようです。

(2/2) QueryException 
SQLSTATE[42000]: Syntax error or access violation: 1461 Can't create more than max_prepared_stmt_count statements (current value: 16382) (SQL: select * from `users` where `email` = [email protected] limit 1) 
+0

私たちにいくつかのコードを教えてください。クエリはループ内にありますか? – ishegg

+0

それは奇妙なことです。私は何も変えなかった。突然、私のアプリケーション全体がクラッシュしました... –

+0

クエリがループ内にある場合、これを引き起こすデータセットの変更は完全に可能です。このエラーによって、あなたの環境の制限である多くの時間(16382)のステートメントを準備したように見えます。私は文を一度準備してループ内で実行することで、一時的にこの問題を回避できると思います。 – ishegg

答えて

0

max_prepared_stmt_count設定が同時にサーバレベルでのMySQLで存在することができる準備文の最大数を制限します。新しいプリペアドステートメントを作成するたびに、mysqlはこの制限を最初にチェックし、mysqlサーバーにプリペアドステートメントが多すぎる場合は、表示されるエラーメッセージで新しいステートメントをブロックします。

共有ホスティングを行っているとコメントで述べました。あなたのホスティングプロバイダの顧客が同じmysqlサーバを共有している場合、顧客が作成したすべての準備済みのststementは、利用可能なプリペアドステートメントの同じプールを使用し、mysqlインスタンスは単に限界に達します。

このエラーが続く場合は、ホスティングプロバイダを変更したり、独自のサーバーを使用したりすることができます。プロバイダはmysqlのパフォーマンス全体に影響するため、設定を変更することはまずありませんが、制限を増やすことができるか、問題のアプリケーションを停止できるかどうかを尋ねることができます。