powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / ExclusiveLock
15 сообщений из 40, страница 2 из 2
ExclusiveLock
    #37585971
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtron,

Про баунсер там скорее дело не в режиме было - а в reset_query.

Так. Если дело не в адвизори, то вроде как должны иметь

инсерт:
Две блокировки на роу - таблица и индекс
Одна/две (точно не уверен, может кто подскажет) блокировки на айдишники транзакций - там айдишник и виртуальный айдишник бывают - надо разобраться
Шаред блокировка на таблицу.

Еще такой вопрос. А там нет никаких триггеров еще случайно, репликаций может еще чего подобного?
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585974
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha Tyurin,

шаред - на сиквенс там

--

вам надо точно поймать бекенд один подозрительный и вывести все блокировки в нем которые
...
Рейтинг: 0 / 0
ExclusiveLock
    #37586025
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtron,

а какой модуль в node используете для постгреса? ноде же хитрая штука. она там как-то хитро синхронится может и может чего своего добавляет ко взаимодействию с базой.

вам надо попробовать эти инсерты напрямую, например из пгадмина или псикуеля.

в одной сессии подвешиваем транзакцию
Код: sql
1.
begin; insert into наша неудачная таблица ...;



а в другой смотрим за локами и сравниваем с тем, что видно через node.
...
Рейтинг: 0 / 0
ExclusiveLock
    #37586069
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha Tyurinxtron,

а какой модуль в node используете для постгреса? ноде же хитрая штука. она там как-то хитро синхронится может и может чего своего добавляет ко взаимодействию с базой.

вам надо попробовать эти инсерты напрямую, например из пгадмина или псикуеля.

в одной сессии подвешиваем транзакцию
Код: sql
1.
begin; insert into наша неудачная таблица ...;



а в другой смотрим за локами и сравниваем с тем, что видно через node.

как альтернатива можно включить log_min_duration_statement=0 минут на 5 и посмотреть какие реально запросы в лог ходят.
...
Рейтинг: 0 / 0
ExclusiveLock
    #37586070
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukMisha Tyurinxtron,

а какой модуль в node используете для постгреса? ноде же хитрая штука. она там как-то хитро синхронится может и может чего своего добавляет ко взаимодействию с базой.

вам надо попробовать эти инсерты напрямую, например из пгадмина или псикуеля.

в одной сессии подвешиваем транзакцию
Код: sql
1.
begin; insert into наша неудачная таблица ...;



а в другой смотрим за локами и сравниваем с тем, что видно через node.

как альтернатива можно включить log_min_duration_statement=0 минут на 5 и посмотреть какие реально запросы в лог ходят.

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

основные локи тут это

ROW EXCLUSIVE

Conflicts with the SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, and ACCESS EXCLUSIVE lock modes.

The commands UPDATE, DELETE, and INSERT acquire this lock mode on the target table (in addition to ACCESS SHARE locks on any other referenced tables). In general, this lock mode will be acquired by any command that modifies data in a table.
...
Рейтинг: 0 / 0
ExclusiveLock
    #37586072
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha Tyurin,

вспомнил, вот написано тут http://www.postgresql.org/docs/9.1/static/view-pg-locks.html

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

итого ваш инсерт должен вроде давать 5 блокировок (где-то у вас так и видно).
1) RowExclusiveLock: две на строки - таблица и индекс
2) AccessShareLock на сиквенс
3) две на айдишники транзакции

еще раз глянул ваши локи - адвизори мешает, как кажется. вы мой запрос перепишите, сделайте группировку по locktype - должно стать понятно.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
--
select
  s.procpid                          as pid,
  nullif(s.waiting, false)::integer  as wx,                  -- "1" - ждет блокировки
  ( now() - s.xact_start )           as tx,
  btrim(s.current_query, ' \t\n')    as q,
  
  count( 1 ) as total_locks,

  count( nullif( (l.locktype = 'advisory'), false ) ) as adv,
  array_agg( distinct ( case when ( l.locktype = 'advisory' ) then row(l.*) else null end ) ) as adv_l,

  count( nullif( (l.locktype = 'virtualxid'), false ) ) as vrt,
  array_agg( distinct ( case when ( l.locktype = 'virtualxid' ) then row(l.*) else null end ) ) as vrt_l,
  
  count( nullif( (l.locktype = 'transactionid'), false ) ) as trx,
  array_agg( distinct ( case when ( l.locktype = 'transactionid' ) then row(l.*) else null end ) ) as trx_l,

  count( nullif( (l.locktype = 'relation'), false ) ) as rel,
  array_agg( distinct ( case when ( l.locktype = 'relation' ) then row(l.*) else null end ) ) as rel_l
  
from
  pg_stat_activity s
    left join pg_locks l on ( l.pid = s.procpid )
group by
  s.procpid, s.waiting, s.xact_start, s.current_query
order by
  tx desc;



это в дополнение ко всему остальному)
...
Рейтинг: 0 / 0
ExclusiveLock
    #37587454
xtron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Misha Tyurin,

триггеров на таблицу никаких нет
...
Рейтинг: 0 / 0
ExclusiveLock
    #37587458
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtron,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
--
select
  s.procpid                          as pid,
  nullif(s.waiting, false)::integer  as wx,                  -- "1" - ждет блокировки
  ( now() - s.xact_start )           as tx,
  btrim(s.current_query, ' \t\n')    as q,
  
  count( 1 ) as total_locks,

  count( nullif( (l.locktype = 'advisory'), false ) ) as adv,
  array_agg( distinct ( case when ( l.locktype = 'advisory' ) then row(l.*)::text else null end ) ) as adv_l,

  count( nullif( (l.locktype = 'virtualxid'), false ) ) as vrt,
  array_agg( distinct ( case when ( l.locktype = 'virtualxid' ) then row(l.*)::text else null end ) ) as vrt_l,
  
  count( nullif( (l.locktype = 'transactionid'), false ) ) as trx,
  array_agg( distinct ( case when ( l.locktype = 'transactionid' ) then row(l.*)::text else null end ) ) as trx_l,

  count( nullif( (l.locktype = 'relation'), false ) ) as rel,
  array_agg( distinct ( case when ( l.locktype = 'relation' ) then row(l.*)::text else null end ) ) as rel_l
  
