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 楼答案
虽然没有石英/postgres组合的经验,但这似乎是一个索引碎片问题
也就是说,当表行被反复更新或删除时,索引大小会增加,性能会受到影响。如果quartz作业在短时间内运行,同时在集群数据库中创建相应数量的条目,则可能会出现这种情况
对数据库表重新编制索引(一个常见的维护过程)会刷新索引,并可能会减少索引大小。 我建议创建一个数据库作业,定期运行重新索引命令,根据我发现的情况,可以使用pg_cron或pgAdmin工具来完成
您还可以在PostgreSQL Wiki中找到一些关于索引大小/用法和索引膨胀的有用查询:
https://wiki.postgresql.org/wiki/Index_Maintenance