Mysql saas系统如何计算租户 数据存储空间大小、数据表记录数计算存储空间 探讨

  有个快消品中小企业进销存SaaS系统需要跟踪租户的数据增长量并估算租户数据存储空间,数据增长量比较容易计算求数据表租户记录数变化量即可,但是估算租户数据存储空间却不是那么直接,需要一点小技巧。当时,估算Mysql存储空间用了2种方案:

1、根据表结构、记录数估算表存储空间

1)汇总数据表各字段类型所占字节大小,rowSize;
2)租户表空间 = rowSize * 租户记录数;
3)租户数据存储空间 = sum(租户所有表空间)

存在问题:
1)表结构各字段类型所占字节大小 * 租户记录数,并不能正确代表表存储空间,索引空间、页最小存储空间等没有考虑;
2)表结构有变化,需要更新元数据,否则表结构各字段类型所占字节大小求和不准确;
3)索引空间没考虑在内;

2、使用Mysql系统表,或show命令查看

以系统表为例,information_schema数据库tables数据表,关键字段如下:

TABLE_NAME ENGINE TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH INDEX_LENGTH
base_goods InnoDB 1327 234 311296 180224
sale_account_discount_detail InnoDB 6235 254 1589248 671744

其中:

  • TABLE_NAME:表名
  • TABLE_ROWS:表记录数
  • DATA_LENGTH:表数据存储空间
  • INDEX_LENGTH:表索引存储空间
  • 表所占空间 TABLE_LENGTH = DATA_LENGTH + INDEX_LENGTH

则租户表空间计算如下:

  • TENANT_LENGTH = 租户表记录数/TABLE_ROWS * TABLE_LENGTH
  • 租户存储空间 = sum(租户不同表的TENANT_LENGTH)

该方案优缺点:

  • 优点:数据库自身功能,相对较准确,取数据快;
  • 缺点:部分表空间计算,受表碎片影响,可能存在严重的虚大情况

综合上述2各方案,最终使用Mysql系统表来估算租户数据空间。

发布了294 篇原创文章 · 获赞 98 · 访问量 77万+

猜你喜欢

转载自blog.csdn.net/chuangxin/article/details/90690344