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

标签 mysql r jdbc timeout r-dbi

我明白了

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/

相关文章:

r - Stringr 函数或 gsub() 来查找 x 数字字符串并提取前 x 数字?

r - 具有五个参数的非线性模型 (w/nls R)

java - 如何使用 JDBC 将 Java 应用程序连接到 db4free.net?

java - 预装 pax-jdbc-oracle 的自定义 Apache Karaf 4.0.4 发行版

mysql - 在我的sql中同一列下配对日期

php - 我如何知道以表单传递的值或数组

mysql - PHPMyAdmin 工作但无法接收 "Access denied for user ' ' @'localhost'(使用密码 : NO)"error

MySQL GIS 和 Spatial Extensions - 如何映射区域并针对它们进行查询

regex - gsub 速度与图案长度

java - Ubuntu 上的 Glassfish JDBC 连接池问题