【发布时间】:2017-12-07 02:51:47
【问题描述】:
我意识到了
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.)
但是我的团队刚刚经历了一个锁定表,我们进入 MySQL 到 kill pid,我想知道 - 有没有办法让使用 DBI 包提交的查询超时?
我正在寻找但找不到
dbGetQuery(conn = connection, 'select stuff from that_table', timeout = 90)
我试过这个,并分析了有和没有参数集的函数,但它似乎没有做任何事情;如果dbClearResult 一直在起作用,为什么会这样呢?
【问题讨论】:
-
这里有一个解决方案:stackoverflow.com/questions/7891073/…。一般的想法是分叉命令并在主线程中使用
Sys.time(),如果需要太长时间,则使用tools::pskill()。 -
您使用的是哪个引擎(MyISAM 或 InnoDB)?连接器是否等待整个结果集?还是以增量方式提供数据?如果可能,这种选择会对您的问题产生直接影响。
-
d8aninja 提供的信息是否有助于解决您的问题?我只是在检查我是否正确理解了您的问题。
-
是的,你做到了! @Technophobe01
-
哦,太好了。总是乐于提供帮助 - 只是检查。保重。
标签: mysql r jdbc timeout r-dbi