Ответы пользователя по тегу Администрирование баз данных
  • Что из себя представляет должность администратора баз данных?

    Melkij
    @Melkij
    PostgreSQL DBA
    являясь собственно DBA последние сколько-то там лет...

    Основная рутина:
    - внесение изменений схемы данных без даунтайма собственно приложения
    - выполнение каких-то массивных операций над данными (удалить половину данных из полутеррабайтной таблички, например)
    - исследование проблем производительности со стороны базы
    - решение в целом проблем на серверах баз, не только производительности
    - текущее сопровождение: бекапы, репликация, переезды с одних серверов на другие, настройка новых серверов, минорные обновления базы
    - major обновления базы
    - заведение пользователей и организация прав доступа
    - консультации разработчикам "как лучше сделать"
    - консультации "так это работать не будет, придётся менять"
    Ответ написан
    Комментировать
  • Проекты для DBA и как их презентовать?

    Melkij
    @Melkij
    PostgreSQL DBA
    и деморализующий ответ от postgresql DBA

    Вливаюсь в администрирование(в postgres на данном этапе)

    То есть опыта системного администрирования нет?
    А сколько лет опыта в разработке?
    Если оба ноль - выберите себе цель более реальную.
    Я не знаю ни одного DBA, у которого за плечами не было бы заметного опыта или системного администрирования или в разработке (у меня вот до сих пор больше лет опыта собирания граблей в разработке, чем опыта DBA).
    И, что для вас куда хуже, не имею представлений для какой работы может понадобится DBA без существенного багажа знаний, который подразумевает эта работа. Открыл вот HH и почему-то не могу найти вообще ни одной вакансии junior DBA. Да что говорить - полный результат поиска вакансий postgresql DBA укладывается в одну страницу.

    Таковы реалии DBA. Обычно будущий DBA выглядит или как опытный сисадмин, вникающий в работу SQL или как разработчик, к которому приходят коллеги с вопросами про работу СУБД.

    примеры проектов, которые не оторваны от реальности.

    1. доклад на конференции
    2. тут бы я написал sql ru, но его больше нет. Попробуйте отвечать на q&a хабра или ru.so. По моим наблюдениям они бесполезны и активность тут никого не интересует, в отличии от sql ru. Но зато некоторого опыта набраться можно, попутно потренировав ключевой навык любого IT - поиск информации
    3. посты на хабре
    4. вменяемый bug report (в самом postgresql или широко известных штуках рядом), впоследствии исправленный


    Что DBA может показать на гитхабе? Не знаю, postgres/postgres коммит с упоминанием своего имени, разве что.
    Дамп какой-то базы? Если только с детальным описанием предметной области и задач. А читать это всё хоть кто-то будет?
    Ответ написан
    Комментировать
  • Postgresql сломалась репликаци знаю причины не знаю как поченить стэндбай?

    Melkij
    @Melkij
    PostgreSQL DBA
    скопировать с мастера папку pg_wal с файлами

    Если бы нужный сегмент на primary был - его бы уже давно отдали реплике по запросу walreceiver'а. Значит его там нет.
    Если у вас на какой-то из реплик все необходимые wal всё же есть - да, их можно подложить в pg_wal. База их в своём обычном цикле опроса источников wal увидит. Или переключить primary_conninfo на эту реплику, сама заберёт.

    Которая в свою очередь лочит базу

    basebackup не блокирует базу. Это вообще весьма простая и глупая по своей сути штука.

    Чтобы реплика при отсутствии необходимых WAL догнала primary - вам нужно знание внутренностей PGDATA. Которого у вас нет, что очевидно по вопросу "не станет ли слейв после этого мастером ?". А потому единственным простым и надёжным способом будет сделать pg_basebackup заново.
    Ответ написан
    Комментировать
  • Какая репликация лучше в Postgres?

    Melkij
    @Melkij
    PostgreSQL DBA
    в постгрес есть автоматическое переключение мастеров

    Нет такого.
    Только внешние управляющие (patroni, например). Ну или в форках каких-нибудь, но это вопрос к этим форкам, а не к postgresql.
    Ответ написан
    Комментировать
  • Какие инструменты есть в postgres для разделения ресурсов между пользователями?

    Melkij
    @Melkij
    PostgreSQL DBA
    Никаких.

    главное возможно ли при такой схеме гарантировать базам на кластере какие-то ресурсы (кроме диска)?

    Вы даже io гарантировать так не сможете. Потому что WAL пишется строго один.

    один пользователь не может выесть больше чем work_mem на бекэнд

    Может. Запросто. Вы некорректно читаете документацию, там про это отдельно сказано.
    И может №2 - set work_mem to '..'
    Ответ написан
    2 комментария
  • Как восстановить удаленные данные из таблицы postgresql?

    Melkij
    @Melkij
    PostgreSQL DBA
    Как посмотреть дампы базы, если они делались?

    Выяснить:
    - делались ли вообще
    - как именно делались
    - куда сохранялись
    Восстановить данные используя ответы на предыдущие пункты.

    Как правильно вернуть значения в таблицу?

    Достать из бекапа
    Ответ написан
    Комментировать
  • Где лучше ставить pgbouncer?

    Melkij
    @Melkij
    PostgreSQL DBA
    pgbouncer не имеет отношения к балансировке нагрузки. Вообще. Это pooler. В норме в transaction mode.

    Типично pgbouncer ставится на тех же хостах что и база, каждый смотрит только в свою локальную базу. Балансировка по баунсерам равнозначных реплик - что-то вроде haproxy или приложением.
    Ответ написан
    Комментировать
  • Как обеспечить отказоустойчивость БД Postgres?

    Melkij
    @Melkij
    PostgreSQL DBA
    как правильно обеспечить надежность и безотказность ее работы?

    Использовать адекватное железо и не мешать базе работать шаловливыми ручками.

    доступен 24 часа 7 дней в неделю.

    бекап

    Объясните, пожалуйста, как это по вашему мнению между собой связано?
    Бекапы необходимы, но как они связаны с высокой доступностью?

    в случае проблем с доступностью, перезапускать/запускать саму СУБД.

    Простой вопрос: зачем?
    Если база сложилась и даже не смогла подняться самостоятельно - значит проблема капительная и разбираться надо детально. Рестартом по кругу вы можете скорее сделать совсем плохо, чем что-либо починить.
    При том обычно проблемы начинаются от того что разработчики выкатили новую версию приложения и та начинает делать что-то странное. Например, забыли сделать индекс на 50гб табличку и засунули запрос с поиском по ней на главную сайта. Рестартом базы это, разумеется, не исправляется. А делает только больнее.

    Многолетней давности pg_postmaster_start_time() впечатлять не буду - мы периодически ставим минорные апдейты на свои базы. И вам тоже весьма рекомендую обновиться до 10.7 или лучше уже на следующих выходных сразу до 10.8.

    А так, если не трогать - то годами будет работать. Мониторинг и алерты от него, разумеется, нужны. Какая-то автоматика при наступлении алерта - обычно приносит куда больше головной боли, чем помогает.

    какие операции, запросы или их комбинации нежелательны для БД и могут привести к проблемам.

    Большая часть инцидентов с недоступностью сервиса с точки зрения приложения - про уровни блокировок. Кто-нибудь попробует сделать create index вместо create index concurrently и привет ожидание блокировки на всю запись в таблицу. Большинство форм alter table сюда же, но они и чтение заблокируют.
    Ответ написан
    Комментировать
  • Как создать триггер для ограничения операторов CREATE в ночное время?

    Melkij
    @Melkij
    PostgreSQL DBA
    Вы с какой-то очень не той стороны хотите подойти к задаче. Вопрос на который надо искать ответ - зачем вы это хотите?

    В нормальном виде у вас вообще нет такой задачи уже на уровне прав - DDL запрещены вовсе для пользователя приложения. А для людей - решается не техническими средствами, а организационно. То есть к проду в любое время суток нет доступа на изменение схемы людьми (а вообще-то и на чтение людьми тоже, для людей доступ к не боевой реплике), которые не отвечают за последствия своих действий. А специалистам, у которых доступ должен быть - чинить препятствия странно, хоть днём, хоть тем более ночью (когда критичные вещи и могут выкатываться).

    Впрочем, event triggers могут быть ddl_command_start для ряда create команд.
    Ответ написан
    1 комментарий
  • Как создать БД от имени роли, имя которой не соответствует юзеру в Линукс?

    Melkij
    @Melkij
    PostgreSQL DBA
    Аккаунт ОС не имеет никакого отношения к пользователю БД. База может быть настроена проверять подлинность пользователя по соответствию имени пользователя - peer для unix sock. Но это не обязательно и это единственное что может связывать пользователя ОС и базу. (кроме учётки владельца, у того есть доступ напрямую к файлам)

    Но пользователь базы должен уже существовать. А раз вам нужно создать сперва пользователя - то тогда же создайте и базу для него.

    Далее следует сказать, что рядовой пользователь вовсе не может создавать базы данных. Это право должно быть выдано явно.
    Подключиться к postgresql можно только к конкретной уже существующей БД и у вашего пользователя должны быть права как на прохождение аутентификации указанным в hba методом так и права на подключение к нужной базе.
    Ответ написан
    Комментировать
  • Как получить полный размер кластера Postgresql (сумму размера всех БД на сервере)?

    Melkij
    @Melkij
    PostgreSQL DBA
    select sum(pg_catalog.pg_database_size(d.datname)) from pg_catalog.pg_database d;


    Вот только полный размер кластера не то же самое что сумма размера всех БД. Размер кластера считается как du -s от $PGDATA
    Ответ написан
    Комментировать
  • Какой из способов виртуализации более подходящий для сервера базы данных?

    Melkij
    @Melkij
    PostgreSQL DBA
    Поскольку меня сюда призвали, то напишу пару слов.

    Если вы ещё не доросли до отдельной железки под базу - то для базы не будет принципиальной разницы какой гипервизор у вашей виртуалки. Интереснее вопрос насколько честен хостер (уточняйте отдельно, я с хостерами не знаком).
    openvz заметно легче для хостера по ресурсам и позволяет легко продавать ресурсов сильно больше чем у него есть в действительности.
    С kvm - сложнее заниматься оверселлом хотя бы по памяти, хотя помнится даже там можно.

    С openvz у вас будет на порядок меньше возможностей настройки, т.к. ядро используется хост-системы и никто не даст вам его трогать. И весьма старое ядро, кстати.
    На kvm соответственно полноценная виртуальная система. Можете ставить что угодно и как угодно тюнить ядро. Если хостер уважает себя и предоставляет virtio устройства - то это и работать будет внятно.
    mysql запустится и там и там. Краеугольный для любой СУБД вопрос производительности дисков и там и там от вас полностью скрыт и зависит от хостера.

    Универсального ответа нет. Если вы под базу не настраиваете ядро, то возможно и openvz подойдёт, обычно там предлагают больше ресурсов за те же деньги.

    Мой ответ про докер же относится именно к докеру. Если вы можете пробросить директорию хост-системы в докер - почти наверняка у вас уже своя железка или vps и вы пытаетесь именно добавить ещё прослойку. Если вы захотите на своей vps ещё вдобавок запихать бинарники базы в докер - тогда будет вопрос "зачем". Если вы хотите имея отдельную железку только под базу запихать эту базу в виртуалку - тогда будет вопрос "зачем".
    Если у вас нет железки - то vps очевидно дешевле чем аренда целой железки и за счёт этого вполне целесообразно рассматривать аренду виртуалки.
    Ответ написан
    1 комментарий
  • Что учить администратору баз данных?

    Melkij
    @Melkij
    PostgreSQL DBA
    Как человек в этом году неожиданно сменивший деятельность с senior php dev на DBA - хочу задать встречный вопрос:
    а вы вообще видите вакансии на начинающего-студента-DBA? Целую одну или хотя бы даже две? Для увидевшего SQL вот только что студента и уже желающего быть DBA всего через пару месяцев? Человека, который даже не написал, какую именно СУБД ему интересно изучать до уровня DBA?

    Отдельная позиция DBA в проекте - значит ни штатные системные администраторы (со стороны администрирования) ни старшие разработчики (со знанием SQL) уже не обладают достаточными познаниями в используемой СУБД. Но эта БД важна для бизнеса и ищется специалист по ней, который будет обеспечивать хорошую работу этой базы.
    Несколько позиций DBA в кампании чтобы брать стажера - это очень большой проект. Эти могут себе позволить отвлекать своих специалистов от работы и вкладывать деньги в выращивание нового специалиста. Если вы чем-то сильно заинтересуете кампанию.

    Я не знаю как стать DBA с нуля. Похоже DBA становятся только имея за плечами заметный опыт администрирования или разработки.

    Определитесь с конкретной СУБД и прочитайте полностью её мануал. Например мануал postgresql 10 в pdf занимает свыше 3 тысяч страниц A4. На пару месяцев этого уже хватит. А это только мануал. Только по непосредственно СУБД.
    Плюс необходимо знать базовое администрирование той ОС под которой эта СУБД используется (например, я как postgresql dba даже близко не представляю что делать с windows - такая экзотика в жизни не встречается. А вот для MS SQL наверняка необязательно разбираться в linux).
    Плюс теория: реляционная логика, обеспечение транзакционного, конкурентного доступа, восстановление после сбоев
    Плюс практика - активность в профильных сообществах, форумах. Читаете, проверяете, запоминаете, вежливо переспрашиваете в комментариях если вам кажется что предыдущий отвечающий ошибся, отвечаете на вопросы.

    Интересно? Вперёд. Но в DBA за 3 месяца из нулевого студента - не верю.
    Ответ написан
    2 комментария
  • Насколько внешние ключи любят ресурсы?

    Melkij
    @Melkij
    PostgreSQL DBA
    Делать внешние ключи обязательно.
    И уникальные индексы проставлять. Ещё бы check constraint ставить, да у вас глупый mysql в тегах, он такое не умеет.
    Это всё ваши помощники. Они помогают искать ошибки и отлично мешают делать глупости.
    И выбирать подходящие типы данных. Ну и раз у вас mysql - то всенепременно проверить sql_mode и выставить его максимально агрессивным. В 5.7 стало гораздо лучше, до этого из коробки уж слишком много позволял делать глупостей.

    Дорастёте до террабайтной базы как авито - тогда можете начинать думать, а сколько денег нам стоит целостность внешних ключей или дешевле будет периодически проверять целостность скриптами и озадачивать разработчиков. О, кстати, вот запись доклада с pgday15, на 27 минуте как раз начинается обсуждение вопроса из зала "ребята, а вы в своём уме отключать FK?"
    Ответ написан
    5 комментариев
  • Какие проблемы могут быть с внешними ключами RESTRICT?

    Melkij
    @Melkij
    PostgreSQL DBA
    restrict по стандарту sql дефолтный. И самый оптимальный для задачи "мешать делать глупости".
    FK надо ставить на все связи. Если только чётко и аргументированно не доказано обратное для каждого конкретного случая в отдельности.

    При миграциях есть смысл блокировать таблицы? Или транзакции должно хватить?

    Mysql? Все DDL не только не транзакционные, а ещё и вызывают неявный коммит.
    Нужно ли явно блокировать таблицы - зависит от того, что вы собираетесь сделать. Обычно задача стоит как внести изменение, не затрагивая прод.
    Ответ написан
    Комментировать
  • Как инициализировать файлы Postgresql?

    Melkij
    @Melkij
    PostgreSQL DBA
    sudo rm -rf /var/lib/postgresql

    Это был home dir пользователя, а не каталог кластера. Каталог кластера в дефолтной поставке в /var/lib/postgresql/версия_pg/ещё_одна_директория_main_или_base

    sudo mkdir /media/ad/data/bd1c

    Допустим.

    su postgres -c '/usr/lib/postgresql/9.6/bin/initdb -D media/ad/data/bd1c --locale=ru_RU.UTF-8'

    Внимание на относительный путь. Я не уверен, где в итоге initdb пытался сделать базу.

    привел к виду
    data_directory = '/var/lib/pgsql'

    ? Откуда это здесь взялось?

    какой из postgresql.conf главнее

    Тот, который указан в аргументах запуска postgres. Явным образом через -c config_file либо находящийся в PGDATA в случае отсутствия аргумента с именем конфига.
    Ответ написан
    Комментировать
  • Автоматический set в mysql?

    Melkij
    @Melkij
    PostgreSQL DBA
    Зачем set? Таблица связей типично состоит из пары внешних ключей на связываемые таблицы. Т.е. обычно два инта и составной первичный ключ.

    Возможность есть понаписать триггер. Только сначала хотелось бы понять смысл.
    Ответ написан
    Комментировать
  • Как ускорить запрос в postgresql?

    Melkij
    @Melkij
    PostgreSQL DBA
    По порядку:
    Повторно запрос выполняется много быстрее.

    Значит, вы с головой упёрлись в диск.
    Вариант есть только один - ставить быстрый диск.
    Вариант похуже, т.к. диск всё равно у вас останется медленный и если не на чтении, то на старте и на записи вы туда упрётесь очень хорошо - использовать больше памяти. Чтобы как можно данных было в памяти. Но при работе эти данные всё равно надо поднимать с медленных дисков, потому базу сначала придётся разогревать. Есть даже штатная утилитка pg_prewarm

    В конфиге postgresql менял настройки только авторизации.

    По дефолту там что-то несмешное вместо shared_buffers. 32 что ли мегабайта? И это на ключевую характеристику базы.
    Увеличивать хотя бы до 20% от общего объёма памяти на машине.

    В третьих, актуальный Postgresql довольно плохо умеет развесистый IN. И тому есть не совсем очевидное решение - переписать в join:
    select count(*) from test JOIN (VALUES (1),...,(10000)) AS v(val) USING (val);

    Такой вот hash join работает быстрее IN. На 10000 элементах получали 10мс против 380мс у IN.
    Ответ написан
    Комментировать
  • Как автоматизировать перенос данных из одной БД в другую?

    Melkij
    @Melkij
    PostgreSQL DBA
    Возьмите любой протокол организации VPN или даже банально ssh-тунель - и будет двусторонняя связь.
    Если второй СУБД данные из первой нужны только на чтение - то реплику настроить.
    Ответ написан
    Комментировать
  • Kohana: работа с несколькими базами?

    Melkij
    @Melkij
    PostgreSQL DBA
    Вы имеете в виду это?
    kohanaframework.org/3.3/guide/database/config
    Ответ написан
    Комментировать