powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / DBMS_PARALLEL_EXECUTE. Странный размер chunk_size
13 сообщений из 13, страница 1 из 1
DBMS_PARALLEL_EXECUTE. Странный размер chunk_size
    #39494335
Hoi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hoi
Гость
Всем привет.
У меня следующая задача. Сконвертировать поля типа RAW в поля типа BLOB. Я добавляю в таблицу два новых поля blob_field1 и blob_fileld2. Обновляю их этой процедурой:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure convert_data(p_start_id     rowid,
                       p_end_id       rowid) is
...
begin
  select count(1) into v_count from my_table where rowid between p_start_id and p_end_id;
  if v_count > 0 then

    update my_table 
    set blob_field1 = raw_field1 ,
        blob_field2 = raw_field2
    where rowid between p_start_id and p_end_id;
    v_rec_count := SQL%ROWCOUNT;

    commit;
  end if;
end convert_data;



Которую запускаю в параллели таким кодом:
Код: 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.
    v_chunk_size              integer := 5000; -- размер блока не более 5000 строк.
	v_parallel_threads        pls_integer := SOME_VALUE; -- равен половине процессоров (CPU_COUNT)
 -- Конвертирование данных запускаем в параллельных потоках (джобами)
        -- Разбиваем таблицу на chunks по 5000 строк (не более), чтобы не забить undo сегменты даже "слабых" серверов
        DBMS_PARALLEL_EXECUTE.create_task (task_name => l_task);
        DBMS_PARALLEL_EXECUTE.create_chunks_by_rowid(task_name   => l_task,
                                                     table_owner => v_owner,
                                                     table_name  => my_table,
                                                     by_row      => TRUE,
                                                     chunk_size  => v_chunk_size);

        l_sql_stmt := 'begin my_package.convert_data(:start_id, :end_id); end;';

        DBMS_PARALLEL_EXECUTE.run_task(task_name      => l_task,
                                       sql_stmt       => l_sql_stmt,
                                       language_flag  => DBMS_SQL.NATIVE,
                                       parallel_level => v_parallel_threads);

        -- If there is error, RESUME it for at most 2 times.
        l_try := 0;
        l_status := DBMS_PARALLEL_EXECUTE.task_status(l_task);
        WHILE(l_try < 2 and l_status != DBMS_PARALLEL_EXECUTE.FINISHED)
        Loop
          l_try := l_try + 1;
          DBMS_PARALLEL_EXECUTE.resume_task(l_task);
          l_status := DBMS_PARALLEL_EXECUTE.task_status(l_task);
        END LOOP;

        drop_parallel_task;



Проблема в том, что несмотря на то, что я указываю chunk_size в 5000 строк он у меня обновляет по 45-48 строк. Если указываю блоки (by_row => FALSE), то это все равно ничего не меняет.
Подскажите, как Оракл определяет кол-во строк для каждого чанка? Можно ли на это влиять?
...
Рейтинг: 0 / 0
DBMS_PARALLEL_EXECUTE. Странный размер chunk_size
    #39494336
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HoiМожно ли на это влиять? dbms_paralle_execute
...
Рейтинг: 0 / 0
DBMS_PARALLEL_EXECUTE. Странный размер chunk_size
    #39494338
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
DBMS_PARALLEL_EXECUTE. Странный размер chunk_size
    #39494347
Hoi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hoi
Гость
Спасибо, за ссылки. Не знал об этом баге, но, кажется, это не мой случай.
У меня нет проблем с количеством запущенных джобов. У меня проблема с тем, что в каждой джобе не столько записей (хотя бы приблизительно) сколько я хочу.

Версия Оракла, к слову, на том сервере либо 11.2 либо 12.1. Уточню у админов.
...
Рейтинг: 0 / 0
DBMS_PARALLEL_EXECUTE. Странный размер chunk_size
    #39494352
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HoiСпасибо, за ссылки. Не знал об этом баге, но, кажется, это не мой случай.А я вот умею меж строк читать:
Баг на баге сидит и багом погоняет.
...
Рейтинг: 0 / 0
DBMS_PARALLEL_EXECUTE. Странный размер chunk_size
    #39494491
Hoi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hoi
Гость
Ну хорошо, а почему размер чанка у меня равен 48 записям, когда я запрашиваю 5000. Почему не 1000, не 3000.

Как происходит этот выбор?
Что я не увидел между строк?
Еще один баг в этом пакете?

Если да, то есть какое-то решение подобной задачи?
...
Рейтинг: 0 / 0
DBMS_PARALLEL_EXECUTE. Странный размер chunk_size
    #39494543
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HoiПочему неMOS
HoiЕсли да, то есть какое-то решение подобной задачи?Сдаётся мне, что непараллельно оно уже бы допилило.
...
Рейтинг: 0 / 0
DBMS_PARALLEL_EXECUTE. Странный размер chunk_size
    #39495005
Hoi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hoi
Гость
MOS - означает "обращайся в My Oracle Support"?

Непараллельно оно пилило 60млн записей около 20 часов. Правда способ был немного другой. шла конвертация CLOB в BLOB. С RAW первый раз столкнулся.

Правильно я понимаю, что dbms_parallel_execute глючен насквозь и пользовать его не рекомендуется?
Какие есть обходные пути обновить таблицу с блобами (не securfile) в параллели?
...
Рейтинг: 0 / 0
DBMS_PARALLEL_EXECUTE. Странный размер chunk_size
    #39495063
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HoiКакие есть обходные пути обновить таблицу с блобами (не securfile) в параллели?Неужели своим собственным умом сложно не полагаясь на "дядю" разбить на порции и запустить -ннадцать job-ов? Я бы уже давно запустил и они бы уже отработали.
...
Рейтинг: 0 / 0
DBMS_PARALLEL_EXECUTE. Странный размер chunk_size
    #39495187
Hoi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hoi
Гость
Это не разовое обновление таблицы.
Это продукт, который будет продаваться и поэтому хочется полагаться на решения из коробки, а не изобретать велосипед.

К тому же, потом на форуме кто-нибудь мудрый попрекнет тебя изобретением велосипедов на каждом шагу вместо правильного использования стандартного решения.
...
Рейтинг: 0 / 0
DBMS_PARALLEL_EXECUTE. Странный размер chunk_size
    #39495303
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HoiЭто продукт, который будет продаватьсяУхожу и не мешаю зарабатывать на хлеб собственным умом...
...
Рейтинг: 0 / 0
DBMS_PARALLEL_EXECUTE. Странный размер chunk_size
    #39495420
Hoi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hoi
Гость
в моем случае обсуждаемого выше бага на сервере не оказалось - стоит патч, содержащий нужный фикс.
А на chunk_size удалось повлиять собрав статистику по таблице:
Код: plsql
1.
2.
3.
begin
DBMS_STATS.GATHER_TABLE_STATS('owner','my_table', estimate_percent=>40, cascade=>true, degree=>9/*Количество потоков*/, no_invalidate=>true, method_opt=>'FOR ALL COLUMNS SIZE 1');  
end;


вычитал , что Оракл, по всей видимости, не считает записи по таблице, при разбиении на чанки.
...
Рейтинг: 0 / 0
DBMS_PARALLEL_EXECUTE. Странный размер chunk_size
    #39495421
Hoi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hoi
Гость
Ссылка на блог вырезалась:
http://alex-td.blogspot.ru/2012/09/using-dbmsparallelexecute-package.html
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / DBMS_PARALLEL_EXECUTE. Странный размер chunk_size
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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