久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL中如何淺析interactive

139次閱讀
沒有評論

共計 7234 個字符,預(yù)計需要花費 19 分鐘才能閱讀完成。

本篇文章給大家分享的是有關(guān) MySQL 中如何淺析 interactive_timeout 和 wait_timeout,丸趣 TV 小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著丸趣 TV 小編一起來看看吧。

一 前言
  這篇文章源于自己一個無知的提問,作為一個 DBA 老鳥,實在汗顏。如圖,修改 wait_timeout 參數(shù)之后 并沒有及時生效,于是乎去跑到技術(shù)支持群里問了。。ps 應(yīng)該去查 g.cn 才對。。
 
  本文通過測試我們要弄清楚兩個問題
  a 繼承關(guān)系 wait_timeout 在 session 和 global 級別分別繼承那個參數(shù)?
  b 生效參數(shù) 在會話中到底哪個參數(shù)決定了會話的存活時間?

二 參數(shù)介紹  
首先說明兩個關(guān)鍵詞 通過 MySQL 客戶端連接 db 的是交互會話,通過 jdbc 等程序連接 db 的是非交互會話。
interactive_timeout: MySQL 服務(wù)器關(guān)閉交互式連接前等待的秒數(shù)。交互式客戶端定義為在 mysql_real_connect()中使用 CLIENT_INTERACTIVE 選項的客戶端。參數(shù)默認(rèn)值:28800 秒(8 小時)
wait_timeout:          MySQL 服務(wù)器關(guān)閉非交互連接之前等待的秒數(shù)。在會話啟動時,根據(jù)全局 wait_timeout 值或全局 interactive_timeout 值初始化會話 wait_timeout 值,取決于客戶端類型 – 由 mysql_real_connect()的連接選項 CLIENT_INTERACTIVE 定義。參數(shù)默認(rèn)值:28800 秒(8 小時)
2.1 繼承關(guān)系  
1) 單獨設(shè)置 global 級別的 interactive_timeout  

set global interactive_timeout = 300

session1 [RO] 09:34:20 set global interactive_timeout=300;

Query OK, 0 rows affected (0.00 sec)

