Задать вопрос
  • VACUUM в PostgreSQL 15 уже несколько суток в фазе vacuuming indexes что можно сделать?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    В фазе vacuuming indexes нам нужно прочитать и обработать все индексы таблицы. Наступает эта фаза всякий раз когда набирается num_dead_tuples столько, сколько уже не лезет в max_dead_tuples (который, в свою очередь, считается от maintenance_work_mem, но для pg15 это по-прежнему не более 1гб, 178956969 как раз похоже на 1гб списка таплов)
    index_vacuum_count - это как раз и есть счётчик, сколько раз вызывали vacuuming indexes. За четверо суток 61 раз vacuuming indexes, то есть не более 1,5 часа каждый - вполне неплохо, бывало веселее, когда каждый vacuuming indexes длился часов по 15.

    Начиная с pg13 vacuum (но не autovacuum) может запускать дополнительных воркеров для vacuuming indexes. Применимы max_parallel_maintenance_workers (до тех пор пока позволяют max_parallel_workers и max_worker_processes). Воркеры работают по принципу очереди из списка индексов, в пределе можно запустить воркеров по числу индексов.

    Раз досчитали до index_vacuum_count = 61, значит уже прожевали порядка 11млрд мёртвых строк. Похоже что недавно было массовое удаление старых/более ненужных данных. Ну или не менее массовый update, который, конечно, тоже оставит много мёртвых строк.
    Ответ написан
    Комментировать
  • Почему увеличилась генерация WAL-сегментов?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    На аналитической реплике не должно быть hot_standby_feedback. Это заведомо ведёт к замедлению и мастера и каждой реплики. hot_standby_feedback мешает работать автовакуумам, препятствуя удалению старых версий строк, именно для этого эта настройка и нужна.
    У вас ещё и размеры базы скоро подрастут без сторонних причин, особенно если много update. По той же самом причине добавления помех в работе автовакуума.

    Объём записи WAL так же может добавить
    Ответ написан
    5 комментариев
  • PostgreSQL, как осуществить поиск по вложенному json?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    через jsonpath
    jsonb_field @@ '$[*].name like_regex "st"'

    или более традиционным способом
    where exists(select from  jsonb_array_elements(jsonb_field) j where j->>'name' like '%st%')
    Ответ написан
    Комментировать
  • Как свзять столбцы по внешнему ключу?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Corresponding columns in the foreign key and the referenced key must have similar data types. The size and sign of fixed precision types such as INTEGER and DECIMAL must be the same.

    https://dev.mysql.com/doc/refman/8.4/en/create-tab...
    Ответ написан
    Комментировать
  • Почему не удается авторизоваться под юзером postgres?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    # DO NOT DISABLE!
    # If you change this first entry you will need to make sure that the
    # database superuser can access the database using some other method.
    # Noninteractive access to all databases is required during automatic
    # maintenance (custom daily cronjobs, replication, and similar tasks).
    #
    # Database administrative login by Unix domain socket
    local   all             postgres                                peer
    
    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    
    # "local" is for Unix domain socket connections only
    local   all             all                                     peer
    # IPv4 local connections:
    host    all             all             127.0.0.1/32            scram-sha-256


    по умолчанию ubuntu создаёт примерно такого смысла pg_hba.conf

    Обращу отдельное внимание, что первой строкой идёт peer авторизация именно для postgres'а и это будет плохая мысль её ломать.

    sudo -u postgres psql
    здесь вы зашли от unix пользователя postgres и запустили psql, имя unix пользователя совпадает с именем пользователя базы - это достаточное условие для прохождения peer аутентификации, вы получили доступ к базе. Это обычный вариант использования суперпользователя базы (dba впрочем чаще делают sudo -iu postgres, т.к. нужен не только psql)

    sudo psql -U postgres -d testdb
    Здесь вы хотите запустить psql от рута и авторизоваться пользователем postgres. "postgres" != "root", поэтому peer аутентификация не пускает авторизацию. То что root это root операционной системы не очень интересует postgresql, делает то что сказано в pg_hba (и pg_ident, но это тема отдельного обсуждения)
    sudo здесь совершенно лишний и не выполняет никакого смысла.

    Изменение
    host all all 127.0.0.1/32 md5
    эффекта не имеет, потому что host тип подключения для TCP/IP подключений, а по-умолчанию psql подключается по unix sock.
    psql -h 127.0.0.1 форсирует подключение по TCP/IP

    задал пароль вручную через passwd, проверил - зашел пользователем postgres через ssh - пускает

    Пользователь ОС не имеет отношения к пользователю внутри СУБД, это разные сущности.
    Пароль postgres пользователя базы можно изменить через psql командой \password

    Тем не менее,
    sudo -u postgres psql
    достаточно для административного доступа. Не работайте от суперпользователя постоянно.
    Ответ написан
    Комментировать
  • Какое отставание MySQL Slave от MySQL master считать проблемным?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Начать желательно с документации. https://dev.mysql.com/doc/refman/8.4/en/show-repli...
    То есть вы неверно понимаете эти значения.
    SQL_Delay

    The number of seconds that the replica must lag the source.

    SQL_Remaining_Delay

    When Replica_SQL_Running_State is Waiting until SOURCE_DELAY seconds after source executed event, this field contains the number of delay seconds remaining. At other times, this field is NULL.


    SQL_Delay - это намеренная задержка репликации как минимум на такой срок: https://dev.mysql.com/doc/refman/8.4/en/replicatio...
    SQL_Remaining_Delay показывает сколько времени осталось ждать до применения следующей транзакции, только в том случае когда мы ждём сконфигурированную задержку репликации. timestamp выполнения транзакции на источнике мы заведомо знаем, до него и показывается остаток.

    И то и другое отображает намеренно сконфигурированное администратором поведение и поэтому не может быть проблемой по своему определению.
    Ответ написан
    2 комментария
  • Как обнаружить все битые таблицы?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Масштаб проблемы: критично, этим кластером (в терминах postgresql) пользоваться нельзя. Разбираться с тем как делаются бекапы, как восстанавливались и где именно сделали неверно. Системный каталог не соответствует файловой системе. Можно ожидать любые аномалии помимо отличий relfilenode. Например, полностью сломанный mvcc.

    Если нужны какие-то данные из конкретно этого ошибочного бекапа - копировать адресно всё что читается по каждой интересующей базе и таблице. Затем внимательно проверять, имеют ли прочитанные данные какой-то смысл.
    Ответ написан
    3 комментария
  • Куда исчезают записи в базе данных mariadb, innodb?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Никуда.
    Вы смотрите на, по своему определению, приблизительное значение. 700к или 900к - значения одного порядка, допустимая флуктуация для статистики планировщика.

    об этом раньше было отдельная сноска в интерфейсе phpmyadmin, не знаю как сейчас. Никто не пересчитывает всю таблицу, чтобы узнать, 895342 там записей или 902542 записей.
    Ответ написан
    Комментировать
  • Почему у Athlon II X2 215 и Athlon II X2 280 одинаковое энергопотребление в нагрузке?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    А вы неверно понимаете TDP. Это не "равно" такому-то тепловыделению, а "не выше". При том, это ещё и не в теоретическом пике, а в некотором удобном производителю тесте.
    По задумке должно было использоваться как справочная величина для выбора системы охлаждения.

    Протестировали партию кристаллов единообразно, все пригодны к работе на 3,6ГГц и не превышают тепловыделение в нашем тесте - произвольно из этой партии распределили кристаллы и отгрузили промаркировав в соответствии с планом отгрузок. Унификация производственных процессов, снижение себестоимости.
    Ответ написан
    Комментировать
  • Есть ли в PHP оптимизация при передаче массива по значению?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Да, есть. Подробнее см. устройство zval
    Ответ написан
    Комментировать
  • Какая минимальная конфигурация пк подойдёт для домашнего сервера?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Любая.

    Для экспериментальной площадки традиционно берут то что оказалось под рукой. Если заранее нет особых требований по шуму/электропотреблению/габаритам/интерфейсам/ресурсам и т.д.
    Потом, с пониманием что зачем и для чего надо изменить - меняется или адаптируется.
    Ответ написан
    Комментировать
  • Как корректно завершить процесс postgresql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Отсутствие реакции на SIGTERM при продолжающемся потреблении CPU это примечательно. Но без -dbgsym и GDB ничего определённого выяснить фактически не удастся. Суть - как-то попали в какую-то ветвь кода, которая не считалась что может занимать продолжительное время и вызов обработчика сигналов CHECK_FOR_INTERRUPTS там не был предусмотрен. Из вариантов навскидку где возможно в 16.х наступить - dblink или fdw, create index using hash. Традиционно, ещё могут быть index scan по gin или gist, не в первый раз находятся у них такие грабли.
    Как минимум, удостовериться, что используется свежая минорная версия. Завтра 16.9 выходит.

    Ну, это из предположения что весьма подозрительный watchdog: BUG: soft lockup тут ни при чём. Что это такое я вряд ли подскажу. Выглядит нехорошо.

    Такс, это всё про оставшийся процесс.
    Про сам the database system is shutting down
    При crash recovery делается immediate stop, все backend которые не завершаться за 5 секунд получат SIGKILL. Который, естественно, проигнорировать уже не могут, потому что процессу про SIGKILL никто даже и не скажет, его просто снимет ядро ОС.
    Значит, перед всеми the database system is shutting down был received smart shutdown request или received fast shutdown request, который кто-то скомандовал явным образом. Оба режима штатного выключения не делают SIGKILL, а именно дождутся корректного завершения процесса. В случае с багом, когда процесс не отреагировал на SIGTERM, ну, вечно ждать и будет. Других вариантов кроме SIGKILL тут нет.

    Если логи ещё сохранились на дату shutdown request - то смотреть что там делали с системой, что кто-то скомандовал stop или restart базе. Если не вмешательство администратора, то может быть какой-то аналог unattended-upgrades?
    Ответ написан
    Комментировать
  • С чего начать изучение инженерной части БД?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Transactional Information Systems, by Gerhard Weikum and Gottfried Vossen, Morgan Kaufmann
    Ответ написан
  • Как временно повышать права пользователю?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    security definer и есть: проверка прав вызова функции (grant execute) будет проверять, может ли её вызвать этот пользователь, но сама функция дальше будет выполняться с правами владельца функции. В том числе с правами супера, если владелец - суперпользователь.

    Не забудьте revoke execute on function .. from public;
    begin;
    create role specific_activity;
    create function stat_activity() .. security definer;
    revoke execute on function stat_activity() from public; -- права на запуск не всем
    grant execute on function stat_activity() to specific_activity; -- а только этой роли
    commit;
    grant specific_activity to someuser;


    btw, для pg_terminate_backend есть предопределённая роль pg_signal_backend.
    Ответ написан
    1 комментарий
  • Как исключить первую запись в базе данных?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    offset 1 при небольших значениях offset самое адекватное

    PS: mysql_query? перепроверил какой нынче год в календаре
    Ответ написан
    1 комментарий
  • Драйвера на видеокарты AMD стабильные?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Вот так и 20 лет назад на стабильность драйверов ATI жаловались в основном пользователи nvidia. Как так, почему - тайна скрытая мраком, маркетингом и фанатиками.

    Где-то с 2011 года я, получается, непрерывно пользуюсь AMD GPU на десктопе. Никаких проблем от видеодрайвера у AMD под linux. А уж после закапывания fglrx и установка сократилась до одного non-free пакета с firmware.
    Ответ написан
    Комментировать
  • Нужен ли реально фаервол?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    открываете свой ss -lutnp и изучаете, точно ли вы хотите это всё выставлять доступным извне.

    Вернее лучше сказать так - могут ли быть какие-нибудь слушающие порты каких-нибудь программ, способных уничтожить систему или слить данные удаленно?

    вероятность RCE ненулевая, не говоря уж о том же ssh с разрешённой парольной аутентификации но слабым паролем
    Ответ написан
    Комментировать
  • Ошибка в запросе, в чём причина?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    SELECT [u.id](u.id)

    а где вы такой синтаксис нашли? Совершенно очевидно непонимание от сервера, что вы этим пытаетесь сказать, я тоже не понимаю, что этот синтаксис должен значить.
    https://dev.mysql.com/doc/refman/8.4/en/identifier...
    Ответ написан
    2 комментария
  • Как в PostgreSQL 16 преобразовать значение типа uuid в тип bytea?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    важен вопрос "зачем"

    а так, универсально через промежуточное приведение к тексту ::text::bytea
    Ответ написан