Задать вопрос
  • Почему у 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
    Ответ написан
  • Есть ли преимущества от удаления поля id при создании таблицы?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Вникаете в предметную область той задачи, для которой эта таблица используется. Всё, ответ найден.

    Нет ничего удивительного в таблицах, у которых нет поля id. В предметной области может быть достаточно хороший естественный ключ.

    С точки зрения производительности - да, конечно, есть смысл не хранить ненужные данные. Меньше строка => меньше таблица => в тот же объём RAM влезает больше кеша и меньше IO. Немного, правда, чистыми 8гб на каждый миллиард строк получается всего для bigint. Но если поле больше ни для чего не нужно, то почему бы и нет?
    Ответ написан
    Комментировать
  • Как определить причины низкой производительности postgres?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Вы смотрите на совершенно бесполезный график. Смотрите на полезные.

    Если у вас табличка с 10 индексами и к ней select * from foo where id = ? - то это минимум 11 AccessShareLock. Совершенно логично, что чем больше параллельно нагрузки - тем больше вы увидите AccessShareLock. И дальше куда с этим? Вот и получается совершенно бесполезный график. А задирание max_connections сделает только хуже.

    Посмотрите график CPU, есть ли в принципе CPU свободный (помним что у вас наверняка есть HT, значит 100% утилизации недостижимы, реальный потолок окажется где-то в районе 70-90%)
    Посмотрите графики латентности IO. Если проседает латентность чтения или записи под нагрузкой - то это будет причина замедления. СУБД очень чувствительны к латентности.
    Дальше графики pg_stat_activity с разбивкой по state. Если растут idle in transaction - проверять как дела на приложении, а так же сеть.
    Конечно, графики по pg_stat_statements. top5 запросов по времени выполнения, для начала.
    И проверить наличие корреляции с графиком длительности самой старой транзакции.
    Ответ написан
    4 комментария
  • Отличие md5 от scram-sha-256 в pg_hba.conf postgresql?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Аутентификация через метод md5 выполнит парольную проверку как для пароля сохранённого с password_encryption = md5 (ныне уже deprecated, но встречается в большинстве баз, созданных не недавно), так и пароли сохранённые в scram-sha-256. Реализацию pg_hba md5 специально расширили при появлении scram-sha-256 таким образом, для облегчения миграции.

    Указание scram-sha-256 в pg_hba будет требовать именно пароль согласно scram-sha-256 и не будет принимать пароли старых учётных записей, созданных с md5 encryption.

    Вполне вероятно, что у вашей базы password_encryption сконфигурирован в scram-sha-256, все пользователи кто имеет пароли, так же в scram-sha-256 и нужды в md5 аутентификации в pg_hba нет.
    Ответ написан
    Комментировать
  • Как работают явные блокировки в PostgreSQL?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Блокировки строк и блокировки таблиц (и прочих объектов) - два разных механизма. (а serializable изоляция и вовсе частично третий)

    Блокировки строк отмечают информацию о себе специальными флагами в заголовке самой заблокированной строки. Запросы, которым нужна блокировка строки сначала проверяют, не отмечена ли эта строка блокировкой, затем проверяют что сейчас с той транзакцией, идентификатор transaction ID которой указан в информации о блокировке. Если транзакция ещё в работе - то начинаем ждать её завершение (или пропускаем строку для skip locked или кидает ошибку если nowait)
    Блокировки строк, будь то select for share/for update или пишущие запросы, всегда работают с самой актуальной версией строки.

    В то же самое время, любой запрос, трогающий таблицу (даже select) берёт блокировку на эту таблицу соответствующего своим потребностям уровня. Пока не возьмёт блокировку на таблицу - вообще не начнёт выполняться. Информация об этих блокировках размещается в сегменте shared memory памяти, потому доступны всем процессам базы. Если другие бекенды не держат блокировку таблицы конфликтующую с желаемым нашей транзакцией (или ещё только ждут блокировку более высокого уровня), то запрос блокировки удовлетворяется и работа продолжается.
    Ответ написан
    Комментировать
  • Почему с фильтром PostgreSQL выдаёт больше записей?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Смотрите свои данные. Совершенно логично, что если у вас есть клиент №5 с такими данными:
    insert into appointments (customer_id, in_trash, status, filial_id, invoice_id, time_start) values 
    (5, false, 4, 1, null, '2023-12-23'),
    (5, false, 4, 1, 123, '2024-01-13')

    то он не попадёт в результат первого запроса, но попадёт в результат второго. И оба ответа верны, а вот какой из них хочет знать бизнес - уточнять надо у бизнеса.
    Ответ написан
    Комментировать
  • Почему не создается бд в postgreSQL?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    должно быть
    postgres=# create database mydb;


    нет такого сокращение у парсера как create db, но, что важнее, SQL запрос должен завершаться символом ;

    Приглашение командной строки потому и меняется с postgres=# на postgres-# как индикатор того, что psql ожидает дальнейший ввод многострочного SQL, пока не встретится ;
    Метакоманды psql, в то же время, действительно продолжают обрабатываться во время многострочного ввода.
    Ответ написан
    Комментировать
  • Можно ли создать пользователя во время миграции?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    Можно, это даже транзакционная команда. Разумеется, до окончания транзакции авторизоваться с именем этого пользователя не получится.

    PS: больше одного супера - большой вопрос к организации работы базы
    Ответ написан
    Комментировать
  • CREATE USER не учитывает регистр?

    Melkij
    @Melkij
    DBA для вашего PostgreSQL?
    https://www.postgresql.org/docs/current/sql-syntax...
    соответствовать синтаксису идентификаторов.
    Ответ написан
    Комментировать