Rails MySQL2默认wait_timeout如此巨大

时间:2017-09-08 07:23:39

标签: ruby-on-rails

每当有任何请求时,此查询命令在后端运行这么多次:

SET NAMES utf8,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483

为什么Rails不只是运行一次?

另外,为什么它将wait_timeout设置为2147483,它是如此巨大,如此多的时间,它只是让我的服务器关闭,因为在睡眠模式下有这么多查询超过100小时。

我必须将其更新为180秒。

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  socket: /var/run/mysqld/mysqld.sock
  wait_timeout: 180

我做错了什么。我不知道。

1 个答案:

答案 0 :(得分:8)

  

为什么将wait_timeout设置为2147483

mysql2适配器issue

  

mysql2_adapter使用相同的wait_timeout,但直接将其传递给   mysql,默认为更大的2592000 !!(现在默认为2147483

# increase timeout so mysql server doesn't disconnect us
wait_timeout = @config[:wait_timeout]
wait_timeout = 2147483 unless wait_timeout.is_a?(Fixnum)
variable_assignments << "@@wait_timeout = #{wait_timeout}"

execute("SET #{variable_assignments.join(', ')}", :skip_logging)

Reference