我对 MySQL Cluster 有所了解。
我有一张桌子:
- 共 38 个字段
- 22个字段被描述为22个索引(字段类型:int)
- 其他字段 double 和 bigint 值
- 该表没有定义主键
我的环境(10 个节点):
- 数据节点:8 个(AWS EC2 实例,m4.xlarge 16GB RAM,750GB HDD)
- 管理节点:2(AWS EC2 实例,m4.2xlarge 32GB RAM)
- sql节点:2(与管理节点相同的VM)
MySQL 集群设置 (config.ini) 设置为:
[NDBD DEFAULT]
NoOfReplicas=2
ServerPort=2200
Datadir=/storage/data/mysqlcluster/
FileSystemPathDD=/storage/data/mysqlcluster/
BackupDataDir=/storage/data/mysqlcluster//backup/
#FileSystemPathUndoFiles=/storage/data/mysqlcluster/
#FileSystemPathDataFiles=/storage/data/mysqlcluster/
DataMemory=9970M
IndexMemory=1247M
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=39
RedoBuffer=64M
TransactionBufferMemory=8M
TimeBetweenGlobalCheckpoints=1000
TimeBetweenEpochs=100
TimeBetweenEpochsTimeout=0
### Params for LCP
MinDiskWriteSpeed=10M
MaxDiskWriteSpeed=20M
MaxDiskWriteSpeedOtherNodeRestart=50M
MaxDiskWriteSpeedOwnRestart=200M
TimeBetweenLocalCheckpoints=20
### Heartbeating
HeartbeatIntervalDbDb=15000
HeartbeatIntervalDbApi=15000
### Params for setting logging
MemReportFrequency=30
BackupReportFrequency=10
LogLevelStartup=15
LogLevelShutdown=15
LogLevelCheckpoint=8
LogLevelNodeRestart=15
### Params for BACKUP
BackupMaxWriteSize=1M
BackupDataBufferSize=24M
BackupLogBufferSize=16M
BackupMemory=40M
### 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
### 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
BatchSizePerLocalScan=512
将75M记录导入我的表后,我收到错误(表 'test_table' 已满)并且无法再将数据导入表。我不明白为什么会这样。
我查看 information_scheme 可以看到avg_record_size是244。全表大小为:~19G
此外,如果我查看每个数据节点上使用的 DataMemory,我会看到:~94%。使用的索引内存为:~22%
但我有 8 个数据节点,DataMemory 总计 *8*9970M = 80GB*
我的表只有 19GB。所以即使我有复制品。使用的内存为:19*2=38GB。
有人可以解释一下是什么情况。以及如何配置集群并导入最大可能的记录。生产中的完整表将有:330 亿条记录。
对于给定集群上的测试,我需要测试100M和1B数据集。
谢谢。