这个问题已经困扰我好几个月了,我还没有找到解决的办法。
在经典ASP应用程序中使用MySQL ODBC连接器(8.0)时,默认的MySQL设置为3000ms(30秒),我不知道如何增加它。
我有一个大表(400,000+行),我每天使用UPDATE
命令多次执行各种计算,通常不到30秒,但是随着表的不断增长,我开始看到越来越多的[MySQL][ODBC 8.0(w) Driver][mysqld-8.0.15]Query execution was interrupted, maximum statement execution time exceeded
错误被记录下来。
在寻找解决方案时,我总是遇到同样的答案:
max_execution_time = x
中设置my.ini
SET [GLOBAL]/[SESSION] max_execution_time = x;
。这些解决方案工作良好,但只在使用MySQL客户端(如MySQL工作台)时才能工作,但在经典ASP应用程序中使用ODBC连接器时,它们没有什么区别。
以下代码将始终输出max_execution_time: 30000
Dim dbConn, dbRS
Set dbConn = Server.CreateObject("ADODB.Connection") : dbConn.Open("DSN=my_system_dsn")
Set dbRS = dbConn.Execute("SHOW VARIABLES WHERE Variable_name = 'max_execution_time';")
Response.Write(dbRS("Variable_name") & ": " & dbRS("Value"))
dbRS.close() : Set dbRS = nothing
dbConn.close() : Set dbConn = nothing
我遇到的另一个解决方案是使用:
SELECT /*+ MAX_EXECUTION_TIME(x) */ FROM TABLE...
但这只适用于只读SELECT语句,而不是UPDATE命令.
不管我更改了什么,无论是在MySQL ODBC数据源配置中,还是在连接字符串中,还是在MySQL ini文件中,当使用max_execution_time
连接器访问经典ASP中的MySQL时,max_execution_time
保持在300000‘s。
我在2016年的MySQL网站上确实发现了MySQL,人们在使用经典ASP时用ODBC5.x连接器报告了同样的问题,但没有人能够提供解决方案。
我只是在想,是否还有其他人遇到过这个问题,并找到了增加max_execution_time
值的方法?
解决方案感谢@Shadow
Dim dbConn, dbRS
Set dbConn = Server.CreateObject("ADODB.Connection")
dbConn.Open("DSN=my_system_dsn")
dbConn.CommandTimeout = 120
Set dbRS = dbConn.Execute("SHOW VARIABLES WHERE Variable_name = 'max_execution_time';")
Response.Write(dbRS("Variable_name") & ": " & dbRS("Value"))
dbRS.close() : Set dbRS = nothing
dbConn.close() : Set dbConn = nothing
输出:max_execution_time: 120000
发布于 2019-08-13 18:01:45
在执行查询之前,增加ADO连接或命令对象的CommandTimeout参数。此属性配置驱动程序等待查询执行的时间。
https://stackoverflow.com/questions/57486689
复制