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

# \d request
Table "public.request"
Column | Type | Modifiers
-----------------+-----------------------------+-----------------------------------------------------------
id | bigint | not null default nextval('public.request_id_seq'::regclass)
other_id | bigint | not null default 1
enabled | boolean | not null default true
Indexes:
"request__idx001" btree (other_id, id DESC) WHERE enabled = true

Индекс только один, primary key удален, оставлен только сиквенс для формирования следующего id.

В таблице уже порядка 100 миллионов записей, в основном идут массовые INSERT, изредка SELECT, UPDATE/DELETE/транзакций нету, при этом
при INSERT часто возникают ExclusiveLock, причем переиодичски по 2 ExclusiveLock на один INSERT...

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

а в чем проблема то?

--

http://www.postgresql.org/docs/9.1/static/explicit-locking.html

вот такие блокировки бывают да.

--

у вас ROW EXCLUSIVE при инсерте - один к таблице относиться, другой к индексу.

как вы эти блокировки видите?
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585411
xtron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
именно ExclusiveLock а не RowExclusiveLock
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585430
xtron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
именно ExclusiveLock в INSERT на такую простую таблицу! что это? на всякий случай версия сервера:

Код: plsql
1.
2.
3.
4.
# select version();
                                                version                                                
-------------------------------------------------------------------------------------------------------
 PostgreSQL 9.1.1 on x86_64-unknown-linux-gnu, compiled by gcc-4.6.real (Debian 4.6.2-4) 4.6.2, 64-bit
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585437
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtron, почему Вы решили что ExclusiveLock на таблицу? Возможно Вы путаете ExclusiveLock на таблицу с ExclusiveLock на номер транзакции?
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585447
xtron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ёш,

transactionid в pg_locks пуст
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585450
xtron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ёш,

явных транзакций через BEGIN/COMMIT/ROLLBACK нету, только отдельные команды INSERT (массовые) и SELECT (относительно редкие)
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585453
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtron,

покажите. вам никто не верит)
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585456
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtron, покажите. Он и у virtualxid тоже пуст.
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585462
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtron,

Код: sql
1.
2.
3.
4.
5.
SELECT l.locktype, pg_class.relname AS table_name, l.transactionid, l.virtualtransaction, l.virtualxid, l.mode, l.granted, s.procpid AS process_id, age(now(), s.query_start)
   FROM pg_stat_activity s, pg_locks l
   LEFT JOIN pg_class ON l.relation = pg_class.oid
  WHERE l.pid = s.procpid and l.pid <> pg_backend_pid()                                         
  ORDER BY s.query_start;
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585479
xtron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ёш,


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT
  s.usename,
  l.mode,
  l.transactionid,
  d.datname,
  c.relname,
  l.granted,
  s.waiting,
  s.current_query
FROM
  pg_locks AS l
LEFT JOIN pg_stat_activity AS s ON l.pid = s.procpid
LEFT JOIN pg_database AS d ON l.database = d.oid
LEFT JOIN pg_class AS c ON l.relation = c.oid WHERE l.mode = 'ExclusiveLock';




Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
usename |     mode      | transactionid | datname | relname | granted | waiting |         ?column?
--------+---------------+---------------+---------+---------+---------+---------+--------------------------
   user | ExclusiveLock |               | fff     |         | t       | f       | INSERT INTO public.request
   user | ExclusiveLock |               | fff     |         | t       | f       | INSERT INTO public.request
   user | ExclusiveLock |               | fff     |         | t       | f       | INSERT INTO public.request
   user | ExclusiveLock |               | fff     |         | t       | f       | INSERT INTO public.request
   user | ExclusiveLock |    1109147258 |         |         | t       | f       | INSERT INTO public.request
   user | ExclusiveLock |               |         |         | t       | f       | INSERT INTO public.request
   user | ExclusiveLock |    1109147253 |         |         | t       | f       | INSERT INTO public.request
   user | ExclusiveLock |               |         |         | t       | f       | INSERT INTO public.request
   user | ExclusiveLock |               | fff     |         | t       | f       | INSERT INTO public.request
(9 rows)
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585489
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а у меня вот такая есть

