gpt4 book ai didi

mysql - 使用 DBI 和 dbGetQuery 时有没有办法使 MySql 查询超时?

转载 作者:可可西里 更新时间:2023-11-01 06:33:42 25 4
gpt4 key购买 nike

我明白了

dbGetQuery 附带一个默认实现,它调用 dbSendQuery,然后调用 dbFetch,确保结果始终由 dbClearResult 释放。

dbClearResult 释放与结果集关联的所有资源(本地和远程)。在某些情况下(例如,非常大的结果集),这可能是避免耗尽资源(内存、文件描述符等)的关键步骤

但我的团队刚刚经历了一个锁定的表,我们进入 MySQL 以kill pid 我想知道 - 是否有一种方法可以使使用 DBI 提交的查询超时> 包裹?

我正在寻找但找不到

的等价物

dbGetQuery(conn = connection, 'select stuff from that_table', timeout = 90)

我尝试了这个,并在有和没有参数集的情况下分析了函数,但它似乎没有做任何事情;如果 dbClearResult 一直在运行,为什么会这样呢?

最佳答案

如果我没看错您的问题,我的感觉是您需要依靠 MySQL 服务器来实现所需的查询超时。为什么? dbQuery 正在向您希望服务器运行查询和超时的服务器发送客户端请求。

建议的解决方案:

在您提交给 MySQL 数据库的查询中包含语句执行提示。

注意。返回的查询数据可能太大而您无法使用,但这是另一个问题。

MySql 示例:

MAX_EXECUTION_TIME 提示只允许用于 SELECT 语句。它对 SQL 语句在服务器终止之前允许执行多长时间设置了限制 N(以毫秒为单位的超时值)。


MAX_EXECUTION_TIME(N)

超时为 1 秒(1000 毫秒)的示例:

SELECT /*+ MAX_EXECUTION_TIME(1000) */ * FROM t1 INNER JOIN t2 WHERE ...

MAX_EXECUTION_TIME(N) 提示将语句执行超时设置为 N 毫秒。如果此选项不存在或 N 为 0,则应用由 max_execution_time 系统变量建立的语句超时。

MAX_EXECUTION_TIME 提示适用如下:

对于具有多个 SELECT 关键字的语句,例如联合或带有子查询的语句,MAX_EXECUTION_TIME 适用于整个语句并且必须出现在第一个 SELECT .

它适用于只读的SELECT 语句。非只读语句是那些调用存储函数的语句,该函数作为副作用修改数据。

它不适用于存储程序中的 SELECT 语句并被忽略。


我希望上述方法能帮助您朝着正确的方向前进。

关于mysql - 使用 DBI 和 dbGetQuery 时有没有办法使 MySql 查询超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44892294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com