在许多客户端共享的MySQL数据库中,如何计算单个客户端及其数据所消耗的存储空间

所以基本上相同的表是由许多客户端共享一个外键,标识哪些数据属于谁

谢谢

据我所知,MySQL没有任何方式显示用户,数据库或表的内部资源使用情况,更不用说某个表在某个键上的使用了。 当你说“存储”你的意思是磁盘存储或内存资源的使用? 前者比后者要容易得多,特别是因为它的问题是一个表,其资源将可能在“客户”之间共享。

你可以考虑几个想法,大致增加难度:

  1. 通过客户端(即, SELECT COUNT(*) FROM table WHERE id=XXX )手动计数logging。 如果logging具有可变大小的字段,这会变得更加困难,但它会给您对每个客户端使用的总大小的粗略估计。 请注意,这只是为您提供了磁盘上的数据库大小,而不是实际上正在使用的数据库大小(如果从未使用,1G表可能会使用接近零的资源)。
  2. 启用bin日志logging,然后parsing日志中的查询以获取客户端的使用情况。 这将告诉您,客户端X每天使用10k查询,而客户端Y仅使用每天100个查询。 这也不会告诉你确切的资源使用情况,但会给你一个粗略的近似值。
  3. 将表/数据库拆分成相同或不同物理/虚拟服务器上的多个MySQL实例。 如果你有很多的客户,这是不实际的,但也可能给你更准确的资源使用。
  4. 修改MySQL源代码以logging/提取您需要的资源信息。

我将首先看看为什么你需要知道每个客户端的资源使用情况。 你真的想知道每个客户端的资源,或只知道他们正在运行多less个查询? 如果您只想知道每个客户端所需的存储空间,那么使用简单/复杂的SELECT查询来计算logging和字段大小就足够了。