Что важно понимать про эксплуатацию баз данных
Базу данных редко ломают одним неверным действием. Обычно её доводят до аварии годами мелких упущений, каждое из которых по отдельности выглядит несущественным. Ниже — те, что встречаются чаще всего.
Настройки по умолчанию — это не настройки под ваш сервер
Любая СУБД из установочного пакета настроена так, чтобы запуститься где угодно, в том числе на слабой виртуальной машине. Объёмы памяти под кэш и сортировки, поведение при сбросе данных на диск, параллелизм — всё задано с большим запасом прочности. Перенести такую конфигурацию на сервер с большим объёмом памяти и не изменить ни строчки означает оставить ресурсы простаивать. Это особенно заметно у PostgreSQL, где консервативность настроек по умолчанию — сознательное решение разработчиков.
Резервная копия существует только после проверки восстановления
Самый частый сценарий потери данных выглядит так: копии делались, задание отрабатывало без ошибок, а в момент аварии выяснилось, что архив неполный, повреждён или в нём нет нужной базы. Пока копию не развернули на отдельном сервере и не убедились, что база стартует и данные на месте, она остаётся файлом с неизвестным содержимым. Мы встраиваем такие проверки в регламент — и в резервном копировании считаем их обязательной частью услуги, а не дополнительной опцией.
База деградирует незаметно
Замедление почти никогда не бывает резким. Сегодня отчёт считается на пару секунд дольше, через полгода — на минуту, и никто не может назвать день, когда всё испортилось. Причина обычно скучная: устаревшая статистика, разросшиеся индексы, накопившиеся старые версии строк, таблица, которая выросла в десятки раз. Регламентное обслуживание возвращает базу в форму без единого рубля вложений в оборудование — и в этом смысле оно окупается лучше любого апгрейда.
Медленных запросов обычно немного
Когда система «вся тормозит», в реальности ресурсы съедают несколько конкретных запросов. Мы включаем сбор статистики по длительным операциям, находим лидеров, смотрим планы выполнения и определяем причину: не хватает индекса, индекс есть, но не используется, запрос написан так, что оптимизатор не может его развернуть. Часть проблем закрывается на стороне базы, часть требует правки кода — и тогда мы формулируем задачу разработчикам конкретно, а не в виде «оптимизируйте».
Обновление версии — плановая работа, а не аварийная
Старые версии СУБД перестают получать исправления, включая исправления уязвимостей, и постепенно расходятся с требованиями прикладного софта. Обновление лучше делать заранее и по частям: развернуть копию базы на новой версии, прогнать на ней реальную нагрузку, посмотреть, не изменилось ли поведение запросов, и только потом переключать боевую систему в согласованное окно с возможностью вернуться назад.
За базой кто-то должен следить постоянно
Большинство проблем с базами данных подают сигналы заранее: растёт время выполнения, копится очередь к диску, задание копирования начинает завершаться с ошибками, свободное место тает. Всё это видно в мониторинге — если он настроен на показатели базы, а не только на доступность сервера. Для баз 1С мы обычно совмещаем это с настройкой сервера 1С, потому что причины тормозов там лежат сразу в двух плоскостях: в конфигурации СУБД и в архитектуре самой системы.