0

我的问题是当我向实时数据库添加新列时,MySQL 遇到“连接太多”错误。

该数据库有 100 万条记录,因此添加它需要一段时间。

  • 表锁定的原因是什么?
  • 怎么做才能让桌子保持运转?

我在有 100 万条记录的表上执行的查询(InnoDB)

ALTER TABLE table_name 
ADD COLUMN new_table_column INT(11) NULL 
DEFAULT NULL ;

谢谢!

4

2 回答 2

0

众所周知,mysql 在添加列方面速度很慢。

据我所知,所有数据库在添加列时都会锁定表,因为它们正在更改磁盘上的布局并且需要大量 I/O。

通常,它很慢(尤其是使用 mysql),它在生产中完成的方式是使用额外的列创建一个新表,复制数据,重命名表并开始使用新表。您当然会在执行此操作时停止写访问,但完成工作要快得多。

于 2012-11-06T18:34:54.973 回答
0

尝试运行show processlist;以查看连接是什么。 http://dev.mysql.com/doc/refman/5.1/en/show-processlist.html

我也会看看你的 mysql 配置,特别是检查 max_connections 设置。更改该设置将需要重新启动 mysql 服务器。 http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html

InnoDB 需要一个表锁,对此您无能为力。

看看这些关于如何做到这一点的一些想法:

针对 InnoDB 的 ALTER TABLE 优化 MySQL

ALTER TABLE 不锁定表?

于 2012-11-06T18:26:57.440 回答