我的数据库设置在 CentOS 上使用具有 2-3 个节点的 NDB 集群。在尝试测试性能时,我尝试将约 700 万条记录(大约 2GB 大小)存储到其中一个表中。在大约 200k 时,它失败并收到通知:
ERROR 1114 (HY000): The table 'my_request' is full
这些是 LOGFILE GROUP 和 TABLESPACE:
CREATE LOGFILE GROUP lg_1
ADD UNDOFILE 'undo_1.log'
ENGINE NDBCLUSTER;
ALTER LOGFILE GROUP lg_1
ADD UNDOFILE 'undo_2.log'
ENGINE NDBCLUSTER;
CREATE TABLESPACE ts_1
ADD DATAFILE 'data_1.dat'
USE LOGFILE GROUP lg_1
ENGINE NDBCLUSTER;
ALTER TABLESPACE ts_1
ADD DATAFILE 'data_2.dat'
ENGINE NDBCLUSTER;
怀疑是DATAFILE的问题,又加了2个:data_3.dat
and data_4.dat
,解决了问题。
所以根据这个页面,在我当前的版本中被忽略了AUTOEXTEND_SIZE
。MAX_SIZE
该表预计将在预定时间后转储到磁盘之前容纳 700GB 以上的数据。因此,有什么方法可以设置这个DATADISK的大小来计算它未来的使用量吗?这些数据存储在哪里?(我试图签入datadir
,执行find
,但一无所获)。如果您能分享一些解释如何与 NDB 合作的好信息/策略,将不胜感激。
注意:不是 NDB 专家,请假设我在解释时一无所知。大泰
获取撤消/数据文件大小:
要更改数据文件的 MAX_SIZE,只需设置 INITIAL_SIZE
尽管文档指出可以通过检查配置中的数据目录来定位此数据文件,但不知何故我无法在我的系统中找到它(默认情况下它位于 /var/lib/mysql/)。
这是手册的一部分:
可选的 INITIAL_SIZE 参数设置 UNDO 文件的初始大小;如果未指定,则默认为 128M(128 兆字节)。可选的 UNDO_BUFFER_SIZE 参数设置日志文件组的 UNDO 缓冲区使用的大小;UNDO_BUFFER_SIZE 的默认值为 8M(八兆字节);该值不能超过可用的系统内存量。这两个参数都以字节为单位指定。您可以选择在其中一个或两个后面加上一个数量级的单字母缩写,类似于 my.cnf 中使用的缩写。通常,这是字母 M(兆字节)或 G(千兆字节)之一。
所以UNDO buffer的大小默认是8M,UNDO log的大小默认是128M。可以通过添加更多 UNDO 日志文件来扩展 UNDO 日志的大小。
同样,对于 DATAFILE,默认数据文件大小为 128 MB。正如前面的答案中所指定的那样,通过设置 INITIAL_SIZE 来设置数据文件的大小。可以通过添加更多数据文件来扩展表空间大小。
数据文件还需要设置 EXTENT_SIZE(默认 1MByte)。这指定当表片段需要在表空间中分配磁盘空间时分配多少空间。