У меня есть пара таблиц PostgreSQL (9.1), которые часто вставляются / удаляются. Со временем они страдают от раздувания индекса, хотя автоочистка настроена и работает регулярно.
Я думаю об автоматизации REINDEX на этих таблицах. Никто не сможет получить физический доступ к базе данных, поскольку программное обеспечение будет установлено на сайте клиента и буквально должно работать годами.
Я продолжаю читать о «заданиях cron», но мне не хватает руководства или руководства о том, как лучше всего его настроить, особенно в среде Windows.
Может ли кто-нибудь указать мне правильное направление? Другие предложения приветствуются, но главное требование - не требовать никаких ручных действий.
Windows имеет свои встроенные Диспетчер задач который, хотя и несколько ограничен в функциональности, может сработать для вас. Если вам нужно что-то с немного большей настраиваемостью, мне повезло с Визуальный Cron. Тем не менее, в вашей ситуации я бы хотел, чтобы на коробке было как можно меньше неизвестного / непроверенного / стороннего программного обеспечения, поэтому, если вы жестяная банка заставить работать собственный планировщик задач, это, вероятно, будет вашим лучшим вариантом.
Теперь, когда это решено, я бы до смерти испугался, если бы кто-нибудь попросил меня собрать систему, которая могла бы работать без вмешательства пользователя в течение многих лет. Как вы будете обрабатывать исправления ОС, проблемы с оборудованием, неожиданные сбои процессов и т. Д.? Вам лучше, по крайней мере, убедиться, что кто-то из ваших сотрудников сможет время от времени посещать объект, чтобы проверять работоспособность сервера, применять исправления и т. Д. Нет ли у вас возможности получить удаленный доступ? доступ к серверу для этих целей?
Вот мой взгляд на это: - убедитесь, что pgAgent установлен - я потратил некоторое время на поиск, но не смог найти пользовательский интерфейс для pgAgent в Windows для Postgres 9.1. Судя по всему, некоторые из них существовали и в более ранних версиях, но для этого мне пришлось написать немного 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);
В качестве проверки для параметра jobnextrun установлено значение «2013-04-01 03: 00: 00 + 11» в таблице pga_job после запуска сценария.