`
san_yun
  • 浏览: 2652466 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

mysql 优化之wait_timeout

 
阅读更多

之前一直没注意到mysql 中的wait_timeout,线上看了一下:

 

mysql> show variables like '%wait_timeout%'
    -> ;
+--------------------------+----------+
| Variable_name            | Value    |
+--------------------------+----------+
| innodb_lock_wait_timeout | 120      |
| table_lock_wait_timeout  | 50       |
| wait_timeout             | 31536000 |
+--------------------------+----------+

 

 

如果你没有修改过MySQL的配置,缺省情况下,wait_timeout 的初始值是28800。

wait_timeout过大有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放,拖累系统性能,不过也不能把这个指设置的过小,否则你可 能会遭遇到“MySQL has gone away”之类的问题,通常来说,我觉得把wait_timeout设置为10是个不错的选择,但某些情况下可能也会出问题,比如说有一个CRON脚本, 其中两次SQL查询的间隔时间大于10秒的话,那么这个设置就有问题了(当然,这也不是不能解决的问题,你可以在程序里时不时mysql_ping一下, 以便服务器知道你还活着,重新计算wait_timeout时间):

 

# vi /etc/my.cnf

[mysqld]
wait_timeout=10

# /etc/init.d/mysql restart

不过这个方法太生硬了,线上服务重启无论如何都应该尽可能避免,看看如何在MySQL命令行里通过SET 来设置:

mysql> set global wait_timeout=10;

mysql> show global variables like 'wait_timeout';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| wait_timeout               | 10    |
+----------------------------+-------+

 

一个容易把人搞蒙的地方是如果查询时使用的是show variables的话,会发现设置好像并没有生效,这是因为单纯使用show variables的话就等同于使用的是show session variables,查询的是会话变量,只有使用show global variables,查询的才是全局变量。

网络上很多人都抱怨说他们set global之后使用show variables查询没有发现改变,原因就在于混淆了会话变量和全局变量,如果仅仅想修改会话变量的话,可以使用类似set wait_timeout=10;或者set session wait_timeout=10;这样的语法。

另一个值得注意的是会话变量wait_timeout初始化的问题,这一点在手册里已经明确指出了,我就直接拷贝了:

On thread startup, the session wait_timeout value is initialized from the global wait_timeout value or from the global interactive_timeout value, depending on the type of client (as defined by the CLIENT_INTERACTIVE connect option to mysql_real_connect()).

MySQL大拿Jeremy Zawodny 曾在他的文章Fixing Poor MySQL Default Configuration Values 里面列出了几个很恶心的MySQL缺省设置,不过没包含wait_timeout,但我觉得它也应该算一个,每次新装MySQL后最好都记得修改它。

 

分享到:
评论

相关推荐

    MySQL wait_timeout连接超时

    MySQL的`wait_timeout`连接超时问题通常出现在长时间无操作的数据库连接上,服务器会自动关闭这些连接以释放资源。这种现象在应用中可能导致突然的数据通信中断,表现为“Communications link failure”等错误,提示...

    MySQL中interactive_timeout和wait_timeout的区别

    总之,`interactive_timeout` 和 `wait_timeout` 是MySQL中控制连接超时的关键设置,理解它们的区别并根据应用需求进行调整,对于优化数据库性能和提高用户体验具有重要意义。在进行调整时,务必考虑并发连接数、...

    关于MySQL的wait-timeout连接超时问题报错解决方案.pdf

    2. 查看 wait_timeout 参数的值:可以通过 SHOW GLOBAL VARIABLES 命令来查看 wait_timeout 参数的值,例如:mysql> show global variables like 'wait_timeout'; 这将显示当前的 wait_timeout 值。 3. 避免使用 ...

    MySQL数据库连接超时(Wait_timeout)问题总结.pdf

    MySQL数据库的连接超时问题,通常表现为Wait_timeout错误,指的是当客户端与服务器之间的连接在指定时间内没有进行任何数据交互,数据库会自动断开这个连接,以释放资源并防止不必要的资源占用。这一特性在MySQL中是...

    解决mysql出现大量TIME_WAIT

    - `net.ipv4.tcp_fin_timeout=30`:缩短TIME_WAIT状态的持续时间,单位为秒。 2. **使配置生效**:执行`sysctl -p`命令,使修改后的参数立即生效。 ### 三、优化MySQL配置 除了系统层面的优化,对MySQL数据库...

    关于MySQL的wait-timeout连接超时问题报错解决方案.docx

    MySQL 连接超时问题是常见的错误之一,解决该问题需要了解 wait_timeout 参数的重要性,并正确地使用 show variables 命令。同时,在使用 Hibernate 框架进行数据库操作时,需要注意连接超时问题,并采取相应的解决...

    mysql提示got timeout reading communication packets的解决方法

    错误提示: user: ‘root’ host: `localhost’ (Got timeout reading communication ...wait_timeout 的默认值这:120 根据情况增加吧. 这两个值是一个全局变量,可以动态增加,如: mysql> set global interactiv

    MySQL性能优化之参数配置.docx

    wait_timeout 参数控制着 MySQL 客户端的数据库连接闲置最大时间值。默认的 wait_timeout 值为 8 小时,这个值太大,可能会导致连接数爆炸。通过修改 wait_timeout 值为 30 分钟,可以减少连接数的爆炸风险。 修改 ...

    mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案

    增加 MySQL 的 wait_timeout 属性的值。 修改 /etc/mysql/my.cnf文件,在 [mysqld] 节中设置: # Set a connection to wait 8hours in idle status. wait_timeout =86400 相关参数,红色部分 mysql> show variables...

    javaee mysql空闲关闭

    然而,为了优化资源使用,MySQL配置了一个参数`wait_timeout`,这个参数定义了连接在空闲多长时间后会被自动关闭。当JavaEE应用中的数据库连接在超过这个设定的时间没有执行任何操作,MySQL服务器会断开这个连接,这...

    还原大备份mysql文件失败的解决方法分享

    2. **wait_timeout** 和 **interactive_timeout**: 这两个参数分别定义了非交互式连接和交互式连接在无活动状态后等待多久关闭。在上述例子中,它们都被设置为2880000秒(约80小时)。这有助于防止长时间运行的还原...

    MySQL和连接相关的timeout 的详细整理

    总的来说,正确配置这些timeout参数对于优化MySQL服务器的性能和稳定性至关重要。需要根据实际的系统负载、网络条件和应用需求来调整这些值,以达到最佳的系统性能和用户体验。例如,如果系统中存在大量长查询,可能...

    解决SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded_runtimeerror怎么修复

    在MySQL数据库操作中,"SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded" 是一个常见的错误,它意味着在执行事务时,系统等待锁定资源的时间超过了预设的限制。这个错误通常发生在并发环境中,当...

    mysql_my.ini_优化

    10. **wait_timeout**:连接在无活动后自动关闭的等待时间。可以根据业务需求调整,例如从28800秒改为7200秒。 优化MySQL配置时,必须考虑到服务器的硬件资源,特别是内存。调整参数后,务必通过重启MySQL服务来...

    MySQL性能优化之参数配置

    本文将深入探讨MySQL性能优化中的关键参数配置,特别是`back_log`、`wait_timeout`、`max_connections`、`max_user_connections`以及`thread_concurrency`等参数的具体含义及其调整方法。 #### 二、关键参数详解 #...

Global site tag (gtag.js) - Google Analytics