mysql 5.6 版如何支持命令超时?我正在寻找类似于 ADO .NET 的 CommandTimeout 选项,但在 python
How to support Command Time out in mysql version 5.6? I am looking for a CommandTimeout option similar to that of ADO .NET but in python
我是 python 的新手,想在 mysql (5.6) 中执行 ADO .NET CommandTimeout 属性 的操作(设置查询的执行时间)。
我正在寻找可能默认支持它的任何内置 python 库(我已经尝试过 pymysql、pyodbc 和 mysql.connector)或者最好的方法是什么这样做,以防我不得不从头开始发明轮子。
我正在使用旧的 mysql 版本 (5.6),我强调这一点的原因是在研究中我发现这可以在 mysql 5.7 以后的版本中完成通过使用以下命令
SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
我已经浏览过的参考链接提出了 mysql 5.7 及更高版本的解决方案:
http://mysqlserverteam.com/server-side-select-statement-timeouts/
https://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html#optimizer-hints-execution-time
但我正在 mysql 5.6 中寻找解决方案,在此先感谢。
所以我终于能够通过创建一个 thread/process 来解决这个问题,它是基于计时器调用的,如下所示:
query_monitoring_thread = threading.Timer(self.__command_timeout, self.kill_query,
args=[mydb.connection_id, source])
该线程将获取当前用户创建的所有进程以及执行时间超过命令超时的进程并杀死存在的进程:
cursor.execute(
"Select Id From Information_Schema.Processlist where Id={0} AND User='{1}' AND Time >= {2}".format(
conn_id, conn.user, self.__command_timeout))
records = cursor.fetchall()
if len(records) > 0:
cursor.execute('Kill query ' + str(conn_id))
我是 python 的新手,想在 mysql (5.6) 中执行 ADO .NET CommandTimeout 属性 的操作(设置查询的执行时间)。
我正在寻找可能默认支持它的任何内置 python 库(我已经尝试过 pymysql、pyodbc 和 mysql.connector)或者最好的方法是什么这样做,以防我不得不从头开始发明轮子。
我正在使用旧的 mysql 版本 (5.6),我强调这一点的原因是在研究中我发现这可以在 mysql 5.7 以后的版本中完成通过使用以下命令
SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
我已经浏览过的参考链接提出了 mysql 5.7 及更高版本的解决方案: http://mysqlserverteam.com/server-side-select-statement-timeouts/ https://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html#optimizer-hints-execution-time
但我正在 mysql 5.6 中寻找解决方案,在此先感谢。
所以我终于能够通过创建一个 thread/process 来解决这个问题,它是基于计时器调用的,如下所示:
query_monitoring_thread = threading.Timer(self.__command_timeout, self.kill_query,
args=[mydb.connection_id, source])
该线程将获取当前用户创建的所有进程以及执行时间超过命令超时的进程并杀死存在的进程:
cursor.execute(
"Select Id From Information_Schema.Processlist where Id={0} AND User='{1}' AND Time >= {2}".format(
conn_id, conn.user, self.__command_timeout))
records = cursor.fetchall()
if len(records) > 0:
cursor.execute('Kill query ' + str(conn_id))