Search
Write a publication
Pull to refresh
0
0
Send message

Насколько быстрее в итоге прошла миграция базы данных? Вы так и не сказали.

Интересно, как сочетается pgbouncer и подготовленные запросы?

1.Есть ряд обучающих материалов по изоляции транзакций за авторством Е.Рогова, например, https://habr.com/ru/company/postgrespro/blog/442804/.
2.В этих материалах автор предостерегает от ошибок связанных, с тем что в одном запросе идет проверка, а в другом запросе по результатам проверки, осуществляются действия с этой записью. Автор считает такой подход антипаттерном, т.к. между двумя этими запросами в параллельном потоке эта запись может быть изменена.

В статье сказано, что
"Файлы журнализации нужны для того, чтобы обеспечить работоспособность реляционных баз данных в терминах ACID. Напомню, что ACID — это набор свойств реляционной базы данных, которые гарантируют в том числе надёжность транзакции".
В соответствии с документацией файлы журнала прежде всего существуют для безопасного восстановления после краха сервера.

Дополнительно, раз уж пошла речь про особенности работы с NULL, то есть видео
https://www.youtube.com/watch?v=2qTczke77q4

Правильно, ли я понимаю, что количество версий строк зависит, от интенсивности обновления строки и настроек автовакуума? И если это так, то при одной версии строки (вставили строку и после не было обновлений и удаления этой строки) речь о корреляции вообще не должна идти, потому что не с чем коррелировать, т.е. нет версий строк?

А что понимается под термином "версия табличной строки"? Это связано с MVCC?

"Ситуация с доступом к таблице меняется, когда корреляция оказывается низкой. Создадим индекс по столбцу book_date, имеющему практически нулевую корреляцию с индексом, и посмотрим на запрос, выбирающий приблизительно ту же долю строк, что и в предыдущем примере. Индексный доступ оказывается настолько дорогим (56957 против 4639 в хорошем случае), что планировщик выбирает его, только если запретить ему все альтернативы"

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

Вы очень хороша написали, как рассчитывается стоимость каждого метода доступа, и в общих чертах далее пояснения в каких случаях используется тот или иной метод доступа. Вопрос - есть ли какие-то критерии на основе которых выбирается метод доступа? Может быть есть какие-то ориентировочные значения данных критериев? Данные знания могут помочь при оптимизации запросов.

Вы сказали, что

В PostgreSQL разбор запросов обходится дешево и не влияет на другие процессы.

Какова практическая ценность подготавливать запросы, кроме как защита от sql - инъекций?

Так и ADD COLUMN создаст такие же проблемы. Тогда в чем преимущество добавление колонки по сравнению с её переименованием, если и там и там требуется ACCESS EXCLUSIVE, только после переименования таблица готова для работы с новой колонкой, а после добавления требуются дополнительные манипуляции по переносу данных?

Rename тоже требует ACCESS EXCLUSIVE. И почему эта операция, как и ADD в большинстве случаев может быть не незаметной?

Прочитал статью и так же сразу не понял, что речь идет о двух конкурирующих транзакций. Статья начинается с того, что ловится deadlock на операции UPDATE и сразу возникает вопрос, а как это может быть. Начинаешь читать дальше и предлагается взглянуть под другим углом. Но не слово о том, что этот дидлок изначально был вызван двумя транзакциями.

Какая рекомендация в итого предлагается, использовать большие страницы или нет?
Если после исключения ноды из кластера вернуть её обратно командой docker service scale $patroni2-id=1, то наблюдается следующий эффект:
— команда patronictl -c /etc/patroni.yml list patroni показывает что она в кластере, но по факту в репликацию эта нода не встала, в логах постгреса наблюдается ошибка репликации. Это лечится путем удаление содержимого каталога кластера. После этого этот каталог восстанавливается с мастера и репликация налаживается.
— сервис haproxy, даже после восстановлении нормальной репликации, не может соединится с этой нодой и соответственно при очередном файрволе, даже если патрони переключится на новый мастер, доступа через haproxy к базе не будет. Как это лечится не понятно.

Вывод: пока не совсем надежна эта конфигурация в среде docker swarm.
Чтобы лучше понимать какой объем данных обрабатывается при выполнении запросов необходимо использовать в EXLAIN опцию BUFFERS. Вы её почему-то не используете.
А под Windows можно всё это развернуть?
PgPool есть, который это может, но по факту мы не рекомендуем его использовать.

Можете поделиться опытом, почему вы не рекомендуете использовать pgpool
При апдейте строки, если это возможно, Постгрес поставит новую копию строки сразу после старой копии строки. Плюс в старой копии строки проставляется специальная метка, для того чтобы Постгрес знал, что новая копия строки находится сразу после старой. Поэтому обновлять все индексы не нужно.

Что будет, если в процессе автовакуума будет удалена старая версия строки?
1

Information

Rating
Does not participate
Registered
Activity