Справочник DBA: базы данных изнутри читается по порядку

Статья 1.1 · раздел 1 «Что делает DBA и как база лежит на диске» · 1 из 109

Администратор баз данных: что делает DBA, пять зон ответственности и пять инцидентов

опубликовано
читать
≈ 14 мин
автор
среда и версия
Профстандарт 06.011 (приказ Минтруда № 408н от 27.04.2023) и 5 вакансий hh.ru, выгрузка 27 октября 2026; команд к СУБД в статье нет, версия PostgreSQL — 18 по документации
содержание решать задачи SQL на собеседовании

Администратор баз данных отвечает за пять вещей: данные не пропадают, база отвечает, запросы не деградируют, чужие не входят, счёт за железо не растёт вслепую. Эти зоны видно только в инцидентах, поэтому ниже каждая показана одним разбором.

Что написано в профстандарте

Должность описана в профессиональном стандарте 06.011 «Администратор баз данных». Действующая редакция — приказ Минтруда № 408н от 27 апреля 2023 года: он вступил в силу 1 сентября 2023 года, действует до 1 сентября 2029 года и отменил приказ № 647н от 2014 года. Многие тексты о профессии всё ещё ссылаются на старую редакцию.

Цель вида деятельности в стандарте: «Поддержание эффективной работы БД, обеспечивающих функционирование информационных систем в организации». Дальше четыре обобщённых трудовых функции, названия дословно:

КодОбобщённая трудовая функцияУровень квалификацииТрудовых функций
AОбеспечение функционирования БД48
BОптимизация функционирования БД57
CПредотвращение потерь и повреждений данных при сбоях технического характера67
DУправление развитием БД78

Из этого списка видно, что «администратор» здесь не только тот, кто нажимает кнопки. Уровень 4 — резервное копирование, восстановление, управление доступом, установка и мониторинг. Уровень 6 — «Разработка стратегий, регламентов и процедур резервного копирования и восстановления данных после сбоя технического характера» (C/01.6). Уровень 7 — «Проведение миграции БД на новые платформы и новые версии ПО» (D/06.7).

Пять зон из заголовка — не деление стандарта, а способ сгруппировать его функции по тому, что ломается:

ЗонаФункции стандарта
СохранностьA/01.4 «Резервное копирование данных в штатном режиме», A/02.4 «Восстановление данных», C/01.6, C/02.6
ДоступностьC/03.6 «Локализация и устранение причин сбоев технического характера в работе БД», C/04.6 «Минимизация рисков сбоев технического характера, приводящих к потере и повреждению данных»
ПроизводительностьB/01.5 «Мониторинг работы БД», B/03.5 «Повышение производительности БД путем оптимизации выполнения запросов к БД»
БезопасностьA/03.4 «Управление доступом к БД», A/08.4 «Выявление инцидентов ИБ при обеспечении функционирования БД», C/07.6 «Администрирование встроенных подсистем и средств защиты информации в БД»
Стоимостьближайшие: B/06.5 «Подготовка предложений по модернизации программно-аппаратных средств поддержки БД», D/01.7 «Подготовка предложений по перспективному развитию БД»

Со стоимостью в стандарте слабее всего: слова «стоимость» или «бюджет» в названиях функций нет. Эта зона добавлена отдельно, потому что в облаке именно решения DBA превращаются в строку счёта.

DBA / 01

Пять зон DBA и инцидент, который каждую показывает

Пять зон ответственности DBA вокруг базы данныхВокруг базы данных пять зон. Сохранность: GitLab, 31 января 2017, стёрто около 300 ГБ, бэкапы не нашли и не подняли. Доступность: Sentry, 20 июля 2015, запись остановил wraparound, разбор в статье про vacuum. Производительность: тред pgsql-performance 2007, запрос стал медленнее с 181,8 до 1472,6 мс после ANALYZE, разбор в статье про EXPLAIN. Безопасность: Meow, июль 2020, стёрто более 1000 открытых баз, защита не была включена. Стоимость: AWS RDS по документации, IOPS оплачены, даже если диск их не использует, разбор в статье про bloat индексов.база данныходна на пять зонСохранностьGitLab, 31 января 2017стёрто ~300 ГБ, бэкапыне нашли и не подняли→ «Бэкапы и восстановление»ДоступностьSentry, 20 июля 2015запись остановилwraparound→ vacuum-autovacuumПроизводительностьpgsql-performance, 2007181,8 → 1472,6 мспосле ANALYZE→ explain-analyze-buffersБезопасностьMeow, июль 2020стёрто >1000 открытых баз,защита не была включена→ раздел «Безопасность»СтоимостьAWS RDS, по документацииIOPS оплачены, даже еслидиск их не использует→ index-bloat
Каждая зона держится на своём первом симптоме: пропавшие данные, остановленная запись, замедлившийся запрос, посторонний в базе, лишняя строка в счёте.

