MySQL群集:“表已满”,并带有磁盘存储

时间:2019-03-30 15:11:31

标签: mysql-cluster

我对MySQL群集有问题。

我创建了一个表以便存储在磁盘中,但我认为它始终存储在内存中。

我已经使用以下查询创建了一个表:

   CREATE TABLE IF NOT EXISTS user (
  `FIELD_KEY` varchar(255) NOT NULL,
  `FIELD0` text,
  `FIELD1` text,
  `FIELD2` text,
  `FIELD3` text,
  `FIELD4` text,
  `FIELD5` text,
  `FIELD6` text,
  `FIELD7` text,
  `FIELD8` text,
  `FIELD9` text,
  PRIMARY KEY (FIELD_KEY)
) ENGINE=ndbcluster DEFAULT CHARSET=utf8 max_rows=40000000 
TABLESPACE ts_1 STORAGE DISK;


ALTER TABLE usertable4M PARTITION BY KEY() PARTITIONS 4

我的环境(同一虚拟机中的3个节点):

MySQL Cluster 7.5

  • 管理节点:1
  • 数据节点:1
  • sql节点:1

VM Config:16GB RAM,100GB HDD

MySQL群集设置(config.ini)设置为:

[ndbd default]
noofreplicas=1
DataMemory=2048M
# Memory to allocate for index storage
IndexMemory=1024M
# To support multi-thread processors
MaxNoOfExecutionThreads=2
FragmentLogFileSize=256M
NoOfFragmentLogFiles=12
#-------
RedoBuffer=32M
SharedGlobalMemory=256M
DiskPageBufferMemory=4096M
NoOfFragmentLogParts = 4
#-------
[ndb_mgmd]
HostName=192.168.1.10
DataDir=/var/lib/mysql-cluster

[ndbd]
HostName=192.168.1.10
NodeId=2
DataDir=/usr/local/mysql/data

[mysqld]
HostName=192.168.1.10

为了将数据存储在磁盘中,我使用以下查询创建了LOGFILE和TABLESPACE:

CREATE LOGFILE GROUP lg ADD UNDOFILE 'undo1.dat'
INITIAL_SIZE=12288M 
UNDO_BUFFER_SIZE=32M
ENGINE=NDB;

CREATE TABLESPACE ts_1
ADD DATAFILE 'data1.dat'
USE LOGFILE GROUP lg
INITIAL_SIZE=256M
ENGINE=NDB;

ALTER TABLESPACE ts_1 ADD DATAFILE 'data2.dat' INITIAL_SIZE=256M ENGINE=NDB;
.
.
.
ALTER TABLESPACE ts_1 ADD DATAFILE 'data24.dat' INITIAL_SIZE=256M ENGINE=NDB;

MemoryUsage报告

$ sudo ndb_mgm -e 'all report MemoryUsage'
Connected to Management Server at: 192.168.1.10:1186
Node 2: Data usage is 94%(62259 32K pages of total 65536)
Node 2: Index usage is 2%(2801 8K pages of total 131104)

我运行查询以向表中插入4000000条记录(4GB)时出现错误(表“用户”已满),并且无法再向表中插入数据,仅插入了1611787条记录。我不明白为什么会这样。

有人可以告诉我这是什么情况。以及如何解决该问题。

1 个答案:

答案 0 :(得分:0)

“在“磁盘数据”表中,TEXT或BLOB列的前256个字节存储在内存中;仅其余部分存储在磁盘上。”

您可以详细检查this