Mysql 如果线程非自然死亡,会发生什么?

Mysql 如果线程非自然死亡,会发生什么?,mysql,ruby-on-rails,connection,passenger,pool,Mysql,Ruby On Rails,Connection,Passenger,Pool,我们有8名乘客,每个乘客有20个中转站。应为160最大连接。今天我们的Mysql连接超过300,服务器停止响应 如果线程非自然死亡,会发生什么?如何清理与其关联的数据库连接 如何调试这种情况?如果线程非自然死亡,会发生什么? 如果您在事务下使用您的语句,则未成功事务下的所有语句都将回滚,但如果您单独执行您的语句,则已执行的语句数将保存在db中,而其他未成功的语句则不会,并且数据可以保持一致 如何清理与其关联的数据库连接? 根据我的假设,您的应用程序打开连接的次数超过了要求,并且没有正确关闭。在这

我们有8名乘客,每个乘客有20个中转站。应为160最大连接。今天我们的Mysql连接超过300,服务器停止响应

如果线程非自然死亡,会发生什么?如何清理与其关联的数据库连接

如何调试这种情况?

如果线程非自然死亡,会发生什么? 如果您在事务下使用您的语句,则未成功事务下的所有语句都将回滚,但如果您单独执行您的语句,则已执行的语句数将保存在db中,而其他未成功的语句则不会,并且数据可以保持一致

如何清理与其关联的数据库连接? 根据我的假设,您的应用程序打开连接的次数超过了要求,并且没有正确关闭。在这种情况下,如果您在mysql Administrator中检查连接,那么您将在睡眠模式下获得如此多的连接。所以你可以杀死所有睡眠连接来清理它们

如何调试这种类型的场景? 步骤1:在服务器上启用常规日志:

步骤2:在任何gui工具(如SQLYG等)中执行以下命令

show full processlist;
步骤3:从上面的命令获取第一个睡眠进程:

步骤3:在您的常规日志中查找/grep上面的进程id(假设它是235798)。您可以使用下面的命令

$ cat /var/log/mysqldquery.log | grep 235798 
注意:常规日志文件可以有不同的文件名和路径


上面的命令将向您显示几行,检查您是否正在结束连接,应在行尾显示“quite”语句。通过这种方式,您需要检查几个处于睡眠模式的进程,您可以选择哪种类型的语句/从哪种模块打开额外连接而不关闭,并相应地采取行动。

显示进程列表的
说明了什么?您可以将其与每台机器上的
lsof
输出交叉引用,以查看它们是否实际使用了20台。他们可能会使用更多。