mysql cluster 内存大小_优化系列 | MySQL Cluster 7.2.7内存表和磁盘表对比测试-阿里云开发者社区...

本文详细介绍了MySQL Cluster 7.2.7版本的内存表和磁盘表的性能对比测试。通过创建磁盘表空间、TPCC数据初始化以及并发测试,结果显示在低并发高可用场景下,MySQL Cluster表现良好,但在高并发OLTP场景下性能不足。测试中,磁盘表的初始化速度接近内存表,但总体性能仍不及内存表。
摘要由CSDN通过智能技术生成

一、准备工作

自从2009年测试MySQL Cluster 7.0之后,就没怎么关注过它,发展实在太慢了,还有很多不靠谱的地方。前阵子退出7.2.7版本后,看了看新特性介绍,号称性能比以往版本高了很多,于是再关注并进行测试。

部署过程不多说,下载PRM包后直接安装即可。共10个节点,其中1个管理节点,其他9个节点同时作为数据和SQL节点,所有节点服务器配置图:

mysql_cluster_tpcc_testing_env_20120925.png

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_20120925.png

可以看到,在初始化阶段,磁盘表并没有比内存表慢多少,比较赞。

其中,磁盘表各表所使用的表空间分配如下:

mysql_cluster_tpcc_testing_prepare_20120925.png

3.) TPCC初始化后各表统计情况对比

执行完TPCC数据初始化后,内存表和磁盘表的各表相关数据统计不完全一样,见下:

mysql_cluster_tpcc_table_status_20120925.png

原因:暂不清楚,稍后去深入了解下再更新本文。

4.) TPCC并发测试结果对比

执行多次TPCC并发测试,求平均值后,相应结果见下:

mysql_cluster_tpcc_testing_result_20120925.png

小结:从测试结果来看,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,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值