PostgreSQL,自动化 REINDEX,Windows 环境

PostgreSQL,自动化 REINDEX,Windows 环境

我有几个 PostgreSQL 表 (9.1),经常插入/删除。尽管配置了自动清理并定期运行,但随着时间的推移,它们会遭受索引膨胀的困扰。

我正在考虑让这些表上的 REINDEX 自动化。没有人会实际访问数据库,因为软件将安装在客户端,而且实际上应该运行多年。

我一直在阅读有关“cron jobs”的文章,但我缺少一些关于如何最好地设置它的指南或教程,特别是在 Windows 环境中。

有人能给我指出正确的方向吗?欢迎提出其他建议,但主要要求是它不需要任何手动操作。

答案1

Windows 有内置的任务计划程序虽然功能有限,但可能对你有用。如果你需要一些可配置性更强的东西,我很幸运可视化 Cron也就是说,在你的处境下,我希望盒子上尽可能少的未知/未经测试/第三方软件,所以如果你使本机任务计划程序工作,这可能是您的最佳选择。


现在,解决了这个问题,如果有人让我组装一个可以运行多年、完全无人干预的系统,我会吓得魂飞胆丧。您将如何处理操作系统补丁、硬件问题、意外崩溃的进程等?您最好至少确保您的员工能够不时前往现场对服务器进行健全性检查、应用补丁等。您没有办法远程访问服务器以达到这些目的吗?

答案2

以下是我的看法: - 确保已安装 pgAgent - 我花了一些时间搜索,但找不到适用于 Postgres 9.1 的 Windows 上的 pgAgent 用户界面。显然,早期版本中存在一些 - 但为此我必须手动编写一些 SQL

SET search_path = pgagent;

INSERT INTO pga_jobclass VALUES (6, 'Scheduled Tasks');

INSERT INTO pga_job VALUES (5, 6, 'TableReindex', 'Reindex tables', '', true, 
    '2013-03-07 10:00:00.000+11', --date created
    '2013-03-07 10:00:00.000+11', --date changed
    NULL, NULL, NULL);

INSERT INTO pga_schedule VALUES (3, 5, 'TableReindexSchedule', 'Reindex tables', 
    true, --enabled
    '2013-03-07 10:00:00.000+11', --start date
    NULL, --end (never)
    '{t,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f}', --minutes: 't' for run on the first minute of an hour
    '{t,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f}', --hours: 't' to run at 3 AM
    '{f,f,f,f,f,f,f}', -- weekdays: don't care, all false
    '{t,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f}', -- monthdays: 't' to run on the first day
    '{t,t,t,t,t,t,t,t,t,t,t,t}'); -- months: all true to run on the first day on each month

INSERT INTO pga_jobstep VALUES (5, 5, 'TableReindexInfo', '', true, 's', 'REINDEX TABLE mytable1;REINDEX TABLE mytable2;', '', '@@DATABASE_NAME@@', 'f', NULL);

作为检查,运行脚本后,pga_job 表中的 jobnextrun 设置为“2013-04-01 03:00:00+11”。

相关内容