MySQL "max_execution_time" 在 Classic ASP 中使用 ODBC 连接器时默认为 30000ms,并且无法更改
MySQL "max_execution_time" defaults to 30000ms when using the ODBC connector in Classic ASP, and cannot be changed
这个问题已经困扰我好几个月了,我还没有找到解决方案。
在经典 ASP 应用程序中使用 MySQL ODBC 连接器 (8.0) 时,默认 max_execution_time
设置为 30000 毫秒(30 秒),我无法理解如何增加它。
我有一个很大的 table(超过 400,000 行),我每天使用 UPDATE
命令多次执行各种计算,通常这需要不到 30 秒,但是作为table 继续增长我开始看到越来越多的 [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.15]Query execution was interrupted, maximum statement execution time exceeded
错误被记录。
我在寻找解决方案时总是遇到相同的答案:
在my.ini
中设置max_execution_time = x
或执行SET [GLOBAL]/[SESSION] max_execution_time = x;
之前
运行 一个 SQL 命令。
这些解决方案工作正常,但仅当您使用 MySQL 客户端(例如 MySQL Workbench)时,但在 Classic 中使用 ODBC 连接器时它们没有区别ASP申请。
下面的代码会一直输出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
在 Classic ASP.
中使用 ODBC 连接器访问 MySQL 时保持 30000ms
我确实在 2016 年的 MySQL 网站上找到了 the following bug report and discussion,那里的人们报告了与经典 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 参数。 属性 配置驱动程序等待查询执行的时间。
这个问题已经困扰我好几个月了,我还没有找到解决方案。
在经典 ASP 应用程序中使用 MySQL ODBC 连接器 (8.0) 时,默认 max_execution_time
设置为 30000 毫秒(30 秒),我无法理解如何增加它。
我有一个很大的 table(超过 400,000 行),我每天使用 UPDATE
命令多次执行各种计算,通常这需要不到 30 秒,但是作为table 继续增长我开始看到越来越多的 [MySQL][ODBC 8.0(w) Driver][mysqld-8.0.15]Query execution was interrupted, maximum statement execution time exceeded
错误被记录。
我在寻找解决方案时总是遇到相同的答案:
在
my.ini
中设置或执行
SET [GLOBAL]/[SESSION] max_execution_time = x;
之前 运行 一个 SQL 命令。
max_execution_time = x
这些解决方案工作正常,但仅当您使用 MySQL 客户端(例如 MySQL Workbench)时,但在 Classic 中使用 ODBC 连接器时它们没有区别ASP申请。
下面的代码会一直输出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
在 Classic ASP.
我确实在 2016 年的 MySQL 网站上找到了 the following bug report and discussion,那里的人们报告了与经典 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 参数。 属性 配置驱动程序等待查询执行的时间。