web-dev-qa-db-ja.com

Threads_connectedが落ちても、max_used_connectionsステータスがmax_connectionsに到達すると自動的に更新されないのはなぜですか

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)
  1. いくつかのシナリオで、max_used_connectionsの値が下がると、threads_connectedの値が動的に下がることを確認しました。

  2. これは、max_connectionsを増やすための単なる指示変数ですか?理解を深めるためにこのクエリを投稿します。詳細な説明はありますか?

thread_cache_sizemax_connectionsよりも大きいはずですが、それが少ない場合、どのような影響がありますか?

Max_used_connections

サーバーの起動以降に同時に使用された接続の最大数。

7
Gopinath

降ってくるはずがないので降りません。

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_sizemax_connectionsより大きい値に設定すると、非常に役に立たないアドバイスのように見えます...キャッシュはmax_connectionsより大きくできず、どこにでもキャッシュできませんそのサイズに近いのは、スレッドに大量のチャーンがある場合にのみ意味があります。正常に動作するアプリケーションでは、これは当てはまりません。

9