gpt4 book ai didi

python - 优化表后 MySQL 停止

转载 作者:行者123 更新时间:2023-11-30 22:00:30 28 4
gpt4 key购买 nike

当我运行 OPTIMIZE TABLE foo 时,MySQL 似乎在该查询上停滞了。

> show full processlist;
| 798 | root | localhost | turbo | Query | 1 | Waiting for table metadata lock | optimize table foo |

没有其他正在运行的查询。服务器版本为5.5.54

复制:

像这样创建表:

CREATE TABLE `foo` (
`bar` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
CREATE TABLE `bar` (
`faz` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;

像这样创建一个 python 脚本:

# -*- coding: utf-8 -*-
import MySQLdb, time

dbc = MySQLdb.connect(db="turbo", host="localhost", user="", passwd="")
crsr = dbc.cursor(MySQLdb.cursors.DictCursor)
crsr.execute("select count(*) from foo left join bar on bar.faz=foo.bar")
print crsr.fetchall()

# keep connection open
while(1):
time.sleep(1)

在 MySQL-shell 中执行如下查询:

mysql> optimize table foo;

另一个外壳

mysql> show processlist;
+-----+------+-----------+-------+---------+------+---------------------------------+--------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------+-------+---------+------+---------------------------------+--------------------+
| 236 | root | localhost | turbo | Query | 230 | Waiting for table metadata lock | optimize table foo |
| 308 | root | localhost | turbo | Sleep | 232 | | NULL |
| 309 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+-----+------+-----------+-------+---------+------+---------------------------------+--------------------+
3 rows in set (0.00 sec)

此查询永远不会完成。在旧版本的 MySQL、Python、Debian 等上没有问题 - 所以这可能是某个地方的错误,或者由于 API 更改我错过了什么?

编辑:当执行包含已连接 表的查询并且连接保持打开时,这似乎是一个错误。此外,此错误并非每次都会发生 - 在大多数情况下重新启动 python 脚本可能会产生此行为。

问候

科耶

最佳答案

从 1.2.0 开始,MySQLdb 默认禁用自动提交。

因此,通过在创建连接后添加 dbc.autocommit(True) 似乎可以解决这个问题 - 无论如何它没有意义提交选择查询 - 即使在 MyISAM 表上(根本不支持交易)!

我认为这是 MySQLdb 中的一个错误,因为我无法在其他语言中重现类似的行为 - 而且这种行为并非每次都能重现。

关于python - 优化表后 MySQL 停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43568263/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com