如何计算通过 docker 动态部署的 MySQL 数据源中的空闲 space
How to calculate free space in a MySQL datasource deployed dynamically via docker
我有一个 Spring 引导服务器连接到 MySQL 服务器 运行 在单独的 docker 映像上。因此,我不能做像 df
这样简单的事情,因为图像是通过 docker 配置中的 URI 连接的,并且可能会在生产部署中发生变化。例如。我们可能会切换数据库以使用集群等
但是,我们可能 运行 超出数据库中的 space 并且需要检测它。由于在 运行 退出 space 时我们可以删除很多数据,这非常重要。
有很多关于计算数据库 space 使用 的数量的答案,这不是我想要的,因为:
- 它在 CPU 方面很昂贵,我想保持实施效率
- 我不在乎拿了多少space,只在乎剩下多少,我可以保留一个变量“total space”并用它来计算,但它会忽略潜在的磁盘大小增加
我找到了 data_free
查询 here, but it seems problematic based on the following answer。
是否有另一种方法可以通过 mySQL 查询或通过 spring 引导公开的类似 API 来计算磁盘大小?
听起来您需要这个才能在一张 docker 图片中看到免费的 space:
docker system df
https://docs.docker.com/engine/reference/commandline/system_df/
https://www.percona.com/blog/2019/08/21/cleaning-docker-disk-space-usage/
并且它可以 运行 独立于 MySQL。所以,我没有看到 CPU 问题。
因为所有与 MySQL 的 Data_free 和预测活动 table 的磁盘使用相关的麻烦,不可能将免费 space 准确地翻译成在 space.
运行 之前可以添加的行数
如果您的用法相当一致,运行 docker system df
每天(或每小时)并绘制结果。然后估计它何时会达到零。通过图表画线要悲观
你说你可以“删除数据”来释放 space。请注意,在许多情况下,MySQL 不会 而不是 return 将 space 释放到 OS(即 Docker).相反,它使 table 支离破碎。也就是说,DELETEing
行为新的 INSERTs
留出空间进入 same table。 (这方面有变体;如果您对“删除数据”有更具体的了解,我们可以进一步讨论。)
如果数据大小没有以“常规”方式 grow/shrink,您至少知道什么时候会出现“突发”吗?在爆发之间的平静中咀嚼一些 CPU。
如果您可以在需要时“删除一些数据”,为什么不保留数据 p运行ed。这将分散开销,并(希望)使 space 远离麻烦。
如果你在谈论 'huge' table,我有几个关于 big deletes efficiently 的技巧。
B计划
Docker 可以进入主文件系统获取目录。将 MySQL 的数据树放在那里。那你问的不是Docker中的space,而是主系统中的space。 (我假设你有更多的免费 space ??)
我有一个 Spring 引导服务器连接到 MySQL 服务器 运行 在单独的 docker 映像上。因此,我不能做像 df
这样简单的事情,因为图像是通过 docker 配置中的 URI 连接的,并且可能会在生产部署中发生变化。例如。我们可能会切换数据库以使用集群等
但是,我们可能 运行 超出数据库中的 space 并且需要检测它。由于在 运行 退出 space 时我们可以删除很多数据,这非常重要。
有很多关于计算数据库 space 使用 的数量的答案,这不是我想要的,因为:
- 它在 CPU 方面很昂贵,我想保持实施效率
- 我不在乎拿了多少space,只在乎剩下多少,我可以保留一个变量“total space”并用它来计算,但它会忽略潜在的磁盘大小增加
我找到了 data_free
查询 here, but it seems problematic based on the following answer。
是否有另一种方法可以通过 mySQL 查询或通过 spring 引导公开的类似 API 来计算磁盘大小?
听起来您需要这个才能在一张 docker 图片中看到免费的 space:
docker system df
https://docs.docker.com/engine/reference/commandline/system_df/ https://www.percona.com/blog/2019/08/21/cleaning-docker-disk-space-usage/
并且它可以 运行 独立于 MySQL。所以,我没有看到 CPU 问题。
因为所有与 MySQL 的 Data_free 和预测活动 table 的磁盘使用相关的麻烦,不可能将免费 space 准确地翻译成在 space.
运行 之前可以添加的行数如果您的用法相当一致,运行 docker system df
每天(或每小时)并绘制结果。然后估计它何时会达到零。通过图表画线要悲观
你说你可以“删除数据”来释放 space。请注意,在许多情况下,MySQL 不会 而不是 return 将 space 释放到 OS(即 Docker).相反,它使 table 支离破碎。也就是说,DELETEing
行为新的 INSERTs
留出空间进入 same table。 (这方面有变体;如果您对“删除数据”有更具体的了解,我们可以进一步讨论。)
如果数据大小没有以“常规”方式 grow/shrink,您至少知道什么时候会出现“突发”吗?在爆发之间的平静中咀嚼一些 CPU。
如果您可以在需要时“删除一些数据”,为什么不保留数据 p运行ed。这将分散开销,并(希望)使 space 远离麻烦。
如果你在谈论 'huge' table,我有几个关于 big deletes efficiently 的技巧。
B计划
Docker 可以进入主文件系统获取目录。将 MySQL 的数据树放在那里。那你问的不是Docker中的space,而是主系统中的space。 (我假设你有更多的免费 space ??)