使用 DBI 和 dbGetQuery 时,有没有办法使 MySql 查询超时?
Is there a way to timeout a MySql query when using DBI and dbGetQuery?
我意识到
dbGetQuery comes with a default implementation that calls dbSendQuery, then dbFetch, ensuring that the result is always freed by dbClearResult.
和
dbClearResult frees all resources (local and remote) associated with a result set. In some cases (e.g., very large result sets) this can be a critical step to avoid exhausting resources (memory, file descriptors, etc.)
但是我的团队刚刚经历了 table 的锁定,我们进入了 MySQL 到 kill pid
,我想知道 - 有没有办法使使用 [= 提交的查询超时=14=]包裹?
我正在寻找但找不到
的等价物
dbGetQuery(conn = connection, 'select stuff from that_table', timeout = 90)
我试过了,并在有和没有参数集的情况下对函数进行了分析,但它似乎没有做任何事情;如果 dbClearResult
总是在玩,为什么会这样?
如果我没看错你的问题,我的感觉是你需要依赖 MySQL 服务器来实现所需的查询超时。为什么? dbQuery
正在向您希望服务器 运行 查询和超时的服务器发送客户端请求。
建议的解决方案:
在您提交给 MySQL 数据库的查询中包含语句执行提示。
nb.返回的查询数据可能太大,您无法使用,但那是另一个问题。
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 语句,将被忽略。
希望以上方法能帮助您朝着正确的方向前进。
我意识到
dbGetQuery comes with a default implementation that calls dbSendQuery, then dbFetch, ensuring that the result is always freed by dbClearResult.
和
dbClearResult frees all resources (local and remote) associated with a result set. In some cases (e.g., very large result sets) this can be a critical step to avoid exhausting resources (memory, file descriptors, etc.)
但是我的团队刚刚经历了 table 的锁定,我们进入了 MySQL 到 kill pid
,我想知道 - 有没有办法使使用 [= 提交的查询超时=14=]包裹?
我正在寻找但找不到
的等价物dbGetQuery(conn = connection, 'select stuff from that_table', timeout = 90)
我试过了,并在有和没有参数集的情况下对函数进行了分析,但它似乎没有做任何事情;如果 dbClearResult
总是在玩,为什么会这样?
如果我没看错你的问题,我的感觉是你需要依赖 MySQL 服务器来实现所需的查询超时。为什么? dbQuery
正在向您希望服务器 运行 查询和超时的服务器发送客户端请求。
建议的解决方案:
在您提交给 MySQL 数据库的查询中包含语句执行提示。
nb.返回的查询数据可能太大,您无法使用,但那是另一个问题。
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 语句,将被忽略。
希望以上方法能帮助您朝着正确的方向前进。