Соединение 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
Шаг пытается усечь таблицу человека.