powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Паралельный DELETE
28 сообщений из 28, показаны все 2 страниц
Паралельный DELETE
    #39797070
maverick2104
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день ,

Есть таблица :
Код: plsql
1.
2.
3.
4.
                 ID              NUMBER
                 FILE_NAME       VARCHAR2
                 FILE_CONTENT    BLOB
                 DATE_CREATED    DATE



Есть задача удалить старые записи ( поле BLOB содержит .pdf и занимает много места ) .

Удаляю по дате :
Код: plsql
1.
delete from table1 where trunc(date_created) = to_date('01.02.2019','dd.mm.yyyy')



Один день удаляется по ~15 минут ( 20-22 тысяч записей ) .

Решил запускать удаление из под разных сессий за разные дни но первая сессия сразу заблокировала вторую ...


Почему так происходит ? Разве оператор DELETE не ставит блокировку только на строках которые подтверждены изменению этим оператором ?

Вот вторя сессия висит :
Код: plsql
1.
2.
USERNAME	STATUS	PROGRAM	        ROW_WAIT_OBJ#	ROW_WAIT_FILE#	ROW_WAIT_ROW#	BLOCKING_SESSION_STATUS
ELECTRON_EXTR	ACTIVE	plsqldev.exe	100259	        0	        0	        VALID
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797198
Фотография Viewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maverick2104Разве оператор DELETE не ставит блокировку только на строках которые подтверждены изменению этим оператором ?
Почему deadlock?
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797271
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Viewer,

Попробуйте вариант
execute immediate 'alter session enable parallel dml';
delete /*+parallel(t,10) full(t)*/ table t where trunc(date_created) = to_date('01.02.2019','dd.mm.yyyy');
commit;
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797284
Фотография Viewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redirect to TS...
feagor maverick2104 ,

Попробуйте вариант
Код: plsql
1.
2.
3.
 execute immediate 'alter session enable parallel dml';
    delete /*+parallel(t,10) full(t)*/ table t where trunc(date_created) = to_date('01.02.2019','dd.mm.yyyy');
    commit;
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797303
maverick2104
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feagor,
Viewer,

Спасибо за отзыв , к сожалению parallel dml не спас ситуацию .
Еще инфа про таблицу :

ID = PRIMARY KEY
Есть 4 индекса в таблице
Еще 2 Дочерние таблицы ( от ID )
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797309
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По ссылке-то сходил?
Уверен, что во всех блоках есть достаточно ITL-слотов или места для их создания?
Если нет, уменьшай степень параллелизма
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797310
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maverick2104Есть задача удалить старые записи ( поле BLOB содержит .pdf и занимает много места ) .
Просто удаление не освободит место.
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797311
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maverick2104,

Сколько записей в таблице всего?
Сколько записей по trunc(date_created)?
Какая в итоге стоит задча?
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797312
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maverick2104,
Вторичные ключи все проиндексированы?
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797315
maverick2104
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123ййmaverick2104Есть задача удалить старые записи ( поле BLOB содержит .pdf и занимает много места ) .
Просто удаление не освободит место.

Знаю,
Код: plsql
1.
2.
delete from table1 where trunc(date_created) = to_date('01.02.2019','dd.mm.yyyy');
alter table1 modify lob (file_content)(shrink space);
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797331
maverick2104
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feagormaverick2104,

Сколько записей в таблице всего?
Сколько записей по trunc(date_created)?
Какая в итоге стоит задча?

1) ~ 700 000 записей
2) ~ 21 000 записей
3) Удалить записи где trunc(date_created) < trunc(sysdate) - 60


Вячеслав ЛюбомудровПо ссылке-то сходил?
Уверен, что во всех блоках есть достаточно ITL-слотов или места для их создания?
Если нет, уменьшай степень параллелизма

Конечно сходил , что такое ITL-слоты и v$lock узнал сегодня .
Как я понял есть 255 ITL-слотов ( визуализация в представление V$LOCK ) .

Код: plsql
1.
2.
3.
4.
5.
SQL> select count(*) from v$lock;

  COUNT(*)
