优化系列 | MySQL Cluster 7.2.7内存表和磁盘表对比测试

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

一、准备工作
自从2009年测试MySQL Cluster 7.0之后,就没怎么关注过它,发展实在太慢了,还有很多不靠谱的地方。前阵子退出7.2.7版本后,看了看新特性介绍,号称性能比以往版本高了很多,于是再关注并进行测试。
部署过程不多说,下载PRM包后直接安装即可。共10个节点,其中1个管理节点,其他9个节点同时作为数据和SQL节点,所有节点服务器配置图:
mysql_cluster_tpcc_testing_env_20120925.
MySQL Cluster管理节点关键配置见下:

#
#ndb config.ini
#
[TCP DEFAULT]
SendBufferMemory=32M
ReceiveBufferMemory=32M

[NDB_MGMD DEFAULT]
PortNumber=1186
Datadir=/home/cluster/mgm

[NDB_MGMD]
NodeId=1
Hostname=x.x.x.x
LogDestination=FILE:filename=ndb_1_cluster.log,maxsize=10000000,maxfiles=6
ArbitrationRank=1

[NDBD DEFAULT]
NoOfReplicas=3
Datadir=/home/cluster/data
FileSystemPathDD=/home/cluster/data/diskdata
BackupDataDir=/home/cluster/backup
#FileSystemPathUndoFiles=/home/cluster/data
#FileSystemPathDataFiles=/home/cluster/data
DataMemory=21633M
IndexMemory=2705M
LockPagesInMainMemory=1

#相对应: 一次事务中,可以修改的数据行数
MaxNoOfConcurrentOperations=100000
MaxNoOfConcurrentTransactions=16384

StringMemory=25
MaxNoOfTables=4096
MaxNoOfOrderedIndexes=2048
MaxNoOfUniqueHashIndexes=512
MaxNoOfAttributes=24576
MaxNoOfTriggers=14336

### Params for REDO LOG 
FragmentLogFileSize=256M
InitFragmentLogFiles=SPARSE
NoOfFragmentLogFiles=85
RedoBuffer=64M

TransactionBufferMemory=32M

#TimeBetweenGlobalCheckpoints=1000
TimeBetweenGlobalCheckpoints=100
TimeBetweenEpochs=100

TimeBetweenEpochsTimeout=32000

### Params for LCP 
DiskCheckpointSpeedInRestart=100M
DiskCheckpointSpeed=10M
TimeBetweenLocalCheckpoints=20

### Heartbeating 
HeartbeatIntervalDbDb=1500
HeartbeatIntervalDbApi=1500

### Params for setting logging 
MemReportFrequency=30
BackupReportFrequency=10
LogLevelStartup=15
LogLevelShutdown=15
LogLevelCheckpoint=8
LogLevelNodeRestart=15

### Params for BACKUP 
BackupMaxWriteSize=1M
BackupDataBufferSize=16M
BackupLogBufferSize=4M
BackupMemory=20M

### Params for ODIRECT 
#Reports indicates that odirect=1 can cause io errors (os err code 5) on some systems. You must test.
#ODirect=1

### Watchdog 
TimeBetweenWatchdogCheckInitial=60000

### TransactionInactiveTimeout  - should be enabled in Production 
#TransactionInactiveTimeout=60000
TransactionInactiveTimeout=6000
#TransactionDeadlockDetectionTimeout = 1200
TransactionDeadlockDetectionTimeout = 12000
### New 7.1.10 redo logging parameters 
RedoOverCommitCounter=3
RedoOverCommitLimit=20
### REALTIME EXTENSIONS 
#RealTimeScheduler=1
### REALTIME EXTENSIONS FOR 6.3 ONLY
#SchedulerExecutionTimer=80
#SchedulerSpinTimer=40

### DISK DATA 
SharedGlobalMemory=20M
DiskPageBufferMemory=64M

### Multithreading 
MaxNoOfExecutionThreads=4

### Increasing the LongMessageBuffer b/c of a bug (20090903)
LongMessageBuffer=16M

BatchSizePerLocalScan=512

### REALTIME ASPECTS - THREAD BINDING 
### READ http://johanandersson.blogspot.com/2008/02/mysql-cluster-features-what-they-are.html#realtime
#LockExecuteThreadToCPU=X
#LockMaintThreadsToCPU=Y

[MYSQLD DEFAULT]
DefaultOperationRedoProblemAction=ABORT
BatchSize=512
#BatchByteSize=2048K
#MaxScanBatchSize=2048K

在这里要注意的是,需要多分配一些 API 节点出来,否则启动cluster时候,可能会报告无剩余 nodeid 的错误,这个问题也困扰了我小半天。
顺便提一下,这个配置文件主要依靠免费在线工具生成的,之前发文介绍过:在线生成MySQL Cluster配置文件。该工具的管理员非常负责任,在我生成配置文件后不久,还亲自发邮件问我用的怎么样,有误改进建议,赞。
数据节点和SQL节点配置文件主要内容如下:

#
# ndbcluster
#
#ndb-cluster-connection-pool=4
ndbcluster=1
ndb-connectstring="x.x.x.x:1186"
ndb-force-send=1
ndb-use-exact-count=0
ndb-extra-logging=1
ndb-batch-size=32M
ndb-autoincrement-prefetch-sz=1024
engine-condition-pushdown=1
default-storage-engine=ndbcluster

全部配置完后,就可以启动进行测试了。这个过程相对比较简单,自己看手册就可以,只要记得数据节点上第一次启动要加 --initial 选项即可。

二、测试过程&结果
1.) 创建磁盘表空间
(a) 创建LOGFILE GROUP

