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

# \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
20.12.2011, 17:04
    #37585385
Misha Tyurin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExclusiveLock
xtron,

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

--

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

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

--

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

как вы эти блокировки видите?
...
Рейтинг: 0 / 0
20.12.2011, 17:12
    #37585411
xtron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExclusiveLock
именно ExclusiveLock а не RowExclusiveLock
...
Рейтинг: 0 / 0
20.12.2011, 17:18
    #37585430
xtron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExclusiveLock
именно 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
20.12.2011, 17:20
    #37585437
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExclusiveLock
xtron, почему Вы решили что ExclusiveLock на таблицу? Возможно Вы путаете ExclusiveLock на таблицу с ExclusiveLock на номер транзакции?
...
Рейтинг: 0 / 0
20.12.2011, 17:24
    #37585447
xtron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExclusiveLock
Ёш,

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

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

покажите. вам никто не верит)
...
Рейтинг: 0 / 0
20.12.2011, 17:29
    #37585456
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExclusiveLock
xtron, покажите. Он и у virtualxid тоже пуст.
...
Рейтинг: 0 / 0
20.12.2011, 17:32
    #37585462
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExclusiveLock
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
20.12.2011, 17:42
    #37585479
xtron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExclusiveLock
Ёш,


Код: 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
20.12.2011, 17:46
    #37585489
Misha Tyurin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExclusiveLock
а у меня вот такая есть

Код: 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
20.12.2011, 17:49
    #37585495
xtron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExclusiveLock
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
20.12.2011, 17:53
    #37585503
Misha Tyurin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExclusiveLock
xtron,

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

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

--

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

в чем причина. почему вы к блокировкам обратились?
...
Рейтинг: 0 / 0
20.12.2011, 18:04
    #37585528
xtron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExclusiveLock
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
20.12.2011, 18:07
    #37585535
Misha Tyurin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExclusiveLock
xtron,

ну и? всё вроде как и должно быть. а вы чего ожидаете?
...
Рейтинг: 0 / 0
20.12.2011, 18:28
    #37585577
xtron
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExclusiveLock
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
20.12.2011, 19:40
    #37585679
Misha Tyurin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ExclusiveLock
xtron,

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

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

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

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

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

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

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


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