Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Зависает запрос delete (enq: TX - row lock contention) / 13 сообщений из 13, страница 1 из 1
30.11.2020, 15:05
    #40023366
lYY
lYY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает запрос delete (enq: TX - row lock contention)
Приветствую!

Есть таблица:
Код: 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.
create table MAXVFILTER_CARD
(
  article VARCHAR2(10),
  audsid  NUMBER
)
  pctfree 10
  initrans 3
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  )
nologging;

create index IDX_MAXVFILTER_CARD_AUDSID on MAXVFILTER_CARD (AUDSID)
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );


При формировании пользователем заказа в таблицу вставляется ID пользователя и набор артикулов.
После формирования идет запрос на удаление:
Код: plsql
1.
2.
3.
4.
DELETE FROM MAXVFILTER_CARD T 
WHERE T.AUDSID IN 
 (SELECT F.AUDSID FROM MAXVFILTER_CARD F,V$SESSION G 
  WHERE G.AUDSID(+)=F.AUDSID AND G.AUDSID IS NULL AND F.AUDSID<>'30000000' AND F.AUDSID<>'30000001')


или
Код: plsql
1.
2.
3.
4.
DELETE FROM MAXVFILTER_CARD T 
WHERE T.AUDSID IN 
   (SELECT DISTINCT F.AUDSID FROM MAXIMIZATOR.MAXVFILTER_CARD F,V$SESSION G 
    WHERE G.AUDSID(+)=F.AUDSID AND G.AUDSID IS NULL AND F.AUDSID<>'30000000' AND F.AUDSID<>'30000001')



В таблице бывает 3-15 тыс записей.

Обычно удаление выполняется моментально, но иногда зависает у всех пользователей одновременно на ожиданиях:
db file sequential read или enq: TX - row lock contention

Приходится собирать статистику по таблице и перезапускать приложение.

Как можно исправить ситуацию?

(Oracle 11g, OraLin7, SSD пользователей около 200)
...
Рейтинг: 0 / 0
30.11.2020, 15:12
    #40023370
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает запрос delete (enq: TX - row lock contention)
lYY,

Поиск?
5483396

orafaq
...
Рейтинг: 0 / 0
30.11.2020, 15:26
    #40023374
lYY
lYY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает запрос delete (enq: TX - row lock contention)
Спасибо, прочитал.
Ответа "что делать" не нашел.
...
Рейтинг: 0 / 0
30.11.2020, 16:15
    #40023401
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает запрос delete (enq: TX - row lock contention)
lYY
Спасибо, прочитал.
Ответа "что делать" не нашел.

Попытка чистить за всеми умершими из всех живых сессий не вполне понятна.
У Вас постоянно отваливаются процессы, оставляя хлам в MAXVFILTER_CARD?
Если ванговать, то Ваши 200 сессий кидаются ажиотажно толпиться друг за другом в попытке удалить одну и ту же запись при появлении мусора отвалившейся сессии, что не очень разумно.
Замените прямой delete на delete в цикле по select for update skip locked - должно полегчать.
Другой подход - подчистку проводить джобиком, что также избавит от хлопот.
...
Рейтинг: 0 / 0
30.11.2020, 16:16
    #40023402
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает запрос delete (enq: TX - row lock contention)
lYY
Ответа "что делать" не нашел.
initrans увеличить же, ну
...
Рейтинг: 0 / 0
30.11.2020, 16:19
    #40023404
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает запрос delete (enq: TX - row lock contention)
oragraf
lYY
Ответа "что делать" не нашел.
initrans увеличить же, ну
Насколько? До 200?
А когда 500 сессий столпятся что ТС будет делать?
...
Рейтинг: 0 / 0
30.11.2020, 16:41
    #40023414
lYY
lYY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает запрос delete (enq: TX - row lock contention)
oragraf
lYY
Ответа "что делать" не нашел.
initrans увеличить же, ну

Я увеличил, не помогло. Вопрос - на сколько увеличивать? Как посчитать?
...
Рейтинг: 0 / 0
30.11.2020, 16:49
    #40023416
lYY
lYY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает запрос delete (enq: TX - row lock contention)
andrey_anonymous
lYY
Спасибо, прочитал.
Ответа "что делать" не нашел.

Попытка чистить за всеми умершими из всех живых сессий не вполне понятна.
У Вас постоянно отваливаются процессы, оставляя хлам в MAXVFILTER_CARD?
Если ванговать, то Ваши 200 сессий кидаются ажиотажно толпиться друг за другом в попытке удалить одну и ту же запись при появлении мусора отвалившейся сессии, что не очень разумно.
Замените прямой delete на delete в цикле по select for update skip locked - должно полегчать.
Другой подход - подчистку проводить джобиком, что также избавит от хлопот.

Спасибо, скинул программистам. Будем пробовать.
...
Рейтинг: 0 / 0
30.11.2020, 17:08
    #40023418
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает запрос delete (enq: TX - row lock contention)
lYY
oragraf
пропущено...
initrans увеличить же, ну

Я увеличил, не помогло. Вопрос - на сколько увеличивать? Как посчитать?

Без соответствующего pctfree бесполезно :)
И эффект будет (если будет) только на вновь размещенных блоках данных, уже размещенным до полного освобождения без разницы.
...
Рейтинг: 0 / 0
30.11.2020, 17:33
    #40023430
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает запрос delete (enq: TX - row lock contention)
andrey_anonymous

Без соответствующего pctfree бесполезно :)

Как бы нет, они оба влияют.
И пр одинаковом pctfree большее initrans позволит разместиться большему числу транзакций.
...
Рейтинг: 0 / 0
30.11.2020, 18:19
    #40023446
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает запрос delete (enq: TX - row lock contention)
andrey_anonymous
Насколько? До 200?А когда 500 сессий столпятся что ТС будет делать?
Я резюмировал ему ссылку, которую он не понял. А на сколько - этой инфы в явном виде я сам не встречал, пусть сам по граблям ходит
...
Рейтинг: 0 / 0
01.12.2020, 03:58
    #40023511
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает запрос delete (enq: TX - row lock contention)
Вообще-то при нехватке ITL более другое ожидание

А вот просто COMMIT говорить не пробовал?
...
Рейтинг: 0 / 0
01.12.2020, 09:57
    #40023538
lYY
lYY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает запрос delete (enq: TX - row lock contention)
Commit там есть.
Куда копать, я понял. Всем спасибо!
(разработчик должен поменять логику. где не поможет, буду увеличивать pctfree и initrans)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Зависает запрос delete (enq: TX - row lock contention) / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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