Сохранность: GitLab, 31 января 2017

Инженер GitLab.com стёр каталог данных PostgreSQL, «errantly thinking they were doing so on the secondary», то есть ошибочно считая, что работает на вторичном сервере. К моменту остановки удалено около 300 ГБ. В разборе компании сказано: «Unfortunately the process of both finding and using backups failed completely». Потеряны данные, созданные в окне с 17:20 до 23:30 UTC; оценка — не менее 5000 проектов, 5000 комментариев и около 700 пользователей.

Что DBA делает до. Восстановление проверяют восстановлением, а не наличием файла: в вакансии ЛАНИТ-Интеграция это записано как «Организация резервного копирования и регулярная проверка восстановления данных». В стандарте за это отвечает C/02.6, контроль соблюдения регламентов и процедур резервного копирования и восстановления. Ещё до — разделение окружений: команда, выполненная в не том терминале, не должна быть возможной.

Что DBA делает во время. Прекращает любые команды, которые меняют состояние уцелевшего, и ищет самую свежую копию, которую можно поднять. Решение «из чего восстанавливать и сколько часов потерять» принимается один раз и записывается; в разборе GitLab потери названы числами и временным окном.

Механика бэкапов и проверки восстановления разбирается в разделе «Бэкапы и восстановление» этого справочника.

Доступность: Sentry, 20 июля 2015

Sentry не работал большую часть рабочего дня в США. Причина — счётчик идентификаторов транзакций PostgreSQL подошёл к пределу, и база остановила запись, чтобы не повторять идентификаторы. Команда ждала завершения vacuum около трёх часов, затем решила очистить одну очень большую таблицу и принять потерю данных в ней: «Five minutes later, the system was fully restored». После инцидента они снизили autovacuum_freeze_max_age (прежнее значение в разборе названо слишком высоким), увеличили число процессов и память для обслуживания и завели отдельные машины под обслуживание.

Пороги не секрет: документация PostgreSQL 18 требует обработать каждую таблицу каждой базы vacuum-ом не реже, чем раз в два миллиарда транзакций. За 40 миллионов транзакций до предела сервер начинает предупреждать, а когда остаётся меньше трёх миллионов, перестаёт выдавать новые идентификаторы: остаются только транзакции на чтение. Код хранит те же числа константами в SetTransactionIdLimit:

	xidStopLimit = xidWrapLimit - 3000000;
	if (xidStopLimit < FirstNormalTransactionId)

Постоянная ссылка: varsup.c, строки 405-406, REL_18_6. Строка 405 вычисляет границу остановки: за три миллиона транзакций до предела. Порог предупреждения — строка 419, xidWarnLimit = xidWrapLimit - 40000000;.

Что DBA делает до. Следит за возрастом самой старой незамороженной транзакции в каждой базе и настраивает autovacuum заранее, пока запас измеряется сотнями миллионов, а не тысячами. Запрос на возраст и разбор причин, из-за которых vacuum не успевает, — в статье VACUUM и autovacuum.

Что DBA делает во время. Не перезапускает сервер ради «починки» и не пытается отключать autovacuum, а запускает обычный VACUUM по самым старым таблицам: документация прямо пишет, что останавливать сервер и входить в однопользовательский режим не нужно. Если очистка не успевает, выбор остаётся тем же, что у Sentry, — между временем и данными; важно сделать его осознанно и зафиксировать.

Производительность: запрос, который стал в восемь раз медленнее

Самый старый из пяти разборов: 6 октября 2007 года в рассылку pgsql-performance пришло письмо; на PostgreSQL 8.2.4 и 8.2.5 запрос выполнялся 181,829 мс до ANALYZE и 1472,613 мс после. План переключился с Bitmap Heap Scan на Index Scan Backward; внутренний узел выполнялся 6229 раз. Фактическое число строк осталось прежним, изменились оценки. С enable_indexscan = 0 время вернулось к 183,160 мс.

Документация PostgreSQL 18 описывает этот класс отказа прямо: статистика приблизительна и «will change slightly each time ANALYZE is run», а «in rare situations, this non-determinism will cause the planner’s choices of query plans to change after ANALYZE is run». Причина в треде 2007 года не названа: вся база там занимала 8 МБ, и автор не считал виновной выборку. Вывод другой: деградация без изменения кода и данных реальна, и обнаружить её можно только при сравнении планов.

