MySQL怎么設置超時 mysql連接超時時間查詢

C#連接mysql數據庫,怎么設置超時時間

MySQL查詢超時的設置方法

成都創新互聯是專業的漯河網站建設公司,漯河接單;提供網站制作、成都網站建設,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行漯河網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!

為了優化OceanBase的query timeout設置方式,特調研MySQL關于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)

重點解釋其中幾個參數:

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.

解釋:在獲取鏈接時,等待握手的超時時間,只在登錄時有效,登錄成功這個參數就不管事了。主要是為了防止網絡不佳時應用重連導致連接數漲太快,一般默認即可。

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.

解釋:一個持續SLEEP狀態的線程多久被關閉。線程每次被使用都會被喚醒為acrivity狀態,執行完Query后成為interactive狀態,重新開始計時。wait_timeout不同在于只作用于TCP/IP和Socket鏈接的線程,意義是一樣的。

MySQL可以配置連接的超時時間,這個時間如果做得太長,甚至到了10min,那么很可能發生這種情況,3000個鏈接都被占滿而且sleep在哪,新鏈接進不來,導致無法正常服務。因此這個配置盡量配置一個符合邏輯的值,60s或者120s等等。

說人話:

命令行下面敲一個命令后,直至下一個命令到來之前的時間間隔為interactive_time,如果這個時間間隔超過了interactive_timeout,則連接會被自動斷開,下一個命令失敗。不過一般的mysql客戶端都有自動重連機制,下一個命令會在重連后執行。

