在经典 ASP 中使用 ODBC 连接器时,MySQL“max_execution_time”默认为 30000ms,并且无法更改

Ada*_*dam 5 odbc mysql-connector asp-classic

这个问题已经困扰我几个月了,而且我还没有找到解决方案。

在经典 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 = xmy.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
Run Code Online (Sandbox Code Playgroud)

我遇到的另一个解决方案是使用:

SELECT /*+ MAX_EXECUTION_TIME(x) */ FROM TABLE...

但这仅适用于只读 SELECT 语句,不适用于 UPDATE 命令。

我改变什么似乎并不重要,无论是在 MySQL ODBC 数据源配置中、连接字符串的更改还是 MySQL ini 文件中,max_execution_time在经典 ASP 中使用 ODBC 连接器访问 MySQL 时,仍然保持在 30000ms。

我确实在 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
Run Code Online (Sandbox Code Playgroud)

输出:max_execution_time: 120000

Sha*_*dow 5

在执行查询之前增加ADO Connection 或 Command 对象的CommandTimeout参数。此属性配置驱动程序等待查询执行的时间。