Выполнение параллельных заданий DB2 LUW - PullRequest
0 голосов
/ 12 мая 2018

Я работал в базе данных DB2 LUW, я хочу представить процедуры как параллельное задание.Это означает, что у меня есть процесс, который будет выполнять некоторые DDL, DML-операторы для одной таблицы.Эта таблица содержит огромные данные, эту же процедуру необходимо запустить для нескольких параллельных таблиц.

Я отправляю задание с помощью инструкции DBMS_JOB.SUBMIT и выполняю задание с помощью инструкции DBMS_JOB.RUN.У меня есть процедура обработчика заданий, которая помогает делать это параллельно.

Но каждое задание выполняется последовательно (это означает, что первое задание было выполнено, а затем началось второе задание, после того как второе задание завершено, началось 3 задание.

** Мой первый вопрос ** как запустить DBMS_JOB параллельно?

И вторая проблема, с которой я сталкиваюсь, - сеанс связи все еще ожидает завершения всех заданийЯ не могу использовать этот конкретный сеанс, как только вся работа будет выполнена, чем у меня будет доступ для использования этого же сеанса.

** Мой второй вопрос ** * как сделать сеанс доступным вместоожидание всех выполненных работ *

Пожалуйста, помогите мне, сэр / мадам.

1 Ответ

0 голосов
/ 12 мая 2018

DBMS_JOB - это интерфейс к Административному планировщику Taks (ATS) Db2-LUW для некоторой совместимости с Oracle RDBMS.Однако вы также можете использовать ATS напрямую, независимо от DBMS_JOB, через ADMIN_TASK_ADD и связанные с этим процедуры.

Мой опыт показывает, что db2acd (процесс, который реализует автономные действия, включая ATS), ненадежен, особенно когда неправильно настроены ulimits, ион молча не будет работать при некоторых обстоятельствах.У него также есть 5-минутное пробуждение для проверки новых заданий, которые могут нарушить работу, и требует уже активированной базы данных, что неудобно для некоторых случаев использования.

Я бы не рекомендовал использовать Db2 ATS для функциональности уровня приложения,Полнофункциональные корпоративные планировщики существуют по веским причинам.

Для параллельных вызовов я бы использовал инструмент корпоративного планирования, если он доступен, или при сбое, который использует планировщик, предоставляемый операционной системой либо на Db2-сервере, либо в худшем случае.на стороне клиента, следя за тем, чтобы в обоих случаях каждый вызов хранимой процедуры представлял собой свое собственное запланированное задание со своим собственным соединением Db2.

Используя соединение Db2 для вызова хранимой процедуры, иодновременно планируя их, они работают параллельно, если их действия не вызывают взаимных конфликтов.

Помимо вышесказанного, я полагаю, что ATS будет запускать задания параллельно, при условии, что определения заданий верны.Изучите содержимое административных представлений ADMIN_TASK_LIST и ADMIN_TASK_STATUS и подтвердите с записями db2diag (diaglevel 4 может дать более подробную информацию, даже если вы должны использовать его только временно).

Призывы к SQL PL (или PL / SQL)хранимые процедуры являются синхронными относительно вызывающей стороны, что означает, что Db2-соединение блокируется до тех пор, пока хранимая процедура не вернется.Вы не можете «сделать сеанс доступным», если он ожидает завершения хранимой процедуры, но вы можете открыть новое соединение.

Существуют различные опции для хранимых процедур, написанных на C, C ++ или Java.или C ++ / CLR.У них больше свободы.Существуют и другие варианты решений для обмена сообщениями / на основе брокера.Это зависит от доступных навыков, наборов инструментов и опыта.Но в целом разумнее было бы просто.

...