0

我是 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中的解决方案,在此先感谢。

4

1 回答 1

0

所以我终于能够通过创建一个基于计时器调用的线程/进程来解决这个问题,如下所示:

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))
于 2021-05-17T05:18:46.213 回答