我试图在mysql ndb集群中计算我的表的表行大小。正如文档所说,值由IndexMemory + DataMemory +每行开销16个字节+每个DataMemory页面128个字节组成。
我的NDB群集配置:服务器版本:5.6.25-ndb-7.4.7-cluster-gpl-log MySQL群集社区服务器(GPL)
NoOfReplica:1
节点数:1
DataMemory:2Gb
IndexMemory:512Mb
其他默认值。
所有数据都存储在RAM中。
我已经使用测试表来填充ndb群集到其极限。
CREATE TABLE `clients` (
`id`bigint(20) NOT NULL AUTO_INCREMENT
`user_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`) )
ENGINE=ndbcluster AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;
我对此表的计算:
DataMemory:8(bigint)+8(bigint)+10(主键的有序索引)+16(开销)= 42字节
IndexMemory:25(主键的哈希索引)= 25个字节
ndb_mgm>所有报告记忆
节点11:数据使用率为95%(62260 32K页,总计65536)
节点11:索引使用率为76%(50017 8K页,总计65600)
行数:28430087
但是当桌子满了的时候。实数是:
MemoryData:62260 * 32578/28430087 = ~71 bytes
IndexMemory:50017 * 8192/28430087 = ~14.4 bytes
ndb_size.pl说下一步:
DataMemory for Columns (* means varsized DataMemory):
Column Name Type Varsized Key 4.1 5.0 5.1
id bigint(20) PRI 8 8 8
user_id bigint(20) 8 8 8
-- -- --
Summary (for THIS table):
4.1 5.0 5.1
Fixed Overhead DM/Row 12 12 16
NULL Bytes/Row 0 0 0
DataMemory/Row 28 28 32 (Includes overhead, bitmap and indexes)
Varsize Overhead DM/Row 0 0 8
Varsize NULL Bytes/Row 0 0 0
Avg Varsize DM/Row 0 0 0
No. Rows 6 6 6
Rows/32kb DM Page 1165 1165 1020
Fixedsize DataMemory (KB) 32 32 32
Rows/32kb Varsize DM Page 0 0 0
Varsize DataMemory (KB) 0 0 0
Rows/8kb IM Page 248 512 512
IndexMemory (KB) 8 8 8
我没有计算每32kb页面开销128字节,但是当有这样的差异时无关紧要。我哪里错了?