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 错误被记录。

我在寻找解决方案时总是遇到相同的答案:

这些解决方案工作正常,但仅当您使用 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 参数。 属性 配置驱动程序等待查询执行的时间。