[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

這里順帶解釋一下什么是non-interactive connection

Non-Interactive Commands

Just do a quick look up on a table without logging into the client, running the query then logging back out again.

You can instead just type one line using the ' -e ' flag.

[sql]

c:\mysql\bin\mysql -u admin -p myDatabase -e 'SELECT * FROM employee'

net_read_timeout / net_write_timeout

The number of seconds to wait for more data from a connection before aborting the read. 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. When the server is reading from the client, net_read_timeout is the timeout value controlling when to abort. When the server is writing to the client, net_write_timeout is the timeout value controlling when to abort. See also slave_net_timeout.

On Linux, the NO_ALARM build flag affects timeout behavior as indicated in the description of the net_retry_count system variable.

解釋:這個參數只對TCP/IP鏈接有效,分別是數據庫等待接收客戶端發送網絡包和發送網絡包給客戶端的超時時間,這是在Activity狀態下的線程才有效的參數

JDBC setQueryTimeout函數:

為了避免查詢出現死循環,或時間過長等現象,而導致線程阻塞,在獲得Statement的實例后,stmt.setQueryTimeout(10); 避免因為查詢導致程序出現線程阻塞。

但昨天發現程序出現了,“ORA-01013: 用戶請求取消當前的操作”的異常。手工執行出錯SQL語句發現,這個語句耗時20多秒。因為setQueryTimeout(10),所以還沒有執行完查詢語句就拋出異常了。使用setQueryTimeout(10)時一定要把時間設置的長一些,如60秒以上。只要不導致線程長期阻塞,就可以。太短了容易拋出,“ORA-01013: 用戶請求取消當前的操作”的異常

JDBC實現setQueryTimeout的原理:

[java]

class IfxCancelQueryImpl extends TimerTask

implements IfmxCancelQuery

{

IfxStatement stmt;

Timer t = null;

public void startCancel(IfxStatement paramIfxStatement, int paramInt)

throws Exception

{

this.stmt = paramIfxStatement;

this.t = new Timer(true);

this.t.schedule(this, paramInt * 1000);

}

public void run()

{

try

{

this.stmt.cancel();

this.t.cancel();

}

catch (SQLException localSQLException)

{

this.t.cancel();

throw new Error(localSQLException.getErrorCode() + ":" + localSQLException.getMessage());

}

}

}

如何配置MySQL數據庫超時設置

大規模多線程操作事務的時候,有時候打開一個鏈接,會進行等待,這時候如果數據庫的超時時間設置的過短,就可能會出現,數據鏈接自動被釋放,當然設置過大也不好,慢SQL或其他因素引起的鏈接過長,導致整個系統被拖慢,甚至掛掉。SO,適當的設置超時時間。設置方法:

SHOW GLOBAL VARIABLES LIKE '%timeout%'

SET GLOBAL wait_timeout=10000

網頁鏈接

mysql怎么設置超時時間

MYSQL_OPT_READ_TIMEOUT 是 MySQL c api 客戶端中用來設置讀取超時時間的參數。在 MySQL 的官方文檔中,該參數的描述是這樣的:

MYSQL_OPT_READ_TIMEOUT (argument type: unsigned int *)The timeout in seconds for each attempt to read from the server. There are retries if necessary, so the total effective timeout value is three times the option value. You can set the value so that a lost connection can be detected earlier than the TCP/IPClose_Wait_Timeout value of 10 minutes.

也就是說在需要的時候,實際的超時時間會是設定值的 3 倍。但是實際測試后發現實際的超時時間和設置的超時時間一致。

而具體什么時候發生三倍超時,在文檔中沒有找到。所以對 MySQL 5.7.20 的源碼進行了一些分析。

使用 GDB 調試代碼找了實際與 mysql server 通信的代碼,如下:

請點擊輸入圖片描述

其中 vio_read() 函數中,使用 recv 和 poll 來讀取報文和做讀取超時。net_should_retry() 函數只有在發生 EINTR 時才會返回 true。從這段代碼來看是符合測試結果的,并沒有對讀取進行三次重試。只有在讀取操作被系統中斷打斷時才會重試,但是這個重試并沒有次數限制。

從上面代碼的分析可以看出,代碼的邏輯和文檔的描述不符。于是在一頓搜索后,找到了一個 MySQL 的 BUG(Bug #31163)。該 BUG 報告了在?MySQL?5.0 中,MySQL c api 讀取的實際超時時間是設置的三倍,與現有文檔描述相符。于是對 MySQL 5.0.96 的代碼又進行分析。

同樣使用 GDB 找到了通信部分的代碼。這次找到了重試三次的代碼,如下:

請點擊輸入圖片描述

這個版本的 MySQL api 的讀寫超時是直接使用的 setsockopt 設置的。第一次循環,在 A 點發生了第一次超時(雖然注釋寫的非阻塞,但是客戶端的連接始終是阻塞模式的)。然后在 B 點將該 socket 設置為阻塞模式,C 點這里重置 retry 次數。由于設置了 alarm 第二次以后的循環會直接進入 D 點的這個分支,并且判斷循環次數。作為客戶端時net-retry_count 始終是 1,所以重試了兩次,共計進行了 3 次 vioread 后從 E 點退出函數。

由上面的分析可知,MySQL 文檔對于該參數的描述已經過時,現在的 MYSQL_OPT_READ_TIMEOUT 并不會出現三倍超時的問題。而 Bug #31163 中的處理結果也是將文檔中該參數的描述更新為實際讀取超時時間是設定時間的三倍。也許是 MySQL 的維護者們在后續版本更新時忘記更新文檔吧。

mysql可以自定義超時嗎

connect_timeout:連接響應超時時間。服務器端在這個時間內如未連接成功,則會返回連接失敗。

wait_timeout:連接空閑超時時間。與服務器端無交互狀態的連接,直到被服務器端強制關閉而等待的時間??梢哉J為是服務器端連接空閑的時間,空閑超過這個時間將自動關閉。

interactive_timeout :連接空閑超時時間。與服務器端無交互狀態的連接,直到被服務器端強制關閉而等待的時間。

interactive_timeout和wait_timeoutu意義雖然相同,但是有使用對象有本質的區別。interactive_timeout針對交互式連接(比如通過mysql客戶端連接數據庫),wait_timeout針對非交互式連接(比如一般在PHP中使用PDO連接數據庫,當然你可以設置CLIENT_INTERACTIVE選項來改變)。所謂的交互式連接,即在mysql_real_connect()函數中使用了CLIENT_INTERACTIVE選項。

net_read_timeout :數據讀取超時時間。在終止讀之前,從一個連接獲得數據而等待的時間秒數;當服務正在從客戶端讀取數據時,net_read_timeout控制何時超時。即客戶端執行數據讀取,等待多少秒仍未執行成功時自動斷開連接。

net_write_timeout:數據庫寫超時時間。和net_read_timeout意義類似,在終止寫之前,等待多少秒把block寫到連接;當服務正在寫數據到客戶端時,net_write_timeout控制何時超時。

slave-net-timeout:從庫延后同步的時間,當slave認為連接master的連接有問題時,就等待N秒,然后斷開連接,重新連接master

slave-net-timeout在主從同步時從庫上起作用;connect_timeout:在獲取連接階段起作用;interactive_timeout和wait_timeout:在連接空閑階段起作用;net_read_timeout和net_write_timeout:則是在連接執行時起作用。

怎樣配置MySQL數據庫超時設置

mysql命令

查看mysql server超時時間:

msyql show global variables like '%timeout%';

設置mysql server超時時間(以秒為單位):

msyql set global wait_timeout=10;

msyql set global interactive_timeout=10;

MySql執行超時怎么設置

?php

$db-query("SET interactive_timeout = 3600;");

$db-query("SET wait_timeout = 3600;");

?

新聞名稱:MySQL怎么設置超時 mysql連接超時時間查詢
當前URL:http://m.kartarina.com/article6/dodshig.html

成都網站建設公司_創新互聯,為您提供軟件開發、外貿網站建設、、營銷型網站建設網站改版網站內鏈

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都app開發公司
主站蜘蛛池模板: 亚洲VA成无码人在线观看天堂| 无码精品前田一区二区| 亚洲成A人片在线观看无码3D| 深夜a级毛片免费无码| 久久无码专区国产精品s| 中文字幕亚洲精品无码| 一本色道无码不卡在线观看| 亚洲AV无码国产精品永久一区| 国产V片在线播放免费无码| 久久Av无码精品人妻系列| 妖精色AV无码国产在线看| 中文字幕人成无码人妻| 亚洲av中文无码乱人伦在线咪咕 | 日本无码色情三级播放| 亚洲AV无码成人精品区在线观看| 天堂一区人妻无码| 无码AV中文字幕久久专区| 狠狠爱无码一区二区三区| 亚洲AV无码片一区二区三区| 无码精品A∨在线观看| 亚洲欧洲自拍拍偷午夜色无码| 国产午夜无码片在线观看影院| 一区二区三区无码被窝影院| 无码AV天堂一区二区三区| 亚洲VA中文字幕不卡无码| 亚洲日韩乱码中文无码蜜桃臀网站| 最新亚洲人成无码网www电影| 亚洲av无码兔费综合| 久久AV无码精品人妻糸列| 午夜无码伦费影视在线观看| 国产成人无码18禁午夜福利p | 潮喷失禁大喷水aⅴ无码| 国产av永久精品无码| 无码一区二区波多野结衣播放搜索| av无码久久久久久不卡网站 | 亚洲αⅴ无码乱码在线观看性色 | 无码中文在线二区免费| 亚洲av无码专区首页| 国产精品无码一本二本三本色| 无码日韩人妻AV一区二区三区| 亚洲精品人成无码中文毛片|