Нужен совет оракловых гуру

User avatar
Uzito
Уже с Приветом
Posts: 8239
Joined: 06 Feb 2002 10:01
Location: NJ, USA

Нужен совет оракловых гуру

Post by Uzito »

Налетел тут на проблему с оракловыми репортами. Есть примитивный запрос который выдает из базы 100тыщ записей, ~500 байтов на запись. SQL Navigator / SQL Developer вытаскивают эти данные за 10-15 секунд. Oracle Reports тужится и сливает те же данные в отчёт минут за 20-40. Посмотрел что происходит с помощью Wireshark - SQL Nav гонит данные по TCP/IP, 3 записи на пакет, минимум подтверждений. Reports высасывает записы по одной штуке по TNS протоколу, с подтверждением/запросом каждой очередной записи, примерно 40 записей в секунду. Что делать?
iDesperado
Уже с Приветом
Posts: 1349
Joined: 28 Nov 2008 17:50

Re: Нужен совет оракловых гуру

Post by iDesperado »

Uzito wrote: 31 Oct 2017 14:57 Налетел тут на проблему с оракловыми репортами. Есть примитивный запрос который выдает из базы 100тыщ записей, ~500 байтов на запись. SQL Navigator / SQL Developer вытаскивают эти данные за 10-15 секунд. Oracle Reports тужится и сливает те же данные в отчёт минут за 20-40. Посмотрел что происходит с помощью Wireshark - SQL Nav гонит данные по TCP/IP, 3 записи на пакет, минимум подтверждений. Reports высасывает записы по одной штуке по TNS протоколу, с подтверждением/запросом каждой очередной записи, примерно 40 записей в секунду. Что делать?
не туда смотришь. сначала смотри что делает сессия и что там за план у того SQL. причем смотри именно в сессии от reports, а не предполагаемый в окошке ide.
скорее всего кривой план из-за устаревшей статистики, а по нетворку отдает по мере того как выполняет
Palych
Уже с Приветом
Posts: 13682
Joined: 16 Jan 2001 10:01

Re: Нужен совет оракловых гуру

Post by Palych »

Репорты на java написаны?
Palych
Уже с Приветом
Posts: 13682
Joined: 16 Jan 2001 10:01

Re: Нужен совет оракловых гуру

Post by Palych »

Я не спец по ораклу, но из года в год применяю магический трюк с java/jdbc, который ускоряет работу select во много раз, в случае если база физически далеко от кода: statement.setFetchSize(1000);
Возможно это стратегически неправильно, но работает.
Может в Reports есть какая-нибудь настройка для этого?...
User avatar
Uzito
Уже с Приветом
Posts: 8239
Joined: 06 Feb 2002 10:01
Location: NJ, USA

Re: Нужен совет оракловых гуру

Post by Uzito »

iDesperado wrote: 31 Oct 2017 17:32 что делает сессия и что там за план у того SQL. причем смотри именно в сессии от reports, а не предполагаемый в окошке ide.
скорее всего кривой план из-за устаревшей статистики, а по нетворку отдает по мере того как выполняет
Я же сказал - запрос примитивнейший. Одна табличка, 100k записей, 3 колонки, full table scan.
В SQL Navigator выполняется за 10 секунд.
В Oracle Reports тянет по одной строчке 20 минут.
Palych wrote: 31 Oct 2017 18:23 Я не спец по ораклу, но из года в год применяю магический трюк с java/jdbc, который ускоряет работу select во много раз, в случае если база физически далеко от кода: statement.setFetchSize(1000);
Возможно это стратегически неправильно, но работает.
Может в Reports есть какая-нибудь настройка для этого?...
Не, идея правильная, нужно только найти где подкрутить.
Судя по всему проблема локальная - на продакшене отчет выполняется за 30 секунд, беру .rdf с продаекшена, запускаю локально на ту же базу - 20+ минут.
User avatar
Mark
Уже с Приветом
Posts: 1982
Joined: 10 Oct 2000 09:01
Location: New England

Re: Нужен совет оракловых гуру

Post by Mark »

Uzito wrote: 31 Oct 2017 18:35 Я же сказал - запрос примитивнейший. Одна табличка, 100k записей, 3 колонки, full table scan.
В SQL Navigator выполняется за 10 секунд.
В Oracle Reports тянет по одной строчке 20 минут.
...
Не, идея правильная, нужно только найти где подкрутить.
Судя по всему проблема локальная - на продакшене отчет выполняется за 30 секунд, беру .rdf с продаекшена, запускаю локально на ту же базу - 20+ минут.
1. А вы уверены что SQL Nav все 100K записей на клиента тащит сразу - а не по 500 как Toad?
2. Как уже писали выше - смотрите explain plan тем более что на прод тот же самый репорт быстро пробегает
3. Большой разницы между JDBC client и SQLNet client быть не должно
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Нужен совет оракловых гуру

Post by Сабина »

