約100個のテーブルを持つMySQLWorkbenchモデルを開発用シングルノードクラスターにフォワードエンジニアリングしようとしていますが、51番目のテーブルを作成しているときに、「1114テーブルがいっぱいです」というエラーが発生します。これらのテーブル内のデータはまだありません。
問題はハッシュインデックスのメモリ割り当てに関連しているのではないかと思ったので、制約やインデックスなしでそのテーブルを作成して後で追加しようとしましたが、インデックスを追加しようとした後にエラーが発生したことは驚くことではありません。 、ただし、この一貫性のないメモリ使用量レポートを取得する:
~$ /usr/local/mysql/bin/ndb_mgm -e "ALL REPORT MEMORYUSAGE"
Connected to Management Server at: localhost:1186
Node 1: Data usage is 0%(13 32K pages of total 16000)
Node 1: Index usage is 0%(71 8K pages of total 32032)
私は何かが欠けているに違いないと思いますが、それでもそれが何であるかを理解することはできません。これは私のconfig.iniファイルです:
[NDB_MGMD DEFAULT]
Portnumber=1186
[NDB_MGMD]
NodeId=49
HostName=192.168.122.1
DataDir=/var/lib/MySQL_Cluster/49/
Portnumber=1186
[TCP DEFAULT]
SendBufferMemory=2M
ReceiveBufferMemory=2M
[NDBD DEFAULT]
BackupMaxWriteSize=1M
BackupDataBufferSize=16M
BackupLogBufferSize=4M
BackupMemory=20M
BackupReportFrequency=10
MemReportFrequency=30
LogLevelStartup=15
LogLevelShutdown=15
LogLevelCheckpoint=8
LogLevelNodeRestart=15
DataMemory=500M
IndexMemory=250M
MaxNoOfTables=4096
MaxNoOfTriggers=3500
NoOfReplicas=1
StringMemory=25
DiskPageBufferMemory=64M
SharedGlobalMemory=20M
LongMessageBuffer=32M
MaxNoOfConcurrentTransactions=16384
BatchSizePerLocalScan=512
FragmentLogFileSize=64M
NoOfFragmentLogFiles=16
RedoBuffer=32M
MaxNoOfExecutionThreads=2
StopOnError=false
LockPagesInMainMemory=1
TimeBetweenEpochsTimeout=32000
TimeBetweenWatchdogCheckInitial=60000
TransactionInactiveTimeout=60000
HeartbeatIntervalDbDb=15000
HeartbeatIntervalDbApi=15000
[NDBD]
NodeId=1
HostName=192.168.122.1
DataDir=/var/lib/MySQL_Cluster/1/
[MYSQLD DEFAULT]
[MYSQLD]
NodeId=53
HostName=192.168.122.1
[API]
NodeId=50
HostName=192.168.122.1
何か案は?
マニュアルをさらに深く読み、モデルをInnoDBエンジンに保存し、ndb_size.plを実行した後、これらのパラメーター(デフォルト値があった)が実際には低すぎることがわかりました。
MaxNoOfOrderedIndexes
MaxNoOfUniqueHashIndexes
MaxNoOfAttributes
DataMemoryがないこと以外に、考えられる2つの問題が考えられますが、あなたの場合はそうではないようです。
MaxNoOfConcurrentOperations
。デフォルトは32kですが、最大32k行以上のテーブルにインデックスを作成しようとすると、おそらく低すぎます。そして常に生産には低すぎるtmpdir
のディスク容量が不足しています。 SHOW VARIABLES like 'tmpdir';
は、それが指す場所を示しますまた、本番環境ではNoOfReplicas=1
を使用したMySQLClusterはほとんど意味がないため、これは開発マシンだと思います。