我有一个mysql ndb集群(详情如下) . 问题是当我做最简单的事情,比如恢复使用mysqldump转储的数据库时,它需要一个绝对的年龄! IE 6小时可以恢复745MB大小的数据库,在大约30个表中有大约270万行,这些都是非常标准的东西 .
我找了瓶颈,没有1个CPU核心超载,也没有磁盘,也没有网络,所以为什么这么慢?
仅供参考,在导入数据库时,网络以大约2Mbit / s的速度使用,而ndb节点以每秒大约1MB的速度写入磁盘......几乎没有使用 . 没有交换......数据库完全在内存中......没有一个核心被一个进程最大化......没有等待状态需要注意......
我有两台机器,每台机器有4个四核xeon cpus,32GB内存 . 它们之间有一个mysql集群,节点由virtualbox托管,规格如下:
sql API * 2: 4GB ram 4 cores
sql NDB * 2: 19GB ram 8 cores
management node: 4GB 4 cores
注意:我使用ndbmtd运行NDB节点,sql api节点使用ndb-cluster-connection-pool = 4 param .
有谁知道它为什么这么慢?我根本找不到一个瓶颈?!?
config.ini
[ndb_mgmd default]
DataDir=/var/lib/mysql-cluster
[ndb_mgmd]
HostName=mgm-alpha
NodeId=1
[TCP DEFAULT]
SendBufferMemory=12M
ReceiveBufferMemory=12M
[ndbd default]
NoOfReplicas=2
DataMemory=15000M
IndexMemory=1048M
MaxNoOfConcurrentOperations=100000
RedoBuffer=32M
MaxNoOfAttributes=5000
MaxNoOfOrderedIndexes=1000
TimeBetweenEpochs=500
DiskCheckpointSpeed=20M
DiskCheckpointSpeedInRestart=100M
MaxNoOfExecutionThreads=8
DataDir=/var/lib/mysql-cluster
[ndbd]
HostName=cl1-alpha
NodeId=2
[ndbd]
HostName=cl2-bravo
NodeId=3
[mysqld]
HostName=sq1-alpha
NodeId=4
[mysqld]
HostName=sq1-alpha
NodeId=5
[mysqld]
HostName=sq1-alpha
NodeId=6
[mysqld]
HostName=sq1-alpha
NodeId=7
[mysqld]
HostName=sq2-bravo
NodeId=8
[mysqld]
HostName=sq2-bravo
NodeId=9
[mysqld]
HostName=sq2-bravo
NodeId=10
[mysqld]
HostName=sq2-bravo
NodeId=11
my.cnf on mysql api nodes
[mysqld]
# Options for mysqld process:
ndbcluster
ndb-connectstring=mgm-alpha
default_storage_engine=ndbcluster
ndb-mgmd-host = mgm-alpha:1186
ndb-cluster-connection-pool=4
[mysql_cluster]
# Options for MySQL Cluster processes:
ndb-connectstring=mgm-alpha # location of management server
1 回答
一个原因是ndb集群不能很好地处理大型事务 . 一些答案和提示可以在这里找到:
http://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-limitations-transactions.html
http://johanandersson.blogspot.co.nz/2012/04/mysql-cluster-how-to-load-it-with-data.html