create logfile group NDB_LOGGRP ADD UNDOFILE 'NDB_UNDO_01.dbf' 
  INITIAL_SIZE=1024M ENGINE=NDBCLUSTER;

alter logfile group NDB_LOGGRP ADD UNDOFILE 'NDB_UNDO_02.dbf' 
  INITIAL_SIZE=1024M ENGINE=NDBCLUSTER;

注意:

  • 只能有一个logfile group

  • 一次只能添加一个undofile

  • 配置文件中已经设置redo_buffer_size的话,命令行中不可修改或重新设定+

(b) 创建数据表空间组

create tablespace NDB_TBSPC_01 ADD DATAFILE 'NDB_TBSPC_01.dbf' 
  USE LOGFILE GROUP NDB_LOGGRP 
  EXTENT_SIZE = 64M INITIAL_SIZE = 1024M AUTOEXTEND_SIZE = 64M
  ENGINE = NDBCLUSTER;
 
alter tablespace NDB_TBSPC_01 ADD DATAFILE 'NDB_TBSPC_02.dbf' 
  INITIAL_SIZE=1024M ENGINE=NDBCLUSTER;
...
alter tablespace NDB_TBSPC_01 ADD DATAFILE 'NDB_TBSPC_10.dbf' 
  INITIAL_SIZE=1024M ENGINE=NDBCLUSTER;

#类似地,创建 NDB_TBSPC_02,也是10个数据文件,不重复演示

注意:

  • 可以创建多个数据表空间文件

  • 多个数据表空间,包括日志空间,文件不可同名

  • 删除数据表空间前,需要先删除数据文件

共:

  • 1个REDO LOGFILE GROUP,空间2GB;

  • 2个数据表空间,20个数据文件,每个数据文件1GB,共20GB;

2.) TPCC数据初始化
在这里分别测试了10个DW和100个DW的对比情况:
mysql_cluster_tpcc_testing_prepare_20120
可以看到,在初始化阶段,磁盘表并没有比内存表慢多少,比较赞。
其中,磁盘表各表所使用的表空间分配如下:
mysql_cluster_tpcc_testing_prepare_20120

3.) TPCC初始化后各表统计情况对比
执行完TPCC数据初始化后,内存表和磁盘表的各表相关数据统计不完全一样,见下:
mysql_cluster_tpcc_table_status_20120925
原因:暂不清楚,稍后去深入了解下再更新本文。

4.) TPCC并发测试结果对比
执行多次TPCC并发测试,求平均值后,相应结果见下:
mysql_cluster_tpcc_testing_result_201209

小结:从测试结果来看,MySQL Cluster测性能还很差;相同机器配置,改成2块10K RPM SAS盘做RAID 1,1000个DW,TPMC最高都能跑到1900多。而MySQL Cluster的表现确实比较一般,当然了,这和我的测试环境有很大关系,毕竟只是百M网络。不管怎样,MySQL Cluster仍不适用于高并发的OLTP场景,在低并发但要求高可用的场景还比较合适。据说就有不少类似电信企业被忽悠着上了MySQL Cluster,呵呵。
资源有限,以后有机会再进行测试并更新博文,O(∩_∩)O哈哈~

补充:尝试做把一个节点的ndbd和sql进程强行杀掉,内存表总大小约6414MB、磁盘表总大小约:5568MB(事实上数据量是一样的,只是所占存储空间不一样)的场景下,该节点启动恢复数据,总共耗时28分钟,在百兆网络环境下,还是可以接受的。


本文转自叶金荣51CTO博客,原文链接:http://blog.51cto.com/imysql/1879743,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
29天前
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
20 1
|
29天前
|
Java 关系型数据库 数据库连接
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
24 1
|
1月前
|
监控 关系型数据库 MySQL
Flink CDC产品常见问题之使用3.0测试mysql到starrocks启动报错如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
2月前
|
关系型数据库 MySQL Java
Mysql专栏 - 线上调优与压力测试
Mysql专栏 - 线上调优与压力测试
85 0
|
3月前
|
监控 关系型数据库 MySQL
走进RDS之MySQL内存分配与管理(下)
本篇为下篇,主要对MySQL内存限制特性进行解读,代码基于8.0.28。本文将围绕该项工作的改动、设计实现等方面展开介绍。
|
3月前
|
SQL 关系型数据库 MySQL
走进RDS之MySQL内存分配与管理(上)
MySQL的内存分配、使用、管理的模块较多,本篇文章主要介绍InnoDB层和SQL层内存分配管理器,主要包括ut_allocator、mem_heap_allocator和MEM_ROOT,代码版本主要基于8.0.25。
|
14天前
|
测试技术 C语言
网站压力测试工具Siege图文详解
网站压力测试工具Siege图文详解
21 0
|
1月前
|
JavaScript jenkins 测试技术
这10款性能测试工具,收藏起来,测试人的工具箱!
这10款性能测试工具,收藏起来,测试人的工具箱!
|
1月前
|
人工智能 监控 测试技术
利用AI辅助工具提升软件测试效率
【2月更文挑战第17天】 随着科技的不断发展,人工智能(AI)在各个领域的应用越来越广泛。在软件测试领域,AI技术也发挥着重要作用。本文将探讨如何利用AI辅助工具提升软件测试效率,包括自动化测试、智能缺陷识别和预测等方面。通过引入AI技术,软件测试过程将变得更加高效、准确和可靠。
178 1
|
1月前
|
测试技术
现代软件测试中的自动化工具与挑战
传统软件测试面临着越来越复杂的系统架构和不断增长的测试需求,自动化测试工具应运而生。本文将探讨现代软件测试中自动化工具的应用和挑战,深入分析其优势与局限性,为软件测试领域的发展提供思路和启示。