我只是想在数据库中的表(main_table)中添加一个名为"location"的列.我运行的命令是
ALTER TABLE main_table ADD COLUMN location varchar (256);
Run Code Online (Sandbox Code Playgroud)
main_table包含> 2,000,000行.它持续运行超过2小时仍未完成.
我试图用来mytop
监视这个数据库的活动,以确保查询没有被其他查询过程锁定,但似乎没有.应该花那么长时间吗?实际上,我刚刚在运行此命令之前重启了机器.现在这个命令仍在运行.我不知道该怎么做.
我有一个表有170,002,225行,约35列和两个索引.我想添加一个列.alter table命令大约需要10个小时.在那段时间内,处理器似乎都不忙,也没有过多的IO等待.这是一款带有大量内存的4路高性能盒子.
这是我能做的最好的吗?有什么我可以看一下在调整db时优化add列吗?
我在本地安装了InnoDB的MySQL 5.5.37和Ubuntu 13.10上的apt-get.我的机器是台式机上的i7-3770 + 32Gb内存+ SSD硬盘.对于仅包含150万条记录的表"mytable",以下DDL查询需要超过20分钟(!):
ALTER TABLE mytable ADD some_column CHAR(1) NOT NULL DEFAULT 'N';
Run Code Online (Sandbox Code Playgroud)
有没有办法改善它?我检查了
show processlist;
Run Code Online (Sandbox Code Playgroud)
它显示它出于某种原因正在复制我的表格.令人不安的是令人不安的.有没有办法关掉这个副本?是否有其他方法可以提高向大表添加列的性能?
除此之外,我的数据库相对较小,只有1.3Gb转储大小.因此它(理论上)应该100%适合记忆.
有设置可以帮助吗?迁移到Precona会改变一切吗?
补充:我有
innodb_buffer_pool_size = 134217728
Run Code Online (Sandbox Code Playgroud) 我有一个带有400万行MyISAM表的MySQL数据库.我每周更新一次这个表约2000个新行.更新后,我然后改变这样的表:
ALTER TABLE x ORDER BY PK DESC
Run Code Online (Sandbox Code Playgroud)
我按主键字段按降序排列表.这对我的开发机器(带3GB内存的Windows)没有任何问题.有三次我在生产Linux服务器上成功尝试过它(512MB内存 - 并且每次大约6分钟就能实现结果排序表),最后一次尝试它我不得不在大约30分钟后停止查询并重建备份数据库.
一个512MB的服务器可以在这么大的表上处理那个alter语句吗?我已经读过创建临时表来执行ALTER TABLE命令.
问题:这个alter命令可以安全运行吗?改变桌子的预计时间应该是多少?