Код: 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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
--
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,

  --- блокировки // l.relation::regclass::text - раскрывает внутри текущей базы только

  count( 1 ) as total_locks,
    
  count( nullif( (l.mode = 'RowExclusiveLock'), false ) ) as row_exclusive,
  array_to_string(array_agg( distinct ( case when ( l.mode = 'RowExclusiveLock' ) then coalesce(l.relation::regclass::text, l.relation::text) else null end ) ), ', ')
  as row_exclusive_rel,

  count( nullif( (l.mode = 'ShareUpdateExclusiveLock'), false ) ) as share_update_exclusive,
  array_to_string(array_agg( distinct ( case when ( l.mode = 'ShareUpdateExclusiveLock' ) then coalesce(l.relation::regclass::text, l.relation::text) else null end ) ), ', ')
  as share_update_exclusive_rel,

  count( nullif( (l.mode = 'ExclusiveLock'), false ) ) as exclusive,
  array_to_string(array_agg( distinct ( case when ( l.mode = 'ExclusiveLock' ) then coalesce(l.relation::regclass::text, l.relation::text) else null end ) ), ', ')
  as exclusive_rel,

  count( nullif( (l.mode = 'AccessShareLock'), false ) ) as access_share,
  array_to_string(array_agg( distinct ( case when ( l.mode = 'AccessShareLock' ) then coalesce(l.relation::regclass::text, l.relation::text) else null end ) ), ', ')
  as access_share_rel

/*
http://www.postgresql.org/docs/9.1/static/explicit-locking.html#LOCKING-TABLES

"ExclusiveLock"
"RowShareLock"
"RowExclusiveLock"
"ShareUpdateExclusiveLock"
"AccessShareLock"

...

*/
  
from

  pg_stat_activity s
    left join pg_locks l on ( (l.locktype = 'relation') and (l.pid = s.procpid) )

group by

  s.procpid, s.waiting, s.xact_start, s.current_query, s.backend_start
  
order by

  ( s.current_query = '<IDLE>' ), ( s.current_query like 'autovacuum: %' ), tx desc
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585495
xtron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Misha Tyurin,

Код: plsql
1.
2.
3.
4.
5.
SELECT l.locktype, pg_class.relname AS table_name, l.transactionid, l.virtualtransaction, l.virtualxid, l.mode, l.granted, s.procpid AS process_id, age(now(), s.query_start)
   FROM pg_stat_activity s, pg_locks l
   LEFT JOIN pg_class ON l.relation = pg_class.oid
  WHERE l.pid = s.procpid and l.pid <> pg_backend_pid() AND l.mode = 'ExclusiveLock' AND current_query iLike 'INSERT INTO main.request%'                     
  ORDER BY s.query_start;



Код: plsql
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.
29.
30.
31.
   locktype    | table_name | transactionid | virtualtransaction | virtualxid |     mode      | granted | process_id |       age
