有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么选择Quartz 2。*不清除Postgres数据库中的索引?

我使用石英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以自动清理其内容


共 (1) 个答案

  1. # 1 楼答案

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

    也就是说,当表行被反复更新或删除时,索引大小会增加,性能会受到影响。如果quartz作业在短时间内运行,同时在集群数据库中创建相应数量的条目,则可能会出现这种情况

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

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

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