Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Azure虚拟机似乎扼杀了长时间运行的MySql查询_Python_Mysql_Node.js_Azure - Fatal编程技术网

Python Azure虚拟机似乎扼杀了长时间运行的MySql查询

Python Azure虚拟机似乎扼杀了长时间运行的MySql查询,python,mysql,node.js,azure,Python,Mysql,Node.js,Azure,在使用MySql(Aurora)时,我开始注意到奇怪的查询丢失了,工作人员永远挂在那里。经过一些调查,似乎在AWS中运行相同的代码是可以的,但在Azure上它只是永远挂起 原因似乎是Azure简单地杀死了空闲的连接(比如长时间运行的查询)。请注意,我可以在前面甚至没有负载平衡器的VM上重现这一点 这可以通过以下date&&time mysql-h$SERVER-u$USER-D mydb-p$PASS-e“SELECT SLEEP(260);” 注意,我用240250测试了它,在260时它就死了

在使用MySql(Aurora)时,我开始注意到奇怪的查询丢失了,工作人员永远挂在那里。经过一些调查,似乎在AWS中运行相同的代码是可以的,但在Azure上它只是永远挂起

原因似乎是Azure简单地杀死了空闲的连接(比如长时间运行的查询)。请注意,我可以在前面甚至没有负载平衡器的VM上重现这一点

这可以通过以下
date&&time mysql-h$SERVER-u$USER-D mydb-p$PASS-e“SELECT SLEEP(260);”

注意,我用240250测试了它,在260时它就死了。 但不只是死,挂,永远!看起来Azure甚至懒得告诉套接字挂起,所以MySql客户端挂起

我们有从NodeJs和Python运行的查询,所以如果可能的话,我需要一个在这两者中都能工作的解决方案


这里有一个很好的例子:(注意,我必须在另一个会话中杀死mysql,它才能真正发布)

经过一些研究,我找到了一个低级别的解决方法,它应该总是有效的,我向任何二进制文件中注入一个lib,使用LD_PRELOAD使所有套接字保持活动状态。我注入的库是旧库的分支:

构建库后,我运行:
date&&time DD\u DEBUG=1 DD\u TCP\u KEEPALIVE\u time=4 DD\u TCP\u KEEPALIVE\u INTVL=5 DD\u TCP\u KEEPALIVE\u probe=6 LD\u PRELOAD=/usr/lib/libdontdie.so mysql-h$SERVER-u$USER-D mydb-p$PASS-e“选择睡眠(300)”


并且它可以按预期工作(在azure中的VM和AKS中的docker映像上都进行了测试)。

是否有类似的配置参数可用于为长时间运行的查询配置阈值。另外,我认为应该终止查询,而不是关闭套接字连接。Socket可以被不同的查询重用。@AnkitDeshpande虽然它会使查询失败,而不是挂起,但我希望有什么东西能够真正修复它,而不仅仅是缓解挂起。你在寻找什么样的修复方法,查询应该无限期地运行直到完成?是的,有时我们会遇到需要4分钟以上才能完成的查询。通常避免长时间运行的查询是一种很好的做法。尝试优化您的查询,您可能会将其分解为多个批次。应该有一些阈值,您需要进行配置,以允许查询最多运行4分钟。