----------
       239
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797333
maverick2104
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maverick2104( визуализация в представление V$LOCK ) .


Извините , деза , иду дальше читать .
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797343
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maverick2104maverick2104( визуализация в представление V$LOCK ) .


Извините , деза , иду дальше читать .не парься, я просто не тот код посмотрел
Если у тебя не проходит уже parallel 2 (а не 10, как я подумал), то вряд ли дело в этом.

Но вот выборка из V$LOCK для этих 2 сессий (параллельных) могла бы хоть что-то прояснить
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797359
maverick2104
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

SID=260 Первый delete который работает нормально .
SID=295 Второй delete который виснет ( в v$session blocking_session_status='VALID )

v$lock
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
ADDR	                KADDR	                SID	TYPE	ID1	ID2	LMODE	REQUEST	CTIME	BLOCK	CON_ID
00007FACA1C9ACD0	00007FACA1C9AD40	260	TM	89978	0	3	0	301	0	0
00007FACA1C9ACD0	00007FACA1C9AD40	260	TM	100259	0	3	0	0	1	0
00000000876D8958	00000000876D89D8	260	AE	100	0	4	0	4303	0	0
000000007D6E5D58	000000007D6E5DE0	260	TX	131084	560939	6	0	128	0	0
00007FACA1C9ACD0	00007FACA1C9AD40	295	TM	100259	0	0	5	75	0	0
00007FACA1C9ACD0	00007FACA1C9AD40	295	TM	89978	0	3	0	75	0	0
00000000876DDF98	00000000876DE018	295	AE	100	0	4	0	107	0	0

...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797365
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j2kmaverick2104,
Вторичные ключи все проиндексированы?
?
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797380
maverick2104
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j2kj2kmaverick2104,
Вторичные ключи все проиндексированы?
?

Да.
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797383
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но блокировки показывают, что это не так
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797398
maverick2104
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,
j2k,

Может я Вас не правильно понял .

У этой таблице есть 2 foreign key references ( оба по столбцу ID у которого есть индекс в рамках данной таблице ).
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797439
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maverick2104Решил запускать удаление из под разных сессий за разные дни но первая сессия сразу заблокировала вторую ...
Почему так происходит ?

Ты что запустил:

Код: plsql
1.
delete from table1 where trunc(date_created) = to_date('01.02.2019','dd.mm.yyyy')



из нескольких сессий и спрашиваешь почему все кроме первой висят???

SY.
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797440
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, там бы блокировка TX конкурировала
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797443
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maverick2104Вячеслав Любомудров,
j2k,

У этой таблице есть 2 foreign key references ( оба по столбцу ID у которого есть индекс в рамках данной таблице ).
Теперь я вас не пойму, у вас 2 столбца 1 индекс? можете структуру таблицы привести?
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797455
maverick2104
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYmaverick2104Решил запускать удаление из под разных сессий за разные дни но первая сессия сразу заблокировала вторую ...
Почему так происходит ?

Ты что запустил:

Код: plsql
1.
delete from table1 where trunc(date_created) = to_date('01.02.2019','dd.mm.yyyy')



из нескольких сессий и спрашиваешь почему все кроме первой висят???

SY.

Да нет конечно , в одной сессии я запустил:
Код: plsql
1.
delete from table1 where trunc(date_created) = to_date('01.02.2019','dd.mm.yyyy')



А во второй :
Код: plsql
1.
delete from table1 where trunc(date_created) = to_date('02.02.2019','dd.mm.yyyy')





j2kможете структуру таблицы привести?
Структура
Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
-- Create table
create table ELECTRON_EXTR.GENERATED_STATEMENTS
(
  id           NUMBER(19) not null,
  account_appl VARCHAR2(10 CHAR),
  account_id   NUMBER(19),
  client_id    NUMBER(19),
  data         VARCHAR2(10 CHAR),
  file_content BLOB,
  file_name    VARCHAR2(100 CHAR),
  home_branch  VARCHAR2(10 CHAR),
  perioada     VARCHAR2(36 CHAR),
  reprezentant VARCHAR2(50 CHAR),
  reson        VARCHAR2(255 CHAR),
  status       VARCHAR2(36 CHAR),
  time_created DATE,
  time_sent    DATE,
  version      NUMBER(10) not null,
  arch_pass    VARCHAR2(255 CHAR)
)
tablespace ELECTRON_EXTR_DATA01
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate indexes 
create index ELECTRON_EXTR.GENERATED_STATEMENTS_IDX3 on ELECTRON_EXTR.GENERATED_STATEMENTS (CLIENT_ID, ACCOUNT_ID, PERIOADA)
  tablespace ELECTRON_EXTR_DATA01
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
create index ELECTRON_EXTR.GEN_STATS_IDX1 on ELECTRON_EXTR.GENERATED_STATEMENTS (DATA, CLIENT_ID, ACCOUNT_ID)
  tablespace ELECTRON_EXTR_DATA01
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
create index ELECTRON_EXTR.GEN_STATS_IDX2 on ELECTRON_EXTR.GENERATED_STATEMENTS (CLIENT_ID, ACCOUNT_ID, DATA)
  tablespace ELECTRON_EXTR_DATA01
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints 
alter table ELECTRON_EXTR.GENERATED_STATEMENTS
  add primary key (ID)
  using index 
  tablespace ELECTRON_EXTR_DATA01
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );

...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797460
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз -- проверь, кто ссылается на эту таблицу
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797464
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот эти колонки все проиндексированы (судя по вашим словам их должно быть 2)?

Код: plsql
1.
2.
3.
4.
select col2.table_name, col2.column_name, fk.* from dba_constraints fk 
inner join dba_cons_columns col on fk.R_CONSTRAINT_NAME=col.constraint_name and fk.R_OWNER=col.owner
inner join dba_cons_columns col2 on fk.CONSTRAINT_NAME=col2.constraint_name and fk.OWNER=col2.owner
where col.table_name='GENERATED_STATEMENTS' and fk.constraint_type='R' order by 1,2
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797467
казинак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYmaverick2104Решил запускать удаление из под разных сессий за разные дни но первая сессия сразу заблокировала вторую ...
Почему так происходит ?

Ты что запустил:

Код: plsql
1.
delete from table1 where trunc(date_created) = to_date('01.02.2019','dd.mm.yyyy')



из нескольких сессий и спрашиваешь почему все кроме первой висят???

SY.

и тут пришол лесник и всех разогнал

странно, что другие продолжают упорствовать в своих версиях
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797469
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я художник, я так вижу (но еще и пытаюсь читать весь топик, а не выборочно)
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797470
maverick2104
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j2kВот эти колонки все проиндексированы (судя по вашим словам их должно быть 2)?

Код: plsql
1.
2.
3.
4.
select col2.table_name, col2.column_name, fk.* from dba_constraints fk 
inner join dba_cons_columns col on fk.R_CONSTRAINT_NAME=col.constraint_name and fk.R_OWNER=col.owner
inner join dba_cons_columns col2 on fk.CONSTRAINT_NAME=col2.constraint_name and fk.OWNER=col2.owner
where col.table_name='GENERATED_STATEMENTS' and fk.constraint_type='R' order by 1,2



Тоесть вот эти 2 колонки в этих таблицах должны быть проиндексованы ? ( на данный момент нет , индексов нет )
Код: plsql
1.
2.
3.
TABLE_NAME	        COLUMN_NAME	        OWNER	        CONSTRAINT_NAME	        TABLE_NAME
GENERATED_DOCUMENTS	GENERATED_STATEMENT_ID	ELECTRON_EXTR	FKB2AD800899A72823      GENERATED_DOCUMENTS
ZIPPED_STATEMENTS	GENERATED_STATEMENT_ID	ELECTRON_EXTR	FK65F1037599A72823	ZIPPED_STATEMENTS



А почему это так работает что без индекса никуда ? Можете хотяб в доку ткнуть ? Спасибо .
...
Рейтинг: 0 / 0
Паралельный DELETE
    #39797477
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maverick2104, посмотрите вот тут:
Lock child table- Почему?
там вроде ссылки и на доку были
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Паралельный DELETE
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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