---------------+------------+---------------+--------------------+------------+---------------+---------+------------+-----------------
 virtualxid    |            |               | 62/90031           | 62/90031   | ExclusiveLock | t       |      23809 | 00:00:00.300563
 transactionid |            |    1109469710 | 62/90031           |            | ExclusiveLock | t       |      23809 | 00:00:00.300563
 advisory      |            |               | 62/90031           |            | ExclusiveLock | t       |      23809 | 00:00:00.300563
 transactionid |            |    1109469727 | 37/141489          |            | ExclusiveLock | t       |      23788 | 00:00:00.28569
 advisory      |            |               | 37/141489          |            | ExclusiveLock | t       |      23788 | 00:00:00.28569
 virtualxid    |            |               | 37/141489          | 37/141489  | ExclusiveLock | t       |      23788 | 00:00:00.28569
 advisory      |            |               | 37/141489          |            | ExclusiveLock | t       |      23788 | 00:00:00.28569
 virtualxid    |            |               | 27/172595          | 27/172595  | ExclusiveLock | t       |      23783 | 00:00:00.208176
 advisory      |            |               | 27/172595          |            | ExclusiveLock | t       |      23783 | 00:00:00.208176
 transactionid |            |    1109469800 | 27/172595          |            | ExclusiveLock | t       |      23783 | 00:00:00.208176
 advisory      |            |               | 27/172595          |            | ExclusiveLock | t       |      23783 | 00:00:00.208176
 advisory      |            |               | 72/86707           |            | ExclusiveLock | t       |      23817 | 00:00:00.161147
 transactionid |            |    1109469852 | 72/86707           |            | ExclusiveLock | t       |      23817 | 00:00:00.161147
 virtualxid    |            |               | 72/86707           | 72/86707   | ExclusiveLock | t       |      23817 | 00:00:00.161147
 virtualxid    |            |               | 51/117302          | 51/117302  | ExclusiveLock | t       |      23800 | 00:00:00.160751
 advisory      |            |               | 51/117302          |            | ExclusiveLock | t       |      23800 | 00:00:00.160751
 transactionid |            |    1109469855 | 51/117302          |            | ExclusiveLock | t       |      23800 | 00:00:00.160751
 transactionid |            |    1109469932 | 35/154657          |            | ExclusiveLock | t       |      23786 | 00:00:00.069691
 advisory      |            |               | 35/154657          |            | ExclusiveLock | t       |      23786 | 00:00:00.069691
 virtualxid    |            |               | 35/154657          | 35/154657  | ExclusiveLock | t       |      23786 | 00:00:00.069691
 advisory      |            |               | 35/154657          |            | ExclusiveLock | t       |      23786 | 00:00:00.069691
 advisory      |            |               | 35/154657          |            | ExclusiveLock | t       |      23786 | 00:00:00.069691
 advisory      |            |               | 92/54020           |            | ExclusiveLock | t       |      23939 | 00:00:00.061729
 advisory      |            |               | 92/54020           |            | ExclusiveLock | t       |      23939 | 00:00:00.061729
 transactionid |            |    1109469934 | 92/54020           |            | ExclusiveLock | t       |      23939 | 00:00:00.061729
 advisory      |            |               | 92/54020           |            | ExclusiveLock | t       |      23939 | 00:00:00.061729
 virtualxid    |            |               | 92/54020           | 92/54020   | ExclusiveLock | t       |      23939 | 00:00:00.061729
 advisory      |            |               | 92/54020           |            | ExclusiveLock | t       |      23939 | 00:00:00.061729
(28 rows)
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585503
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtron,

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

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

--

а что вас смущает то?

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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
  pid  | wx |       tx        | total_locks | row_exclusive |          row_exclusive_rel            | share_update_exclusive | share_update_exclusive_rel | exclusive | exclusive_rel | access_share |  access_share_rel   
-------+----+-----------------+-------------+---------------+---------------------------------------+------------------------+----------------------------+-----------+---------------+--------------+---------------------
 19144 |    | 00:00:00.031736 |           3 |             2 | public.request, main.request__idx001  |                      0 |                            |         0 |               |            1 | public.request_id_seq
 19457 |    | 00:00:00.031429 |           3 |             2 | public.request, main.request__idx001  |                      0 |                            |         0 |               |            1 | public.request_id_seq
 19755 |    | 00:00:00.018274 |           3 |             2 | public.request, main.request__idx001  |                      0 |                            |         0 |               |            1 | public.request_id_seq
 19489 |    | 00:00:00.018113 |           3 |             2 | public.request, main.request__idx001  |                      0 |                            |         0 |               |            1 | public.request_id_seq
 19483 |    | 00:00:00.013677 |           3 |             2 | public.request, main.request__idx001  |                      0 |                            |         0 |               |            1 | public.request_id_seq
 19157 |    | 00:00:00.012211 |           3 |             2 | public.request, main.request__idx001  |                      0 |                            |         0 |               |            1 | public.request_id_seq
(6 rows)
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585535
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtron,

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

Код: plsql
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.
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,
  --- блокировки // l.relation::regclass::text - раскрывает внутри текущей базы только
  count( 1 ) as total_locks,
  count( nullif( (l.mode = 'RowExclusiveLock'), false ) ) as row_exclusive,
  array_to_string(array_agg( distinct ( case when ( l.mode = 'RowExclusiveLock' ) then coalesce(l.relation::regclass::text, l.relation::text) else null end ) ), ', ')
  as row_exclusive_rel,
  count( nullif( (l.mode = 'ShareUpdateExclusiveLock'), false ) ) as share_update_exclusive,
  array_to_string(array_agg( distinct ( case when ( l.mode = 'ShareUpdateExclusiveLock' ) then coalesce(l.relation::regclass::text, l.relation::text) else null end ) ), ', ')
  as share_update_exclusive_rel,
  count( nullif( (l.mode = 'ExclusiveLock'), false ) ) as exclusive,
  array_to_string(array_agg( distinct ( case when ( l.mode = 'ExclusiveLock' ) then coalesce(l.relation::regclass::text, l.relation::text) else null end ) ), ', ')
  as exclusive_rel,
  count( nullif( (l.mode = 'AccessShareLock'), false ) ) as access_share,
  array_to_string(array_agg( distinct ( case when ( l.mode = 'AccessShareLock' ) then coalesce(l.relation::regclass::text, l.relation::text) else null end ) ), ', ')
  as access_share_rel
