Nifi executeSql с 30 потоками очень медленно - PullRequest
0 голосов
/ 05 марта 2019

Мы используем HDF для извлечения больших данных из оракула.У нас есть generateTableFetch для создания раздела из 8000 записей, которые создают запрос, как показано ниже:

Select * from ( Select a.*, ROWNUM rnum FROM (SELECT * FROM OPUSER.DEPENDENCY_TYPES WHERE (1=1))a WHERE ROWNUM <= 368000) WHERE rnum > 361000

Теперь этот запрос занимает почти 20-25 минут, чтобы вернуться из оракула. ​​

Что-то не так, чтомы делаем неправильно или любые изменения конфигурации, которые мы можем сделать.

Nifi использует соединение jdbc, поэтому есть ли какая-либо конфигурация на стороне оракула для этого.

Также, если мы каким-то образом добавим подсказку параллелизма в пример запроса / параллельный (с, 2) /.Поможет ли это?

1 Ответ

2 голосов
/ 05 марта 2019

Я предполагаю, что вы используете Oracle 11 (или меньше) и выбрали Oracle в качестве типа базы данных.Поскольку LIMIT / OFFSET не был представлен до Oracle 12, NiFi использует вложенный SELECT с подходом ROWNUM, чтобы каждая страница данных содержала уникальные значения.Если вы используете Oracle 12+, обязательно используйте вместо этого адаптер базы данных Oracle 12+, поскольку он может использовать возможности LIMIT / OFFSET, что ускоряет запрос.Также убедитесь, что у вас есть соответствующий индекс (ы) для помощи в выполнении запроса.

Начиная с NiFi 1.7.0, вы также можете рассмотреть возможность установки свойства Column for Value Partitioning.Если у вас есть столбец (возможно, ваш DEPENDENCY_TYPES столбец), который распределен достаточно равномерно и не слишком "редок" по отношению к значению вашего свойства Partition Size, GenerateTableFetch может использовать значения столбца, а не подход ROWNUM, что приводит кболее быстрые запросы.См. NIFI-5143 и документацию GenerateTableFetch для получения более подробной информации.

Если вам нужно добавить подсказки к сеансу JDBC, то начиная с NiFi 1.9.0 (см. NIFI-5780 для более подробной информации) вы можете добавить операторы до и после запроса в ExecuteSQL.

...