gpt4 book ai didi

java - 为什么 Quartz 2.* 不清理 Postgres 数据库中的索引?

转载 作者:行者123 更新时间:2023-11-29 12:09:40 25 4
gpt4 key购买 nike

我在集群模式下使用 Quartz 2.*。 Quartz 使用 Postgres 数据库来实现集群功能。数据库大小随着 Java 应用程序的运行而增长。这种增长的唯一原因是 Quartz 没有清理它在表上的索引:

quartz.qrtz_triggers
quartz.qrtz_cron_triggers
quartz.qrtz_fired_triggers
quartz.qrtz_scheduler_state

一周的应用程序工作会使数据库增加约 500 MiB。我有 5 个使用 Quartz 的微服务,所以整个数据库每周增长 5*500 MiB。

然后我需要手动执行:

REINDEX TABLE quartz.qrtz_cron_triggers;
REINDEX TABLE quartz.qrtz_fired_triggers;
REINDEX TABLE quartz.qrtz_triggers;
REINDEX TABLE quartz.qrtz_scheduler_state;

然后数据库的大小就足够了。

这正常吗?

如何配置 Quartz/Postgres 以自动清理它的内容?

最佳答案

虽然没有使用 quartz/postgres 组合的经验,但这似乎是一个索引碎片问题。

即当重复更新或删除表行时,索引大小会增加并且性能会受到影响。如果您的 quartz 作业以较短的间隔运行,同时在集群数据库中创建相应数量的条目,则可能会出现这种情况。

重新索引数据库表(一种常见的维护过程)会刷新索引并可能还会减小索引大小。我建议创建一个定期运行重建索引命令的数据库作业,我发现这可以使用 pg_cron 或 pgAdmin 工具来完成。

您还会在 PostgreSQL Wiki 中找到一些关于索引大小/使用和索引膨胀的有用查询:

https://wiki.postgresql.org/wiki/Index_Maintenance

关于java - 为什么 Quartz 2.* 不清理 Postgres 数据库中的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43317006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com