session1 [RO] 09:39:15 select variable_name,variable_value from information_schema.global_variables where variable_name in (interactive_timeout , wait_timeout

+———————+—————-+

| variable_name      | variable_value |

+———————+—————-+

| INTERACTIVE_TIMEOUT | 300           |

| WAIT_TIMEOUT        | 28800         |

+———————+—————-+

2 rows in set (0.00 sec)

session1 [RO] 09:39:21 select variable_name,variable_value from information_schema.session_variables where variable_name in (interactive_timeout , wait_timeout

+———————+—————-+

| variable_name      | variable_value |

+———————+—————-+

| INTERACTIVE_TIMEOUT | 300            |

| WAIT_TIMEOUT        | 28800        |

+———————+—————-+

2 rows in set (0.00 sec)

登陸另外一個會話

session2 [RO] 09:39:35 select variable_name,variable_value from information_schema.global_variables where variable_name in (interactive_timeout , wait_timeout

+———————+—————-+

| variable_name      | variable_value |

+———————+—————-+

| INTERACTIVE_TIMEOUT | 300            |

| WAIT_TIMEOUT      | 28800         |

+———————+—————-+

2 rows in set (0.00 sec)

session2 [RO] 09:39:51 select variable_name,variable_value from information_schema.session_variables where variable_name in (interactive_timeout , wait_timeout

+———————+—————-+

| variable_name      | variable_value |

+———————+—————-+

| INTERACTIVE_TIMEOUT | 300            |

| WAIT_TIMEOUT        | 300            |

+———————+—————-+

2 rows in set (0.00 sec)

分析
  在交互模式下,session 和 global 級別的 interactive_timeout 繼承了 interactive_timeout global 的值。而 wait_timeout 的值,session 級別繼承了 interactive_timeout。global 級別的 wait_timeout 則不受影響。
2) 設(shè)置 session 級別的 interactive_timeout 

session1 [RO] 09:44:07 set session interactive_timeout=300;

Query OK, 0 rows affected (0.00 sec)

session1 [RO] 09:44:27 select variable_name,variable_value from information_schema.global_variables where variable_name in (interactive_timeout , wait_timeout

+———————+—————-+

| variable_name       | variable_value |

+———————+—————-+

| INTERACTIVE_TIMEOUT | 28800         |

| WAIT_TIMEOUT        | 28800         |

+———————+—————-+

2 rows in set (0.00 sec)

session1 [RO] 09:44:31 select variable_name,variable_value from information_schema.session_variables where variable_name in (interactive_timeout , wait_timeout

+———————+—————-+

| variable_name       | variable_value |

+———————+—————-+

| INTERACTIVE_TIMEOUT | 300           |

| WAIT_TIMEOUT        | 28800         |

+———————+—————-+

2 rows in set (0.00 sec)

另外開啟一個會話

session2 [RO] 09:44:41 select variable_name,variable_value from information_schema.session_variables where variable_name in (interactive_timeout , wait_timeout

+———————+—————-+

| variable_name | variable_value |

+———————+—————-+

| INTERACTIVE_TIMEOUT | 28800 |

| WAIT_TIMEOUT | 28800 |

+———————+—————-+

2 rows in set (0.01 sec)

session2 [RO] 09:44:44 select variable_name,variable_value from information_schema.global_variables where variable_name in (interactive_timeout , wait_timeout

+———————+—————-+

| variable_name       | variable_value |

+———————+—————-+

| INTERACTIVE_TIMEOUT | 28800          |

| WAIT_TIMEOUT       | 28800         |

+———————+—————-+

2 rows in set (0.00 sec)

分析
  從上面的例子來看 wait_timeout 并不受 session 級別的 interactive_timeout 的值的影響。 
3) 同時設(shè)置兩者的值,且不同。

session1 [RO] 09:46:42

(none) [RO] 09:46:42 set global interactive_timeout=300;

Query OK, 0 rows affected (0.00 sec)

session1 [RO] 09:46:55 set global wait_timeout=360;

Query OK, 0 rows affected (0.00 sec)

另開啟一個會話

session2 [RO] 09:47:20 select variable_name,variable_value from information_schema.session_variables where variable_name in (interactive_timeout , wait_timeout

+———————+—————-+

| variable_name       | variable_value |

+———————+—————-+

| INTERACTIVE_TIMEOUT | 300            |

| WAIT_TIMEOUT        | 300            |

+———————+—————-+

2 rows in set (0.00 sec)

session2 [RO] 09:47:22 select variable_name,variable_value from information_schema.global_variables where variable_name in (interactive_timeout , wait_timeout

+———————+—————-+

| variable_name       | variable_value |

+———————+—————-+

| INTERACTIVE_TIMEOUT | 300            |

| WAIT_TIMEOUT        | 360          |

+———————+—————-+

2 rows in set (0.00 sec)

分析
  從案例 1 2 中可以得出 session 級別的 wait_timeout 繼承 global 級別的 interactive_timeout 的值 global 級別的 session 則不受影響。在沒有改變 interactive_timeout 的值的情況下,去修改 wait_timeout 的值
  結(jié)果無效。就會出現(xiàn)前言中我遇到的情況。
2.2 有效參數(shù)
  通過一個例子檢測影響會話的參數(shù)是哪個?驗證方式通過設(shè)置全局的 timeout 時間(注意兩者時間不同),另外起一個會話

session1 [RO] 10:20:56 set global interactive_timeout=20;

Query OK, 0 rows affected (0.00 sec)

session1 [RO] 10:23:32 set global wait_timeout=10;

Query OK, 0 rows affected (0.00 sec)

會話 2 進行查詢

mysql select sleep(5);

+———-+

| sleep(5) |

+———-+

| 0      |

+———-+

1 row in set (5.01 sec)

然后在 session1 中 查看 show processlist;

分析
    交互式 timeout 時間受 global 級別的 interactive_timeout 影響。
2) 非交互模式
  目前的測試并沒有達(dá)到預(yù)期,測試模型如下設(shè)置

mysql select variable_name,variable_value from information_schema.session_variables where variable_name in (interactive_timeout , wait_timeout

 +———————+—————-+

 | variable_name       | variable_value |

 +———————+—————-+

 | INTERACTIVE_TIMEOUT | 35            |

 | WAIT_TIMEOUT        | 35            |

 +———————+—————-+

 2 rows in set (0.00 sec)

 mysql select variable_name,variable_value from information_schema.global_variables where variable_name in (interactive_timeout , wait_timeout

 +———————+—————-+

 | variable_name       | variable_value |

 +———————+—————-+

 | INTERACTIVE_TIMEOUT | 35            |

 | WAIT_TIMEOUT       | 25             |

 +———————+—————-+

 2 rows in set (0.00 sec)

在 python 命令行中模擬非交互數(shù)據(jù)來訪問數(shù)據(jù)庫,查看數(shù)據(jù)庫 timeout 參數(shù)。同時在數(shù)據(jù)庫中執(zhí)行 show processlist 查看 python 的連接多久會被關(guān)閉。

查看 session 級別的參數(shù)

查看 show processlist,通過 python 程序連接數(shù)據(jù)庫的會話等待了 25s 之后,被中斷。

分析
1 通過 python 命令行獲取的 timeout 參數(shù)和交互方式獲取的并不一致,在交互命令行中獲取 session 級別的 wait_timeout 的值為 35,使用非交互命令獲取的值為 25,說明 wait_timeout 繼承全局的 wait_timeout。
2 交互模式下會話空閑時間超過 wait_timeout 立即會被斷開。

3) 思考題
  session1 通過非交互命令連接到 db,此時全局的 wait_timeout 的值是 28800,session 2 修改全局的 wait_timeout 為 30s ,問題 session1 的會話會受到影響嗎?

三 總結(jié)
 1 timeout 只是針對空閑會話有影響。
 2 session 級別的 wait_timeout 繼承 global 級別的 interactive_timeout 的值。而 global 級別的 session 則不受 interactive_timeout 的影響。
 3 交互式會話的 timeout 時間受 global 級別的 interactive_timeout 影響。因此要修改非交互模式下的 timeout,必須同時修改 interactive_timeout 的值。
 4 非交互模式下,wait_timeout 參數(shù)繼承 global 級別的 wait_timeout。

以上就是 MySQL 中如何淺析 interactive_timeout 和 wait_timeout,丸趣 TV 小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注丸趣 TV 行業(yè)資訊頻道。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-19發(fā)表,共計7234字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 临海市| 沾益县| 云梦县| 莱西市| 香港| 霍邱县| 澜沧| 大姚县| 社会| 思南县| 宁陵县| 赣州市| 靖江市| 海城市| 弥勒县| 明光市| 甘孜县| 华安县| 自治县| 南靖县| 涡阳县| 开平市| 静乐县| 滕州市| 富阳市| 永丰县| 广丰县| 垫江县| 武陟县| 成都市| 靖安县| 汤原县| 右玉县| 开鲁县| 巨鹿县| 耿马| 禄丰县| 四子王旗| 象山县| 普宁市| 石城县|