Вопрос

Каждое утро у нас есть процесс, который отправляет многочисленные запросы (~ 10000) к DB2 на AS400 / iSeries / i6 (как бы IBM это ни называла в наши дни). За последние 2 месяца операторы жаловались, что наш запрос блокирует пару файлов, не позволяя им завершить свою ночную обработку.Запросы очень упрощены, например

Select [FieldName] from OpenQuery('<LinkedServerName>', 'Select [FieldName] from [LibraryName].[FieldName] where [SomeField]=[SomeParameter]')

Я не эксперт по части iSeries, и мне было интересно, есть ли у кого-нибудь представление об эскалации блокировок с точки зрения AS400 / Db2.Было подтверждено, что идентификатор, вызывающий блокировку, является идентификатором, под которым мы зарегистрировали наш связанный сервер, и мы знаем, что он, скорее всего, наш, потому что [Библиотека] и [Имя файла] соответствуют запросу, который мы выдаем.

Это начало происходить совсем недавно.Возможно ли, что наши операторы select, которые заставляют AS400 усиливать блокировки?Проблема в том, что они не высвобождаются без ручного вмешательства.

Это было полезно?

Решение

Попробуйте добавить "ТОЛЬКО ДЛЯ ЧТЕНИЯ" к запросу, тогда он не будет блокировать записи при их извлечении.

Другие советы

Запись в файлы на стороне AS / 400 из рабочей программы RPG / COBOL / JPL вызовет блокировку файла (я думаю, по умолчанию).Задание не сможет получить эту блокировку, когда вы будете читать.Решение , которое мы использовали , было следующим ...не читайте файлы во время выполнения заданий.Мы создали большой лист расписания в Excel и разместили на нем все задания sql servers и as / 400 в временных интервалах с цветовой кодировкой важности и сервера.Таким образом, никаких конфликтов или устаревших файлов для извлечения также не будет.

Возможно, у вас есть контроль обязательств, вызывающий блокировку для повторяемого чтения.Проверьте ODBC-соединение SQL Server, связанное с <linkedServerName> чтобы изменить элемент управления обязательствами.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top