如何设置mysql的ActiveRecord查询超时?

发布于 2024-10-28 08:20:06 字数 104 浏览 1 评论 0原文

如何在ActiveRecord中设置mysql查询超时?我希望将其设置为非常短的时间,例如 10-15 毫秒。这是针对 Sinatra ruby​​ Web 应用程序的。

谢谢。

How can I set the mysql query timeout in ActiveRecord? I wish to set it to something very short, like 10-15ms. This is for a Sinatra ruby web app.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

下雨或天晴 2024-11-04 08:20:06

好吧,根据 mysql_adapter.rb 中的第 29 行和第 30 行,

  @connection.options(Mysql::OPT_READ_TIMEOUT, @config[:read_timeout]) if @config[:read_timeout]
  @connection.options(Mysql::OPT_WRITE_TIMEOUT, @config[:write_timeout]) if @config[:write_timeout]

我们只需将 read_timeout 和 write_timeout 值添加到 .yaml 数据库配置文件中即可。

因此,

development:
  adapter: mysql
  encoding: utf8
  database: app_development
  pool: 5
  username: root
  password: 
  write_timeout: 1
  read_timeout: 1

应该将读取和写入超时设置为各 1 秒。不幸的是,这不允许您设置亚秒级超时。

Well, it would appear that per these lines 29 and 30 in mysql_adapter.rb,

  @connection.options(Mysql::OPT_READ_TIMEOUT, @config[:read_timeout]) if @config[:read_timeout]
  @connection.options(Mysql::OPT_WRITE_TIMEOUT, @config[:write_timeout]) if @config[:write_timeout]

One need simply only add a read_timeout and write_timeout value to the .yaml database config file.

Thus,

development:
  adapter: mysql
  encoding: utf8
  database: app_development
  pool: 5
  username: root
  password: 
  write_timeout: 1
  read_timeout: 1

Should do the trick to set read and write timeouts of 1 sec apiece. Unfortunately this does not allow you to set sub-second timeouts.

2024-11-04 08:20:06

您还可以在每个连接的基础上设置它,如下所示:

ActiveRecord::Base.connection.instance_variable_get('@connection').instance_variable_set('@read_timeout', 0)

我这样做是为了有一个默认的 read_timeout,但为我的长时间运行的夜间脚本覆盖它。

You could also set it in a per-connection basis like this:

ActiveRecord::Base.connection.instance_variable_get('@connection').instance_variable_set('@read_timeout', 0)

I'm doing this for instance to have a default read_timeout, but override it for my long-running nightly scripts.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文