Palych wrote: 31 Oct 2017 18:23 Я не спец по ораклу, но из года в год применяю магический трюк с java/jdbc, который ускоряет работу select во много раз, в случае если база физически далеко от кода: statement.setFetchSize(1000);
Возможно это стратегически неправильно, но работает.
Может в Reports есть какая-нибудь настройка для этого?...
Было бы странно если это еще не настроено
https://docs.oracle.com/cd/A97335_02/ap ... rfmnce.htm
3.4.4.19 Adjust the ARRAYSIZE Parameter

The value of array processing has been noted earlier.

For Report Builder's ARRAYSIZE executable argument (e.g., ARRAYSIZE=10), enter as large a value as you can. Note that the array size is measured in kilobytes, not rows. ARRAYSIZE means that Report Builder can use that number of kilobytes of memory per query in executing your report. Report Builder uses Oracle's array processing, which fetches multiple records in batches, instead of one record at a time. As a result, you can control the amount of data to be fetched by the batch processes.
https://www.youtube.com/watch?v=wOwblaKmyVw
iDesperado
Уже с Приветом
Posts: 1349
Joined: 28 Nov 2008 17:50

Re: Нужен совет оракловых гуру

Post by iDesperado »

Uzito wrote: 31 Oct 2017 18:35 Я же сказал - запрос примитивнейший. Одна табличка, 100k записей, 3 колонки, full table scan.
все врут (с)
User avatar
Uzito
Уже с Приветом
Posts: 8239
Joined: 06 Feb 2002 10:01
Location: NJ, USA

Re: Нужен совет оракловых гуру

Post by Uzito »

Mark wrote: 31 Oct 2017 18:47 1. А вы уверены что SQL Nav все 100K записей на клиента тащит сразу - а не по 500 как Toad?
2. Как уже писали выше - смотрите explain plan тем более что на прод тот же самый репорт быстро пробегает
3. Большой разницы между JDBC client и SQLNet client быть не должно
1) В SQL Nav я "fetch all" сделал, естественно, чтобы он все записи высосал за один проход. По Wireshark логу вижу что тянет по данные по TCP/IP ~30 записей на каждый пакет.
2) чукча не читатель. см plan.png
3) однако репорты тянутся по одной записи. см wireshark.png
iDesperado
Уже с Приветом
Posts: 1349
Joined: 28 Nov 2008 17:50

Re: Нужен совет оракловых гуру

Post by iDesperado »

картинки то где ?
User avatar
Uzito
Уже с Приветом
Posts: 8239
Joined: 06 Feb 2002 10:01
Location: NJ, USA

Re: Нужен совет оракловых гуру

Post by Uzito »

Сабина wrote: 31 Oct 2017 18:58 3.4.4.19 Adjust the ARRAYSIZE Parameter
Оно самое. :fr:
Долго играл с параметрами командной строки пока не попробовал этот. Процесс перестал использовать TNS и переключился на TCP/IP.
Вместо 40 минут за генерацию отчета стало <3.
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: Нужен совет оракловых гуру

Post by Сабина »

Uzito wrote: 31 Oct 2017 19:44
Сабина wrote: 31 Oct 2017 18:58 3.4.4.19 Adjust the ARRAYSIZE Parameter
Оно самое. :fr:
Долго играл с параметрами командной строки пока не попробовал этот. Процесс перестал использовать TNS и переключился на TCP/IP.
Вместо 40 минут за генерацию отчета стало <3.
Ура ! Я Оракла 8 лет как в руки не брала, а все еще умею по-гурить оказывается :mrgreen:
https://www.youtube.com/watch?v=wOwblaKmyVw
mskmel
Уже с Приветом
Posts: 946
Joined: 24 Sep 2013 05:58
Location: US\GA

Re: Нужен совет оракловых гуру

Post by mskmel »

Uzito wrote: 31 Oct 2017 19:44Процесс перестал использовать TNS и переключился на TCP/IP.
Корректности ради...

* TNS (Transparent Network Substrate) protocol is used for client's interaction with Oracle's RDBMS. It can communicate using a number of other protocols such as TCP/IP, IPX/SPX, IPC, Named Pipes, etc.

* Transparent Network Substrate (TNS), a proprietary Oracle computer-networking technology, supports homogeneous peer-to-peer connectivity on top of other networking technologies such as TCP/IP, SDP and named pipes.
User avatar
Uzito
Уже с Приветом
Posts: 8239
Joined: 06 Feb 2002 10:01
Location: NJ, USA

Re: Нужен совет оракловых гуру

Post by Uzito »

mskmel wrote: 31 Oct 2017 20:06
Uzito wrote: 31 Oct 2017 19:44Процесс перестал использовать TNS и переключился на TCP/IP.
Корректности ради...
Я в курсе, просто это была наиболее очевидная разница между поведением репорта и другой утилиты.

Return to “Вопросы и новости IT”