MySQL NDB 集群无缘无故变慢

Posted

技术标签:

【中文标题】MySQL NDB 集群无缘无故变慢【英文标题】:MySQL NDB cluster slow for no reason 【发布时间】:2013-05-16 07:43:45 【问题描述】:

我有一个 mysql ndb 集群(详情如下)。问题是当我做最简单的事情时,例如恢复使用 mysqldump 转储的数据库,它需要一个绝对的时间! IE 需要 6 小时来恢复一个大小为 745MB 且在大约 30 个表中有大约 270 万行的数据库,这些都是非常标准的东西。

我一直在寻找瓶颈,没有 1 个 cpu 核心超载,也没有磁盘,也没有网络,为什么这么慢?

仅供参考,在导入数据库时​​,网络以大约 2Mbit/s 的速度使用,ndb 节点以大约每秒 1MB 的速度写入磁盘......几乎没有被利用。没有交换...数据库完全在内存中...没有单个内核被进程最大化...没有等待状态要注意...。

我有两台机器,每台都有 4 个四核至强 CPU,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 参数。

有人知道它为什么这么慢吗?我根本找不到一个瓶颈?!?

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

mysql api 节点上的 my.cnf

[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

【问题讨论】:

还只是想我应该指出系统的歧化速度很慢。 IE 导入 25Mb 表需要 1 分钟,300Mb 表需要 30 分钟,都大致相同,几个索引,主索引 id 自增。 如果您的评论是任何指标,听起来像是在交换... 我已经检查过了,我可以肯定地说它不是......还有其他工具,如 dstat 显示没有写入/读取的页面,磁盘访问通常约为每秒 2MB 写入,所以不会发生太多事情。 这是 MySQL Cluster 7.3 吗?您是否使用外键(从 7.3 开始允许)?如果是这样,您可以关闭它们并尝试重新加载吗?或者,尝试在数据加载之后构建索引。 【参考方案1】:

一个原因是 ndb cluster 不能很好地处理大型事务。一些答案和提示可以在这里找到:

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

【讨论】:

以上是关于MySQL NDB 集群无缘无故变慢的主要内容,如果未能解决你的问题,请参考以下文章

启动 MySql 集群 ndb_mgm

mysql5.7 NDB集群

MySQL集群架构05分组复制架构和NDB集群架构

Sonarqube - 使用 MySQL NDB 集群

使用“ndb --initial”会导致 MySQL 集群上的数据丢失?

MySQL NDB 集群缓冲区溢出错误