from
  pg_stat_activity s
    left join pg_locks l on ( l.pid = s.procpid )
WHERE s.current_query iLike 'INSERT INTO public.request%'
group by
  s.procpid, s.waiting, s.xact_start, s.current_query, s.backend_start
order by
  ( s.current_query = '<IDLE>' ), ( s.current_query like 'autovacuum: %' ), tx desc;






Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  pid  | wx |       tx        | total_locks | row_exclusive |          row_exclusive_rel             | share_update_exclusive | share_update_exclusive_rel | exclusive | exclusive_rel | access_share |  access_share_rel   
-------+----+-----------------+-------------+---------------+----------------------------------------+------------------------+----------------------------+-----------+---------------+--------------+---------------------
 19863 |    | 00:00:00.37361  |           6 |             2 | public.request, public.request__idx001 |                      0 |                            |         3 |               |            1 | public.request_id_seq
 20116 |    | 00:00:00.373521 |          10 |             2 | public.request, public.request__idx001 |                      0 |                            |         7 |               |            1 | public.request_id_seq
 20118 |    | 00:00:00.361178 |           7 |             2 | public.request, public.request__idx001 |                      0 |                            |         4 |               |            1 | public.request_id_seq
 20124 |    | 00:00:00.348249 |           6 |             2 | public.request, public.request__idx001 |                      0 |                            |         3 |               |            1 | public.request_id_seq
 20065 |    | 00:00:00.299794 |           5 |             2 | public.request, public.request__idx001 |                      0 |                            |         2 |               |            1 | public.request_id_seq
 20117 |    | 00:00:00.292552 |           5 |             2 | public.request, public.request__idx001 |                      0 |                            |         2 |               |            1 | public.request_id_seq
 20125 |    | 00:00:00.243793 |          11 |             2 | public.request, public.request__idx001 |                      0 |                            |         8 |               |            1 | public.request_id_seq
 20122 |    | 00:00:00.216375 |          11 |             2 | public.request, public.request__idx001 |                      0 |                            |         8 |               |            1 | public.request_id_seq
 20161 |    | 00:00:00.135266 |           6 |             2 | public.request, public.request__idx001 |                      0 |                            |         3 |               |            1 | public.request_id_seq
 20162 |    | 00:00:00.090813 |           6 |             2 | public.request, public.request__idx001 |                      0 |                            |         3 |               |            1 | public.request_id_seq
(10 rows)
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585679
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtron,

Что вы еще делаете в этих транзакциях, рассказывайте. Через что базу дергаете. Там же видно было, что у вас есть локи на таблицы на транзакции и на адвизори еще. Откуда там адвизори?
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585691
xtron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Misha Tyurin,

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

То что вы демонстрируете не противоречит тому что там инсерты. Транзакция есть в любом случае, не зависимо от того создаете ли вы ее явно или нет. А лишние блокировки - я вижу адвизори.

Какой клиент к бд? Что за логика. Вообще выглядит все прилично - никто никого не ждет. Но кажется что вы не контролируете как точно идут вызовы. Может эти бекенды еще где-то юзаете. Есть ли пулы коннектов?
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585755
xtron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Misha Tyurin,

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

сорри, сижу в баре) нету коннекта проверить про адвизори. Такое впечатление, что они там где то копяться от других вызовов. Что еще там происходит с базой? кто и как ее дергает ?еще может пригодится, Пгбоунсер в каком режиме пул: сессии или транзакции?
...
Рейтинг: 0 / 0
ExclusiveLock
    #37585799
xtron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Misha Tyurin,

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


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