Что DBA делает до. Хранит планы важных запросов и мониторит время их выполнения (B/01.5, B/03.5). Что читать в плане и как сравнивать оценки с фактом — в статье EXPLAIN ANALYZE BUFFERS.

Что DBA делает во время. Сначала исключает не-план: запрос может стоять не в плане, а в очереди за чужой блокировкой, и тогда помогает поиск блокирующего запроса, а не статистика. Затем сравнивает свежий план со старым, меняет одно условие за раз и записывает результат, как в треде 2007 года: три измерения, одно переключение настройки.

Безопасность: Meow, июль 2020

В июле 2020 года неизвестные стирали данные в базах, доступных из интернета, и оставляли слово «meow». TechTarget 23 июля сообщал о более чем тысяче стёртых баз (в обновлении от 28 июля — более 4600). Пострадали Elasticsearch, MongoDB и другие, среди них более 50 баз Redis. Elastic заявил, что у затронутых кластеров «did not have any of our free or paid security features enabled», MongoDB — что затронуты были установки бесплатной Community-версии, не Enterprise Advanced и не Atlas.

Здесь нет изобретательного взлома: база слушала внешний интерфейс без защиты. Что DBA делает до: A/03.4 «Управление доступом к БД» — закрытый сетевой доступ, аутентификация, роли с минимальными правами и проверка, что порт не виден снаружи. Во время: A/08.4 «Выявление инцидентов ИБ при обеспечении функционирования БД» — изолировать узел, сменить учётные данные, определить, что прочитано и что стёрто, и поднять данные из копии. Последний шаг возвращает к первой зоне: без проверенного бэкапа любой инцидент безопасности превращается в потерю данных.

Конкретные настройки доступа разбираются в разделе «Безопасность и соответствие» этого справочника.

Стоимость: диск, за который платят, даже если он простаивает

Публичного инцидента с цифрами для этой зоны не нашлось, поэтому она показана по документации. Для Amazon RDS с PostgreSQL документация указывает: у gp3 при размере 20–399 ГиБ базовая производительность хранилища — 3000 IOPS и 125 МиБ/с, при размере от 400 ГиБ — 12 000 IOPS и 500 МиБ/с. Для Provisioned IOPS (io2) диапазон — от 1000 до 256 000 IOPS, и «you are charged for the provisioned resources whether or not you use them in a given month».

Выбор хранилища сводится к двум ошибкам с разным знаком. Взяли io2 «на вырост» и платят за IOPS, которые база не использует. Или остались на gp3, пока ReadIOPS и WriteIOPS не приблизились к лимиту, и запросы встали в очередь. Документация RDS советует поднимать лимит, если TotalIOPS регулярно приближается к выбранному значению, — то есть решение нужно принимать по метрикам, а не по размеру базы.

Что DBA делает до. Снимает метрики нагрузки на диск и сравнивает их с оплаченным уровнем. Часть этой нагрузки создаёт сама база: раздутый индекс читается и пишется целиком, как измерить это и когда перестраивать — в статье Bloat индексов. Что DBA делает во время: готовит предложение (B/06.5) с числами «сейчас — вариант — разница» и отдаёт его тому, кто подписывает счёт.

Что просят в вакансиях

27 октября 2026 года поиск hh.ru «администратор баз данных» по России показал 499 вакансий. Ниже шесть вакансий из первой выдачи, требования выписаны из их текстов. Пять в таблице; шестая — «Старший администратор баз данных» ЗАО КонсультантПлюс — оказалась технологической обработкой документов и проставлением гиперссылок, без СУБД.

ВакансияОпытТребования из текста вакансииДеньги
ООО Тера Интегро1–3 годаGreenplum и MPP-архитектура, Linux, Bash, «Знание SQL на уровне выполнения административных операций и диагностики», резервное копирование и восстановление, анализ загрузки CPU, RAM, диска и сетине указаны
АО Комбинат КМАруда1–3 годасерверы 1С, MS SQL и PostgreSQL, Windows Server и Linux, регламентные задания, политики резервного копирования, отказоустойчивая конфигурация«от 106 000 ₽ за месяц, до вычета налогов» в вакансии от 27.10.2026
ЛАНИТ-Интеграция1–3 годаPostgreSQL в кластере Patroni, бэкап и проверка восстановления, Zabbix и Grafana, репликация, EXPLAIN и EXPLAIN ANALYZE, Linux, «Опыт восстановления после сбоя или аварии»не указаны
Группа компаний НВМ«более 6 лет» в карточке, «от 3-х лет» в текстеMS SQL Server и PostgreSQL, 1С, бэкап, Always On и потоковая реплика, управление доступом, требования ИБ, перевод на отечественные СУБД, Zabbix«от 230 000 ₽ за месяц, на руки» в вакансии от 27.10.2026
АО АКБ МОСНАРБАНК3–6 лет«опыт работы в АБС на уровне пользователя», план счетов, MS Office; обязанности — ввод данных, контроль балансовых форм, электронный архивне указаны

