MySQL Cluster: «Таблица заполнена» с дисковым хранилищем - PullRequest
0 голосов
/ 30 марта 2019

У меня проблема с MySQL Cluster.

Я создал таблицу для хранения на диске, но я думаю, что она всегда хранится в памяти.

Я создал таблицус запросом ниже:

   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: 16 ГБ ОЗУ, 100 ГБ HDD

Установлены настройки MySQL Cluster (config.ini)to:

[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 записей (4 ГБ) в мою таблицу, я получаю сообщение об ошибке (таблица «пользователь» заполнена) и больше не могу вставить данные в таблицу, и только 1611787 записей было вставлено.Я не понимаю, почему это так.

Может кто-нибудь объяснить мне, какова ситуация.И как я могу решить проблему.

1 Ответ

0 голосов
/ 23 апреля 2019

"В таблице данных диска первые 256 байтов столбца TEXT или BLOB хранятся в памяти; только остаток сохраняется на диске."

Вы можете проверить это в деталях.

...