【问题标题】:MySQL Cluster: “The table is full” with disk storageMySQL 集群:“表已满”,带有磁盘存储
【发布时间】:2019-08-21 07:12:20
【问题描述】:

我的 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

我的环境(同一 VM 中的 3 个节点):

MySQL 集群 7.5

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

虚拟机配置:16GB 内存,100GB 硬盘

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;

内存使用报告

$ 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 条记录。我不明白为什么会这样。

谁能解释一下是什么情况。我该如何解决这个问题。

【问题讨论】:

    标签: mysql-cluster


    【解决方案1】:

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

    您可以详细查看this

    【讨论】:

      猜你喜欢
      • 2021-09-12
      • 2015-06-21
      • 1970-01-01
      • 2017-10-06
      • 2019-11-18
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多