这个问题已经困扰我几个月了,而且我还没有找到解决方案。
在经典 ASP 应用程序中使用 MySQL ODBC 连接器 (8.0) 时,默认的
max_execution_time
设置为 30000 毫秒(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;
运行 SQL 命令。这些解决方案工作正常,但仅当您使用 MySQL 客户端(例如 MySQL Workbench)时才有效,但在经典 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文件中,当使用ODBC连接器访问MySQL时
max_execution_time
仍然保持在30000ms经典 ASP。
我确实在 2016 年的 MySQL 网站上找到了以下错误报告和讨论,人们在使用经典 ASP 时报告了 ODBC 5.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
在执行查询之前增加 ADO Connection 或 Command 对象的 CommandTimeout 参数。此属性配置驱动程序等待查询执行的时间。
从 SQL 查询中,我们也可以增加执行时间。
假设我们想将执行时间增加到 60 秒:
SET SESSION MAX_EXECUTION_TIME=60000;