因此,基本上同一张表由许多客户端共享,并使用外键来标识哪些数据属于谁
谢谢
答案1
据我所知,MySQL 无法显示用户、数据库或表的内部资源使用情况,更不用说表中某个键的使用情况了。当您说“存储”时,您是指磁盘存储还是内存资源使用情况?前者比后者更容易获得,特别是因为所讨论的项目是一个表,并且其资源可能会在“客户端”之间共享。
您可以考虑以下几个想法,难度大致按递增顺序排列:
- 按客户端手动计数记录(即
SELECT COUNT(*) FROM table WHERE id=XXX
)。如果记录具有可变大小的字段,则这会变得更加困难,但它会为您提供每个客户端使用的总大小的粗略估计。请注意,这只会为您提供磁盘上的数据库大小,而不是当前实际使用的大小(如果从未使用过,1G 表可能几乎不使用任何资源)。 - 启用 bin-logging,然后解析日志中的查询以获取客户端的使用情况。这将告诉您客户端 X 每天使用 10k 个查询,而客户端 Y 每天仅使用 100 个查询。这同样不会告诉您确切的资源使用情况,但会给您一个粗略的估计值。
- 将表/数据库拆分为位于相同或不同物理/虚拟服务器上的多个 MySQL 实例。如果您有很多客户端,这种方法并不实用,但它也可能为您提供更准确的资源使用情况。
- 修改MySQL源代码以记录/提取您需要的资源信息。
我首先要弄清楚为什么你需要了解每个客户端的资源使用情况。你真的想知道每个客户端的资源,还是只想知道它们正在运行多少个查询?如果你只想知道每个客户端所需的存储空间,那么一个简单/复杂的 SELECT 查询来计算记录和字段大小就足够了。