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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

一、准备工作
自从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,如需转载请自行联系原作者

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
23天前
|
人工智能 前端开发 测试技术
探索软件测试中的自动化框架选择与优化策略####
本文深入剖析了当前主流的自动化测试框架,通过对比分析各自的优势、局限性及适用场景,为读者提供了一套系统性的选择与优化指南。文章首先概述了自动化测试的重要性及其在软件开发生命周期中的位置,接着逐一探讨了Selenium、Appium、Cypress等热门框架的特点,并通过实际案例展示了如何根据项目需求灵活选用与配置框架,以提升测试效率和质量。最后,文章还分享了若干最佳实践和未来趋势预测,旨在帮助测试工程师更好地应对复杂多变的测试环境。 ####
42 4
|
28天前
|
机器学习/深度学习 前端开发 测试技术
探索软件测试中的自动化测试框架选择与优化策略####
本文深入探讨了在当前软件开发生命周期中,自动化测试框架的选择对于提升测试效率、保障产品质量的重要性。通过分析市场上主流的自动化测试工具,如Selenium、Appium、Jest等,结合具体项目需求,提出了一套系统化的选型与优化策略。文章首先概述了自动化测试的基本原理及其在现代软件开发中的角色变迁,随后详细对比了各主流框架的功能特点、适用场景及优缺点,最后基于实际案例,阐述了如何根据项目特性量身定制自动化测试解决方案,并给出了持续集成/持续部署(CI/CD)环境下的最佳实践建议。 --- ####
|
15天前
|
人工智能 监控 测试技术
探索软件测试中的自动化框架选择与优化策略####
【10月更文挑战第21天】 本文深入剖析了软件测试领域面临的挑战,聚焦于自动化测试框架的选择与优化这一核心议题。不同于传统摘要的概述方式,本文将以一个虚拟案例“X项目”为线索,通过该项目从手动测试困境到自动化转型的成功历程,生动展现如何根据项目特性精准匹配自动化工具(如Selenium、Appium等),并结合CI/CD流程进行深度集成与持续优化,最终实现测试效率与质量的双重飞跃。读者将跟随“X项目”团队的视角,直观感受自动化框架选型的策略性思考及实践中的优化技巧,获得可借鉴的实战经验。 ####
28 0
|
13天前
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
57 31
|
13天前
|
机器学习/深度学习 人工智能 Java
探索软件测试中的自动化框架选择与优化策略####
本文深入探讨了在软件测试领域,面对众多自动化测试框架时,如何根据项目特性、团队技能及长远规划做出最佳选择,并进一步阐述了优化这些框架以提升测试效率与质量的策略。通过对比分析主流自动化测试框架的优劣,结合具体案例,本文旨在为测试团队提供一套实用的框架选型与优化指南。 ####
|
28天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
45 6
|
27天前
|
关系型数据库 MySQL 测试技术
【赵渝强老师】MySQL的基准测试与sysbench
本文介绍了MySQL数据库的基准测试及其重要性,并详细讲解了如何使用sysbench工具进行测试。内容涵盖sysbench的安装、基本使用方法,以及具体测试MySQL数据库的步骤,包括创建测试数据库、准备测试数据、执行测试和清理测试数据。通过这些步骤,可以帮助读者掌握如何有效地评估MySQL数据库的性能。
|
28天前
|
缓存 监控 测试技术
全网最全压测指南!教你如何测试和优化系统极限性能
大家好,我是小米。本文将介绍如何在实际项目中进行性能压测和优化,包括单台服务器和集群压测、使用JMeter、监控CPU和内存使用率、优化Tomcat和数据库配置等方面的内容,帮助你在高并发场景下提升系统性能。希望这些实战经验能助你一臂之力!
54 3
|
28天前
|
监控 安全 程序员
如何使用内存池池来优化应用程序性能
如何使用内存池池来优化应用程序性能
|
28天前
|
存储 监控 Java
深入理解计算机内存管理:优化策略与实践
深入理解计算机内存管理:优化策略与实践