溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL中怎么設(shè)置查詢超時

發(fā)布時間:2021-07-27 14:28:56 來源:億速云 閱讀:236 作者:Leah 欄目:數(shù)據(jù)庫

本篇文章為大家展示了MySQL中怎么設(shè)置查詢超時,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

為了優(yōu)化OceanBase的query timeout設(shè)置方式,特調(diào)研MySQL關(guān)于timeout的處理,記錄如下。
  [plain]
  mysql> show variables like '%time%';
  +----------------------------+-------------------+
  | Variable_name              | Value             |
  +----------------------------+-------------------+
  | connect_timeout            | 10                |
  | datetime_format            | %Y-%m-%d %H:%i:%s |
  | delayed_insert_timeout     | 300               |
  | flush_time                 | 1800              |
  | innodb_lock_wait_timeout   | 50                |
  | innodb_old_blocks_time     | 0                 |
  | innodb_rollback_on_timeout | OFF               |
  | interactive_timeout        | 28800             |
  | lc_time_names              | en_US             |
  | lock_wait_timeout          | 31536000          |
  | long_query_time            | 10.000000         |
  | net_read_timeout           | 30                |
  | net_write_timeout          | 60                |
  | slave_net_timeout          | 3600              |
  | slow_launch_time           | 2                 |
  | system_time_zone           |                   |
  | time_format                | %H:%i:%s          |
  | time_zone                  | SYSTEM            |
  | timed_mutexes              | OFF               |
  | timestamp                  | 1366027807        |
  | wait_timeout               | 28800             |
  +----------------------------+-------------------+
  21 rows in set, 1 warning (0.00 sec)
  重點解釋其中幾個參數(shù):
  connect_timeout:
  The number of seconds that the mysqld server waits for a connect packet before respondingwith Bad handshake. The default value is 10 seconds as of MySQL 5.1.23 and 5 seconds before that.  Increasing the connect_timeout value might help if clients frequently encounter errors of the form Lost connection to MySQL server at ‘XXX’, system error: errno.
  解釋:在獲取鏈接時,等待握手的超時時間,只在登錄時有效,登錄成功這個參數(shù)就不管事了。主要是為了防止網(wǎng)絡(luò)不佳時應(yīng)用重連導(dǎo)致連接數(shù)漲太快,一般默認(rèn)即可。
  interactive_timeout:
  The number of seconds the server waits for activity on an interactive connection before closing it. An interactive client is defined as a client that uses the CLIENT_INTERACTIVE option to mysql_real_connect(). See alsowait_timeout.
  解釋:一個持續(xù)SLEEP狀態(tài)的線程多久被關(guān)閉。線程每次被使用都會被喚醒為acrivity狀態(tài),執(zhí)行完Query后成為interactive狀態(tài),重新開始計時。wait_timeout不同在于只作用于TCP/IP和Socket鏈接的線程,意義是一樣的。
  MySQL可以配置連接的超時時間,這個時間如果做得太長,甚至到了10min,那么很可能發(fā)生這種情況,3000個鏈接都被占滿而且sleep在哪,新鏈接進(jìn)不來,導(dǎo)致無法正常服務(wù)。因此這個配置盡量配置一個符合邏輯的值,60s或者120s等等。
  說人話:
  命令行下面敲一個命令后,直至下一個命令到來之前的時間間隔為interactive_time,如果這個時間間隔超過了 interactive_timeout,則連接會被自動斷開,下一個命令失敗。不過一般的mysql客戶端都有自動重連機制,下一個命令會在重連后執(zhí) 行。
  [sql]
  mysql> set interactive_timeout = 1;
  Query OK, 0 rows affected (0.00 sec)
  mysql> show session variables like '%timeout%';
  +----------------------------+----------+
  | Variable_name              | Value    |
  +----------------------------+----------+
  | connect_timeout            | 10       |
  | interactive_timeout        | 1        |
  | wait_timeout               | 28800    |
  +----------------------------+----------+
  10 rows in set (0.00 sec)
  =====
  [sql]
  mysql> set wait_timeout = 1;
  Query OK, 0 rows affected (0.00 sec)
  【去泡杯茶,等會兒】
  mysql> show session variables like '%timeout%';
  ERROR 2006 (HY000): MySQL server has gone away
  No connection. Trying to reconnect...
  Connection id:    7
  Current database: *** NONE ***
  +----------------------------+----------+
  | Variable_name              | Value    |
  +----------------------------+----------+
  | connect_timeout            | 10       |
  | interactive_timeout        | 28800    |
  | wait_timeout               | 28800    |
  +----------------------------+----------+
  10 rows in set (0.01 sec)
  wait_timeout:
  The number of seconds the server waits for activity on a noninteractive connection (連接上沒有活動命令,可能是客戶端喝咖啡去了。)before closing it. Before MySQL 5.1.41, this timeout applies only to TCP/IP connections, not to connections made through Unix socket files, named pipes, or shared memory.
  On thread startup, the session wait_timeout value is initialized from the global wait_timeout value or from the global interactive_timeout value, depending on the type of client

上述內(nèi)容就是MySQL中怎么設(shè)置查詢超時,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI