优化系列 | 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,如需转载请自行联系原作者

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
69
分享
相关文章
PyTorch CUDA内存管理优化:深度理解GPU资源分配与缓存机制
本文深入探讨了PyTorch中GPU内存管理的核心机制,特别是CUDA缓存分配器的作用与优化策略。文章分析了常见的“CUDA out of memory”问题及其成因,并通过实际案例(如Llama 1B模型训练)展示了内存分配模式。PyTorch的缓存分配器通过内存池化、延迟释放和碎片化优化等技术,显著提升了内存使用效率,减少了系统调用开销。此外,文章还介绍了高级优化方法,包括混合精度训练、梯度检查点技术及自定义内存分配器配置。这些策略有助于开发者在有限硬件资源下实现更高性能的深度学习模型训练与推理。
62 0
MySQL底层概述—1.InnoDB内存结构
本文介绍了InnoDB引擎的关键组件和机制,包括引擎架构、Buffer Pool、Page管理机制、Change Buffer、Log Buffer及Adaptive Hash Index。
306 97
MySQL底层概述—1.InnoDB内存结构
MySQL细节优化:关闭大小写敏感功能的方法。
通过这种方法,你就可以成功关闭 MySQL 的大小写敏感功能,让你的数据库操作更加便捷。
82 19
MySQL底层概述—8.JOIN排序索引优化
本文主要介绍了MySQL中几种关键的优化技术和概念,包括Join算法原理、IN和EXISTS函数的使用场景、索引排序与额外排序(Using filesort)的区别及优化方法、以及单表和多表查询的索引优化策略。
144 22
MySQL底层概述—8.JOIN排序索引优化
Headless Chrome 优化:减少内存占用与提速技巧
在数据驱动的时代,爬虫技术至关重要。本文聚焦 Headless Chrome 优化方案,解决传统爬虫内存占用高、效率低等问题。通过无界面模式、代理 IP等配置,显著降低资源消耗并提升速度。实际案例中,该方案用于采集汽车点评数据,性能提升明显:内存占用降低 30%-50%,页面加载提速 40%-60%。结合技术架构图与演化树,全面解析爬虫技术演进,助力高效数据采集。
Headless Chrome 优化:减少内存占用与提速技巧
MySQL底层概述—7.优化原则及慢查询
本文主要介绍了:Explain概述、Explain详解、索引优化数据准备、索引优化原则详解、慢查询设置与测试、慢查询SQL优化思路
164 15
MySQL底层概述—7.优化原则及慢查询
MySQL底层概述—5.InnoDB参数优化
本文介绍了MySQL数据库中与内存、日志和IO线程相关的参数优化,旨在提升数据库性能。主要内容包括: 1. 内存相关参数优化:缓冲池内存大小配置、配置多个Buffer Pool实例、Chunk大小配置、InnoDB缓存性能评估、Page管理相关参数、Change Buffer相关参数优化。 2. 日志相关参数优化:日志缓冲区配置、日志文件参数优化。 3. IO线程相关参数优化: 查询缓存参数、脏页刷盘参数、LRU链表参数、脏页刷盘相关参数。
124 12
MySQL底层概述—5.InnoDB参数优化
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
76 9
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
如何快速定位并优化CPU 与 JVM 内存性能瓶颈?
MySQL和SQLSugar百万条数据查询分页优化
在面对百万条数据的查询时,优化MySQL和SQLSugar的分页性能是非常重要的。通过合理使用索引、调整查询语句、使用缓存以及采用高效的分页策略,可以显著提高查询效率。本文介绍的技巧和方法,可以为开发人员在数据处理和查询优化中提供有效的指导,提升系统的性能和用户体验。掌握这些技巧后,您可以在处理海量数据时更加游刃有余。
205 9

热门文章

最新文章