【发布时间】:2010-09-12 16:43:49
【问题描述】:
我有一个带有通用 NFS 挂载的 22 台机器集群。在每台机器上,我都可以启动一个新的 MySQL 实例。我创建了一个包含大约 7100 万个条目的表,并开始了 ADD INDEX 操作。已经12个多小时了,手术还在继续。因此,我登录到集群中的其他一台机器上,在该机器上的 MySQL 守护程序上启动了一个新实例,使用:
mysqld_safe --user=username
然后在同一台机器上创建了一个 MySQL 客户端来连接数据库。问题是,我使用的正是我在第一台机器上启动客户端时使用的语句:
mysql --socket=/homes/username/mysql/mysql/tmp/mysql.sock -u root -p
我能够按预期看到来自该客户端的所有数据库和表(由于底层 NFS 挂载)。现在,如果我想创建一个新表或更改一个表(当前正在添加索引的表除外),我有两个问题:
- 这是正确的方法吗? 利用集群?或者更确切地说,假设我面前有一个相当大的数据挖掘任务,我该如何设置 MySQL(在集群上没有 root 权限)来加快任务?
- 我用来连接mysql的语句使用与第一台机器相同的mysql.sock文件。这意味着什么?我的意思是,我最终会面临任何奇怪的情况吗?
- 我会获得任何性能提升还是最终会 减慢索引操作 发生在不同的地方 机器?
【问题讨论】:
-
你是说你正在运行几个mysql实例,指向NFS挂载上的相同数据库文件?
-
@nos:目前还没有几个,只有 2 个。我从没想过认为 MySQL 会抛出错误会起作用,但它让我创建了一个实例。
-
在考虑集群数据库服务器之前,您是否分析过瓶颈?你的内存用完了吗? CPU 耗尽还是磁盘/网络性能有问题?
-
@Albin:查看
top的输出告诉我:69084 26m 4416 S 11.7 2.6 84:10.43 mysqld表明内存或 CPU 都没有被 100% 使用,所以我猜测问题出在网络上,但随后一切在本地连接。你有什么建议吗?
标签: sql mysql database optimization cluster-computing