max_used_connections
のピーク値に達した後、なぜmax_connections
値が下がらないのでしょうか。
エラーログのDB接続拒否エラーと警告メッセージを回避するために、常にステータスをフラッシュしてこの値を下げます。
=====
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
=======
mysql> select version();show variables like "%max_connections%";show global status
like "%Max_used%";show status like "%thread%";
+--------------+
| version() |
+--------------+
| 5.1.52-2-log |
+--------------+
1 row in set (0.00 sec)
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 150 |
+-----------------+-------+
1 row in set (0.00 sec)
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Max_used_connections | 151 |
+----------------------+-------+
1 row in set (0.00 sec)
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Com_show_thread_statistics | 0 |
| Delayed_insert_threads | 0 |
| Slow_launch_threads | 0 |
| Threads_cached | 89 |
| Threads_connected | 2 |
| Threads_created | 1344 |
| Threads_running | 2 |
+----------------------------+-------+
7 rows in set (0.00 sec)
mysql> show variables like "%thread_cache%";
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| thread_cache_size | 90 |
+-------------------+-------+
1 row in set (0.00 sec)
接続の中止ステータスは次のとおりです。
mysql> show global status like "%Aborted%";
+------------------+----------+
| Variable_name | Value |
+------------------+----------+
| Aborted_clients | 119 |
| Aborted_connects | 43855304 |
+------------------+----------+
2 rows in set (0.00 sec)
いくつかのシナリオで、max_used_connections
の値が下がると、threads_connected
の値が動的に下がることを確認しました。
これは、max_connections
を増やすための単なる指示変数ですか?理解を深めるためにこのクエリを投稿します。詳細な説明はありますか?
thread_cache_size
はmax_connections
よりも大きいはずですが、それが少ない場合、どのような影響がありますか?
サーバーの起動以降に同時に使用された接続の最大数。
降ってくるはずがないので降りません。
Max_used_connections
はステータス変数であり、- is is defined as "themaximumnumber of connectionsof theサーバーが起動してから同時に使用してください。」
実は、FLUSH STATUS
を使用して値を現在の接続数にリセットすることもできます。
しかし、何も変更しないため、これは「部分的な解決策」ではありません。 FLUSH STATUS
で達成している唯一のことは、情報のみのステータス変数の値をベースライン化することです 表示されている値を現在の値にリセットする ステータス変数のThreads_connected
-現在の接続数。
このアクションは、サーバーの動作については何も変更しません。それを行った後に動作の変化が見られる場合、それは偶然です。
mysql> SHOW STATUS LIKE 'Threads_connected';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_connected | 225 |
+-------------------+-------+
1 row in set (0.00 sec)
トラブルシューティングを行う際に、上記の値を見るのがより便利です。現在のカウントが表示されます。
しかし、問題に対処するには、接続を適切に解放しないアプリケーションがあります-これはMySQLではなく他の場所で修正する必要があります-またはあなたは正しいかもしれません- the max_connections
グローバル変数 --で書かれた内容を検討した後 C.5.2.7接続が多すぎます 。このページでは、上記の出力がMax_used_connections
が150であるのに対し、max_connections
が151である理由も説明しています。
thread_cache_size
をmax_connections
より大きい値に設定すると、非常に役に立たないアドバイスのように見えます...キャッシュはmax_connections
より大きくできず、どこにでもキャッシュできませんそのサイズに近いのは、スレッドに大量のチャーンがある場合にのみ意味があります。正常に動作するアプリケーションでは、これは当てはまりません。