19

現在、スリープ状態の接続が 100 を超えています。

一部の接続は永続的な接続であるため、スリープ状態を維持する必要があります(閉じないでください)が、他の一部(別のユーザー名を持つ)は一部のphpスクリプトからのものであり、非常に高速にタイムアウトする必要があります。

ユーザーごとに wait_timeout を設定することは可能ですか? はいの場合、どのように?

4

7 に答える 7

31

ユーザーごとのタイムアウト設定はありませんが、wait_timeout値を動的に設定できます。つまり、特定のユーザーとして接続を確立した後、ステートメントを発行して、タイムアウト値をそのユーザーのセッションに必要な値に変更できます。

mysqlコマンドラインクライアントで次の実験を試してください。

mysql> SHOW VARIABLES LIKE 'wait_timeout';

...デフォルトの28800(つまり、8時間)を表示しますwait_timout

mysql> SET SESSION wait_timeout = 60;
mysql> SHOW VARIABLES LIKE 'wait_timeout';

...60を示しています。

その後、セッションを終了して再接続すると、デフォルトwait_timeoutは28800になります。したがって、現在のセッションのスコープに制限されます。

wait_timeout2番目のウィンドウを開いて別のmysqlクライアントセッションを開始し、1つのセッションでの変更が他の同時セッションに影響を与えないことを証明することもできます。

于 2008-10-28T20:31:39.200 に答える
6

次の変数を設定する必要がありますmy.conf

[mysqld]
interactive_timeout=180
wait_timeout=180

wait_timeout自動接続のタイムアウトです(私の意見では、Webサーバーで30を超えると多すぎます)。アイドルセッション
interactive_timeoutコンソールインタラクションタイムアウトです。

于 2012-11-12T14:04:31.403 に答える
3

wait_timeout別の可能性: MySQL は、非対話型クライアント用と対話型クライアント用の2 つの異なるタイムアウト変数をサポートしてinteractive_timeoutいます。

対話型クライアントと非対話型クライアントの違いはCLIENT_INTERACTIVE、接続時にオプションを指定したかどうかだけのようです。

mysql_real_connect()何らかの方法でそのオプションをclient_flagパラメーターに渡す必要があるため、これが役立つかどうかはわかりません。使用している言語またはインターフェイスがわからないため、この接続フラグを指定できるかどうかはわかりません。

とにかく、そのクライアントフラグを渡すことができ、2つの異なるタイプのユーザーのみが必要な場合は、MySQLサーバー構成wait_timeoutinteractive_timeout異なる方法で構成し、特定のセッションをすぐにタイムアウトさせたいときに短い値を持つ方を使用できます.

于 2008-10-28T20:44:27.193 に答える
0

http://www.percona.com/doc/percona-toolkit/2.1/pt-kill.html

pt-kill を使用して、ユーザーごとに接続を強制終了することができます。これをスケジュールするか、これを処理するバックグラウンド ジョブを設定できます。

于 2012-07-24T15:08:18.973 に答える
0

テーブルを確認しましたmysql.userが、そこに設定があるようには見えません:

+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field                 | Type                              | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host                  | char(60)                          | NO   | PRI |         |       |
| User                  | char(16)                          | NO   | PRI |         |       |
| Password              | char(41)                          | NO   |     |         |       |
| Select_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv          | enum('N','Y')                     | NO   |     | N       |       |
| File_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv            | enum('N','Y')                     | NO   |     | N       |       |
| References_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv      | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type              | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher            | blob                              | NO   |     |         |       |
| x509_issuer           | blob                              | NO   |     |         |       |
| x509_subject          | blob                              | NO   |     |         |       |
| max_questions         | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates           | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections       | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       |
+-----------------------+-----------------------------------+------+-----+---------+-------+
37 rows in set (0.00 sec)

MySQLi を使用しているか PDO を使用しているかに応じて、PHP MySQL 接続は、要求が発生したときにハングアップするか、Apache プロセスのプールで共有される必要があります。

たとえば、PDO で永続的な接続をオフにするには (これがデフォルトだと思います)、DB に次のように接続します。

$pdo = new PDO($dsn, $user, $pass, Array(PDO::ATTR_PERSISTENT => false));

スクリプトで永続的な接続を使用したいが、スリープ モードでデータベースに対して開かれている接続が多すぎる場合は、Apache のMaxServersMaxSpareServersMinSpareServersおよび を構成してStartServers、不要なときに多くの接続が滞らないようにすることを検討する必要があります。

于 2008-10-28T18:21:41.020 に答える