2

MySQL Cluster について理解しています。

私は1つのテーブルを持っています:

  • 合計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 Cluster 設定 (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のレコードをインポートした後、エラー ( The table 'test_table' is full ) が発生し、テーブルにデータをインポートできなくなりました。なぜそうなのか、私にはわかりません。

information_scheme を見ると、avg_record_size244であることがわかります。テーブル全体のサイズ: ~19G

また、各データ ノードで使用される DataMemory を見ると、~94%と表示されます。使用される IndexMemory は: ~22%

しかし、DataMemory の合計が *8*9970M = 80GB* の 8 つのデータ ノードがあります。

私のテーブルは19GBのみです。だから私もレプリカを持っています。使用されるメモリは次のようになります: 19*2=38GB。

誰かが状況を説明してくれませんか。また、どのようにクラスターを構成し、最大の可能なレコードをインポートできますか? 本番環境の完全なテーブルには、330 億のレコードが含まれます。

特定のクラスターでのテストでは、100Mおよび1Bのデータ セットをテストする必要があります。

ありがとう。

4

0 に答える 0