问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C#连接mysql数据库,怎么设置超时时间

发布网友 发布时间:2022-04-23 16:03

我来回答

3个回答

热心网友 时间:2022-04-08 21:51

MySQL查询超时的设置方法

为了优化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.schele(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());
}
}
}

热心网友 时间:2022-04-08 23:09

在连接字符串中添加Connection Timeout=N(N为几秒),超过之后就触发exception

热心网友 时间:2022-04-09 00:44

不会设置啊
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
vivo y3t手机能拨打和接听电话,不能收发短信 vivoy3t手机突然接收不到短信 vivoy3短信消息怎么提醒 无奈什么意思是什么 怎样让炒出的丝瓜不发黑? 钟表是以什么计量时间 钟表以( )、()、( )计量时间。 钟表以( )、()、( )单位计量时间 紫荆花开放时间 《青春 须臾成殇》渭伊的txt全集下载地址 mysql_connect()连接数据库超时设置 mysql长时间不操作会不会连接超时?怎么改? 使用DBeaver连接mysql数据库,一段时间过后,会连接超时 如何解决MySQL连接超时关闭 mysql数据库连接超时怎么办 1岁4个月的孩子,如何科学早教 mysql可以自定义超时吗 要是给四个月的宝宝做早教,小步在家早教怎么样啊到底? 骏步跑步机故障代码E01是什么意思,如何处理?谢谢。 舒华跑步机开机后出现e01故障,怎么办? 宝宝4个月,妈妈要去上班,怎么做早教? 优步跑步机显示E01不通电该怎么办 四个月宝宝怎样做早教及怎样护理? 跑步机代码E01.不工作滴滴响 亿健跑步机E01故障代码什么意思求大神指的 亿健跑步机故障e01怎么排除? T600跑步机,出现E10故障怎么办? 我家宝宝刚出生4个月,现在给宝宝进行早教会不会太早?大家是宝宝多大开始... 跑步机出现E1故障什么意思。 乔山T2101 跑步机出现E01怎么回事跑步机报错维修 MySQL数据库设置时,一直提示数据库连接失败,怎么解决,求教大神 mysql连接数,缓存区大小,连接超时时间如何设置呢? 笔记本电脑无线显示已连接上不了网 拍照手机哪款好用一点? 笔记本电脑显示无线功能关闭 怎么打开? 一只手怎么拿手机拍照? 像我一般常听歌看视频拍照的,而且手机更换频率比较高的(一般一年左右)而且平时一玩就半天的,买什么手 寂寞沙洲冷歌词 笔记本电脑无线网络显示连接不可用应该怎么办? 求分享周传雄小刚-寂寞沙洲冷mp3格式百度云 小米红米手机怎么用手机照相机左手照右手或者右手照左手。好像无法按按... 周传雄《寂寞沙洲冷》的歌词? 手机拍照需要什么技巧 自你走后心憔悴白色油桶风中纷飞什么歌 笔记本电脑的无线wifi显示不出来怎么办 寂寞沙洲冷(寂寞沙州冷)歌词 手势拍照怎么操作? 寂寞沙洲冷的歌词? 惠普笔记本电脑的无线显示关闭怎么打开? 横向表格怎么制作