Соединение Sybase простаивает долгое время

Я читаю данные из таблицы в Sybase, используя шаг ввода таблицы. Запрос действительно прост:

SELECT person_ref, displayname FROM person

Эта таблица имеет около 2 миллионов строк. Я подключаюсь к Sybase ASE 12. У моего пользователя есть права только для чтения. PDI использует драйвер jconnect со следующими параметрами:

IMPLICIT_CURSOR_FETCH_SIZE=5000
SELECT_OPENS_CURSOR=True

Я также попытался использовать опцию noholdlock в этом запросе, чтобы изменить уровень изоляции.

Проблема в том, что запрос, кажется, простаивает долгое время, почти минуту. PDI указывает, что шаг находится в состоянии ожидания в течение этого времени, а затем изменяется на "Выполнение". Это затрудняет измерение времени, которое занимает процесс, потому что PDI не начнет измерять время, пока шаги не изменят состояние с простоя.

Кажется, я не могу найти ничего в руководствах или какой-либо опции, которая ускорит время чтения за счет уменьшения или исключения этого идеального времени. Есть ли какой-то вариант, который мне не хватает? Означает ли состояние ожидания, что PDI просто ожидает ответа от Sybase?

3 ответа

Решение

Я не знаю, так ли это, я бы назвал ответ, но я определенно нашел способ заставить соединение Sybase быстро реагировать. В любом месте есть инструмент запросов Sybase, который вы можете использовать для непосредственного запроса к БД. Что я сделал, так это изучил установку на отдельном компьютере с хорошим подключением.

На этой машине было определено соединение ODBC для Sybase DB, и для установки клиентского инструмента была установлена ​​собственная версия драйверов Sybase, а также некоторые файлы DLL. Я устанавливаю банки и библиотеки DLL и помещаю их в машину с установленным PDI. Я убедился, что они все в пути к классам, и создал общее соединение JDBC, которое указывало на системное соединение ODBC. Это происходит со скоростью, которую вы ожидаете сейчас.

Может быть, ваш запрос долго, чтобы получить данные.

Время задержки в архитектуре JDBC. Он отправляет запрос в базу данных, которая хранит данные в буфере. Только когда этот буфер заполнен, данные передаются обратно в PDI. Пока он не получит некоторые данные, Input table находится в режиме ожидания.

Если вы хотите измерить время, включая время простоя, установите шаг, который сработает без задержки, например, Generate row (Достаточно 1 ряда) шаг. Вам не нужно подключать этот шаг ни к чему, так как PDI запустит все шаги параллельно, как только это станет возможным.

Вы не увидите общий результат на Input table ряд Step Metrics нижняя вкладка. Но у вас будет результат на Metrics,

Вы также можете использовать Block this step until steps finish, У вас есть пример в каталоге с примерами, который поставляется вместе с вашим дистрибутивом. открыто youKettleInstallDir/sample/transformation/Block this step until steps finish.ktrи замените верхний ряд вашим потоком. Затем посмотрите статистику шага блокировки.

На мой взгляд, у вас есть еще один шаг в вашей трансформации, блокирующий таблицы человек. Существует огромная вероятность того, что у вас есть Output table Шаг пытается усечь таблицу человека.

Другие вопросы по тегам