Size: a a a

pgsql – PostgreSQL

2021 March 10

DF

Dmitry Fomin in pgsql – PostgreSQL
Во время теста логировались все запросы, и создания индекса там не было, поэтому откуда берётся этот лок не понятно, даже если предположить что его ждёт не инсерт.
источник

KK

Konstantin Knizhnik in pgsql – PostgreSQL
Dmitry Fomin
А почему запрос который я привёл и его вывод не подходит?
Потому что мне удобнее посмотреть в первоисточник а не в результат джоина. Если это сделать нельзя, потому что поезд уже ушёл - то так и скажите. ShareLock конфликтует с RowExclusiveLock, так что insert может его ждать.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Dmitry Fomin
relation            | blocked_pid |                                                          blocked_query                                                          | blocked_mode | blocking_pid |                                                 blocking_query                                                  |  blocking_mode
-------------------------------+-------------+---------------------------------------------------------------------------------------------------------------------------------+--------------+--------------+-----------------------------------------------------------------------------------------------------------------+------------------
delivery_order_metric_2021_03 |       10194 | insert into delivery_order_metric (creation_date, merchant_id, order_id, payload, pos_id, type) values ($1, $2, $3, $4, $5, $6) | ShareLock    |        31804 | SELECT commit_fk, property_name, property_value FROM jv_commit_property WHERE commit_fk in (37330559,37330558)  | RowExclusiveLock
delivery_order_metric_2021_03 |       10194 | insert into delivery_order_metric (creation_date, merchant_id, order_id, payload, pos_id, type) values ($1, $2, $3, $4, $5, $6) | ShareLock    |        31804 | SELECT commit_fk, property_name, property_value FROM jv_commit_property WHERE commit_fk in (37330559,37330558)  | ShareLock
(2 rows)
тут было бы полезно видеть что blocking_pid делает (query, state)
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Konstantin Knizhnik
Потому что мне удобнее посмотреть в первоисточник а не в результат джоина. Если это сделать нельзя, потому что поезд уже ушёл - то так и скажите. ShareLock конфликтует с RowExclusiveLock, так что insert может его ждать.
Да я знаю что они конфликтуют, вопрос откуда он берётся, откуда берётся rowexclusivelock понятно, но почему инсерт пытается получить sharelock не понятно
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Victor Yegorov
тут было бы полезно видеть что blocking_pid делает (query, state)
А что даст эта информация?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Dmitry Fomin
А что даст эта информация?
поможет ответить на вопрос — почему запрос не может взять SHARE LOCK
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Потому что тот процесс держит rowexvlusivelock
источник

KK

Konstantin Knizhnik in pgsql – PostgreSQL
ну из сурсов видно, что действительно никто кроме create index concurrently ShareLock установить не может. Так что то, что "создания индекса там не было" надо как-то доказать.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
Да я знаю что они конфликтуют, вопрос откуда он берётся, откуда берётся rowexclusivelock понятно, но почему инсерт пытается получить sharelock не понятно
А он не пытается. Вы бы показали то, что просят.
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
А он не пытается. Вы бы показали то, что просят.
Результат запроса который вывод содержимое pg_lock которые удалось поймать во время теста, я привёл выше. Сейчас нужной нагрузки  нет, я правда не могу понять почему этот зарос хуже
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Dmitry Fomin
Результат запроса который вывод содержимое pg_lock которые удалось поймать во время теста, я привёл выше. Сейчас нужной нагрузки  нет, я правда не могу понять почему этот зарос хуже
потому что он показывает только то, что вы кого-то ждёте. чтобы ответить кого и почему — нужно больше информации
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Victor Yegorov
потому что он показывает только то, что вы кого-то ждёте. чтобы ответить кого и почему — нужно больше информации
Чего именно в запросе не хватает?
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Victor Yegorov
потому что он показывает только то, что вы кого-то ждёте. чтобы ответить кого и почему — нужно больше информации
В логах видно что инсерт ждёт sharelock, вопрос зачем
источник

pV

pav VER in pgsql – PostgreSQL
Подскажите что за прикол, сервер Debian 10 установил postgres 12 версии а он не стартует....
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
Результат запроса который вывод содержимое pg_lock которые удалось поймать во время теста, я привёл выше. Сейчас нужной нагрузки  нет, я правда не могу понять почему этот зарос хуже
Потому что в pg_locks может быть и другая полезная информация.
Кроме того, он вводит в заблуждение (вот Вас, например, ввёл).  ;)
Блокировки удерживают не запросы, а транзакции. Поэтому "blocking_query" в запросе означает не то, что Вы думаете.

> В логах видно что инсерт ждёт sharelock, вопрос зачем

И в логах, и в этом запросе видно, что данный INSERT ждёт наложенный чем-то другим ShareLock, нет?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
я ситуации с блокировками смотрю вот этим скриптом: https://github.com/dataegret/pg-utils/blob/master/sql/locktree.sql
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Yaroslav Schekin
Потому что в pg_locks может быть и другая полезная информация.
Кроме того, он вводит в заблуждение (вот Вас, например, ввёл).  ;)
Блокировки удерживают не запросы, а транзакции. Поэтому "blocking_query" в запросе означает не то, что Вы думаете.

> В логах видно что инсерт ждёт sharelock, вопрос зачем

И в логах, и в этом запросе видно, что данный INSERT ждёт наложенный чем-то другим ShareLock, нет?
То что в запросе блокирующий sql может быть не тот что на самом деле, я понимаю, но то что инсерт пытается получить sharelock на таблицу по-моему это следует из этого запроса и из логов, и мой вопрос именно в том почему insert пытается получить эту блокировку, когда по документации она ему не нужна
источник

DF

Dmitry Fomin in pgsql – PostgreSQL
Спасибо!
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
То что в запросе блокирующий sql может быть не тот что на самом деле, я понимаю, но то что инсерт пытается получить sharelock на таблицу по-моему это следует из этого запроса и из логов, и мой вопрос именно в том почему insert пытается получить эту блокировку, когда по документации она ему не нужна
Нет, не следует, и нет, не пытается (и это ещё одна проблема "умных" запросов).
Он её, всего лишь, ждёт. А наложить пытается свой RowExclusiveLock, скорее всего (как обычно).
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Dmitry Fomin
Спасибо!
В общем, Вам нужно смотреть, что происходило в том pid 31804, а INSERT тут просто то, что этим блокируется.
источник