一条SQL查询语句是如何执行的?( 五 )

连接完成后 , 如果你没有后续的动作 , 这个连接就处于空闲状态 , 你可以在 show processlist 命令中看到它 。 文本中这个图是 show processlist 的结果 , 其中的 Command 列显示为“Sleep”的这一行 , 就表示现在系统里面有一个空闲连接 。

客户端如果太长时间没动静 , 连接器就会自动将它断开 。 这个时间是由参数 wait_timeout 控制的 , 默认值是 8 小时 。

如果在连接被断开之后 , 客户端再次发送请求的话 , 就会收到一个错误提醒: Lost connection to MySQL server during query 。 这时候如果你要继续 , 就需要重连 , 然后再执行请求了 。

数据库里面 , 长连接是指连接成功后 , 如果客户端持续有请求 , 则一直使用同一个连接 。 短连接则是指每次执行完很少的几次查询就断开连接 , 下次查询再重新建立一个 。

建立连接的过程通常是比较复杂的 , 所以我建议你在使用中要尽量减少建立连接的动作 , 也就是尽量使用长连接 。

但是全部使用长连接后 , 你可能会发现 , 有些时候 MySQL 占用内存涨得特别快 , 这是因为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的 。 这些资源会在连接断开的时候才释放 。 所以如果长连接累积下来 , 可能导致内存占用太大 , 被系统强行杀掉(OOM) , 从现象看就是 MySQL 异常重启了 。

推荐阅读