from
  pg_stat_activity s
    left join pg_locks l on ( l.pid = s.procpid )
group by
  s.procpid, s.waiting, s.xact_start, s.current_query
order by
  tx desc;



вот еще помониторте так. и как советовал Maxim Boguk можете посмотреть что там на базу валится через логи
...
Рейтинг: 0 / 0
ExclusiveLock
    #37587465
xtron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Misha Tyurin,

cat /etc/pgbouncer/pgbouncer.ini | grep server_reset_query

server_reset_query = SET SESSION AUTHORIZATION DEFAULT; RESET ALL; DEALLOCATE ALL; CLOSE ALL; UNLISTEN *; SELECT pg_advisory_unlock_all(); DISCARD PLANS; DISCARD TEMP;
...
Рейтинг: 0 / 0
ExclusiveLock
    #37587468
xtron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

log_min_duration_statement=0 бессмысленно - все запросы мои
...
Рейтинг: 0 / 0
ExclusiveLock
    #37587473
xtron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Misha Tyurinxtron,

а какой модуль в node используете для постгреса? ноде же хитрая штука. она там как-то хитро синхронится может и может чего своего добавляет ко взаимодействию с базой.


pg https://github.com/brianc/node-postgres
...
Рейтинг: 0 / 0
ExclusiveLock
    #37587474
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtron,

ну это чтобы наверняка исключить вмешательство node . и проверти еще через подвешивание интсерта не через ноду, а на прямую
...
Рейтинг: 0 / 0
ExclusiveLock
    #37587478
xtron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Bogukвообще не понятно что смущает... все локи какие должны быть на месте
лишего ничего нет вроде...

смущает EXCLUSIVE lock, не ROW EXCLUSIVE а именно EXCLUSIVE
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ExclusiveLock
    #39218035
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2All,
а на чём сошлись ?

А то на записи блобов в тосты имею это самое "ExclusiveLock". а как подопрет с диском -- так и множественно.
и чего ждут -- без стаканА не ясно.

'extend''pg_toast.pg_toast_816650291'25025'select r::void from XXXX_set_proxy($1::int4,$2::int8,$3::"numeric",$4::"timestamp",$5::bytea,$6::date,$7::"varchar") r''ExclusiveLock'32724'select r::void from XXXX_set_proxy($1::int4,$2::int8,$3::"numeric",$4::"timestamp",$5::bytea,$6::date,$7::"varchar") r''ExclusiveLock'

запрос цельнотянутый из инетов. примерно такой

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT
	BL.locktype
	,BL.relation::regclass
	,a.pid AS blocked_pid
	,replace( replace( a.query,E'\n','\n'),E'\t','\t') as blocked_query
	,L.mode as blocked_mode
	,BA.pid AS blocking_pid
	,replace( replace( Ba.query,E'\n','\n'),E'\t','\t') as blocking_query
	,BL.mode as blocking_mode
FROM pg_catalog.pg_locks L
	JOIN pg_stat_activity a ON L.pid = a.pid
		LEFT JOIN pg_catalog.pg_locks BL ON(BL.relation=L.relation	
			AND BL.locktype=L.locktype AND L.pid != BL.pid)			
			AND BL.granted =true 
		LEFT JOIN pg_stat_activity BA ON BL.pid = BA.pid
WHERE
	NOT L.granted
	AND a.waiting


-- чтобы квери читать, значится.


есть идеи ?

навскидку -- ничего не альтерится нигде. set ф--ии читают что---то по-мелочи, не лоча, и пишут в табличку с блобами.

-- т.е. , похоже, при записи тостов имеет место ExclusiveLock
...
Рейтинг: 0 / 0
ExclusiveLock
    #39218060
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

Проблема разбиралась много раз.
Называется relation extenstion locking (ExclusiveLock на таблицу когда к файлу новую страницу добавляют).
Например вот
http://www.postgresql.org/message-id/flat/7DC73570-1A80-470D-8B7B-46E2713C41D4@simply.name#7DC73570-1A80-470D-8B7B-46E2713C41D4@simply.name]http://www.postgresql.org/message-id/flat/7DC73570-1A80-470D-8B7B-46E2713C41D4@simply.name#7DC73570-1A80-470D-8B7B-46E2713C41D4@simply.name

Причины может быть две что этот лок надолго вылезает:
1)перегруженная дисковая система и в итоге просто file append долгий
2)многовато выделено shared buffers (редкий случай когда это может быть конкретно вредно).

Судя по
http://www.postgresql.org/message-id/flat/CAJjS0u3oVpuSAT8NviryeRNqA0nj8WEEXfSx=uRPqWF1=ORSVg@mail.gmail.com#CAJjS0u3oVpuSAT8NviryeRNqA0nj8WEEXfSx=uRPqWF1=ORSVg@mail.gmail.com]http://www.postgresql.org/message-id/flat/CAJjS0u3oVpuSAT8NviryeRNqA0nj8WEEXfSx=uRPqWF1=ORSVg@mail.gmail.com#CAJjS0u3oVpuSAT8NviryeRNqA0nj8WEEXfSx=uRPqWF1=ORSVg@mail.gmail.com
если я правильно понял в 9.6 это будет исправлено.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
15 сообщений из 40, страница 2 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / ExclusiveLock
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]