Деньги указаны в двух вакансиях из пяти; это две строки, а не рыночная оценка. Что видно в самих текстах:

  • Название не равно работе. Из шести открытых вакансий две (МОСНАРБАНК, КонсультантПлюс) не про администрирование СУБД. Читай обязанности, а не заголовок.
  • Бэкап и восстановление есть в четырёх вакансиях из четырёх про СУБД. Это зона «сохранность».
  • Отказоустойчивость — в трёх. КМАруда, ЛАНИТ и НВМ просят репликацию или кластер; у Тера Интегро ближайшее — «восстановление сегментов». Это «доступность».
  • Оптимизация запросов названа в двух. ЛАНИТ и НВМ. Остальным нужен «мониторинг» или «диагностика».
  • Доступ и ИБ названы явно в одной (НВМ). Остальные подразумевают это, не записывая.
  • Стоимость не названа ни в одной. Это не значит, что DBA её не касается; значит, что работодатели пока не формулируют её как требование.
  • Нужны смежные навыки. Linux назван в трёх вакансиях из пяти, мониторинг (Zabbix, Grafana) в двух, 1С в двух.

DBA, DevOps и разработчик: кто за что отвечает

Граница проходит по тому, что именно ты можешь сломать. Разработчик отвечает за запрос и схему: должен повторять транзакцию после 40001 (см. уровни изоляции). DevOps отвечает за то, на чём работает база: узлы, сеть, развёртывание, образы. DBA отвечает за состояние самих данных и за то, как база ведёт себя под нагрузкой: сколько осталось до wraparound, какой план выбрал планировщик, можно ли поднять данные из копии за час.

В вакансиях эти роли смешиваются, и это нормально для небольших компаний: ЛАНИТ просит Patroni, Zabbix и EXPLAIN ANALYZE в одном объявлении. Но смешение в одном человеке не отменяет различия: инцидент Sentry не лечится ни деплоем, ни переписыванием запроса. Его лечит знание того, что делает VACUUM и сколько транзакций осталось.

Что из этого следует

Профессия описывается не набором команд, а набором ответственностей, и каждая видна только в отказе. Поэтому порядок чтения справочника DBA такой же: сначала то, как база лежит на диске (раздел 1), затем транзакции и версии строк, затем журнал, индексы, планировщик и обслуживание. Чтобы не ждать отказа, учись на его механике: для зоны «производительность» это планы запросов, для зоны «доступность» — vacuum.

Чек-лист самопроверки

  1. Назови для своей базы дату последнего восстановления из копии и сколько оно заняло. Если ответа нет, зона «сохранность» не закрыта.
  2. Найди возраст самой старой незамороженной транзакции и сравни с порогом в 40 миллионов до предела.
  3. Выбери три самых тяжёлых запроса и сохрани их планы сейчас, до деградации.
  4. Проверь, видна ли база снаружи сети и чем она защищена.
  5. Сравни оплаченные IOPS с реальными ReadIOPS и WriteIOPS за месяц.

Частые вопросы

Чем администратор баз данных отличается от разработчика баз данных

Разработчик проектирует схему и пишет запросы, администратор отвечает за работу готовой базы: копии, доступность, нагрузка, доступ. В профстандарте 06.011 за администратором закреплены функции A–D из таблицы выше; проектирование схемы и прикладных запросов среди них не названо.

Сколько получает администратор баз данных

В статье только две цифры из двух вакансий на 27 октября 2026 года: «от 106 000 ₽ за месяц, до вычета налогов» (КМАруда, опыт 1–3 года) и «от 230 000 ₽ за месяц, на руки» (НВМ, опыт более 6 лет). Это нижние границы из двух объявлений, а не среднее по рынку.

Нужно ли знать несколько СУБД

В пяти разобранных вакансиях PostgreSQL назван в трёх (КМАруда, ЛАНИТ, НВМ), MS SQL Server в двух, Greenplum в одной; ClickHouse и ArangoDB ЛАНИТ называет желательными. Часть вакансий просит один движок, часть два: единого ответа выборка не даёт.

Источники

Выжимки статей в Telegram: одна ловушка, код с выводом и ссылка на полный разбор. t.me/koddo_ru