powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle отдает данные медленно.
34 сообщений из 34, показаны все 2 страниц
Oracle отдает данные медленно.
    #39280081
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, привет.
Столкнулись с такой проблемой.
Oracle вертится на топовом железе и на флешовых дисках.

Пытаемся забрать данные из него, но скорость забора очень низкая
2,5 млн(2,2 Гб в CSV) строк выгрузились за 13 минут. Сеть 100 Мбит/сек
что примерно 3,2 Krows/sec или 3 Мб/сек
При выгрузке через 10 Гб/сек сеть результаты лучше примерно раза в 2.
Экспорт даже на хосте машины особо не дает выгрышаю

При этом при выполнении count(*) ( таблица без индекса). Все это работает меньше секунды. То есть сама таблица читается с дисков в принципе норм(специально беру разные секции каждый раз, результат точно не из буферного кеша)
Пробовал JDBC и Native Oracle-client, разницы особой нет.


Подскажите, в чем может быть проблема и проблема ли это или это действительно нормально?
Заранее благодарен.
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39280084
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. эксперимент проводили как под нагрузкой так и без нее.
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39280098
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Array size?
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39280099
Zloxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чем выгружаете? Java приложением? Fetch Size крутили?
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39280118
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicArray size?
каждая секция таблицы - 2,5 млн(2,2 Гб в CSV) - в оракле примерно занимает 700 Мб (75 полей)

авторЧем выгружаете? Java приложением? Fetch Size крутили?
Пробовали и Java и утилита exp и oracle client, примерно все одинаково.
Боюсь, что дело не в Fetch Size
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39280128
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hollister,

а эскуэльплюс, стартованный на ос сервера со спулом в ос сервера?
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39280132
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовали всеми возможными вариантами, и exp и sql*plus и jdbc и oracle client, больших различий нет
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39280159
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hollisterПробовали всеми возможными вариантами, и exp и sql*plus и jdbc и oracle client, больших различий нет
это симптом, того, что так пробовали, что оптимизировать и не пытались
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39280170
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так же проболвал забирать через ETL, который стати уже оптмизирует подключение для быстрой отдачи данных.
Результат такой же.

авторэто симптом, того, что так пробовали, что оптимизировать и не пытались
А что можете посоветовать для оптмизации?
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39280174
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так же добавлю, что мне нужно, что бы Oracle отдавал данные быстрее раз в 100 как минимум.
Возможно ли такое в принципе или это вообще нормально для Оракла?
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39280262
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Снимите трассу 10046 level 8 (см. faq форума) или, если закуплено - попробуйте awr.
Задача - убедиться, что сервер по большей части простаивает, ожидая активности клиента (SQL*Net message from/to client).
Если сервер не простаивает - то есть простор для оптимизации.
Далее - ищите узкое место.
Локальные диски и сетка - вполне себе кандидаты, 6Мб/с - по порядку похоже.
Утилитки для мониторинга - по вкусу.
Как уже отметил Elic (судя по Вашему ответу, Вы замечание не поняли) - надо попробовать увеличить array size/fetch size, это такой параметр, определяет количество строк, передаваемых клиенту за одно обращение.
Радикально поднимает скорость передачи по сети, особенно если сервер отдален от клиента на несколько хопов.
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39280297
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже если клиент на сервере ARRAYSIZE радикально повышает быстродействие больших выборок
Тут вопрос не столько в сетевых задержках, сколько в количестве вызовов FETCH и откуда они продолжаются
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39280414
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousРадикально поднимает скорость передачи по сети, особенно если сервер отдален от клиента на несколько хопов.
Вячеслав ЛюбомудровДаже если клиент на сервере ARRAYSIZE радикально повышает быстродействие больших выборок
Тут вопрос не столько в сетевых задержках, сколько в количестве вызовов FETCH и откуда они продолжаются
+

разница в размере пакета и кол-ве roundtrp'ов. На Ethernet огромные latency, и при переходе от 10 Mbit -> 100 M -> 1 G -> 10 G latency почти не уменьшается, а вот througinput вполне растет

orawishhollisterПробовали всеми возможными вариантами, и exp и sql*plus и jdbc и oracle client, больших различий нет
это симптом, того, что так пробовали, что оптимизировать и не пытались
так же +

на данном форуме пару лет назад про fetch size ребятам-программистам говорил, говорил.... на форуме... в почте - ноль толка. Они уже от отчаяния мне денег предложили ))) Тоже самое по телефону объяснил их менеджеру по продажам. Он хоть и не технарь, но за 10-15 мин. все понял.... Не знаю какие меры им были приняты - но проблема с производительностью по его словам решилась ))), а я за слово из 12 букв setFetchSize получил вполне приемлемую сумму )))
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39280416
ни запроса ни кода хоть одного из вариантов выгрузки.
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39281440
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за советы, установка параметра в JDBC драйвере FetchSize позволило достингнуть скорости 21 000 row/sec, то есть ускорение примерно в 7 раз.
EXTRA_OPTION_ORACLE.defaultRowPrefetch = 90 000

Но это все равно мало для меня. В любом случае, спасибо за советы, буду оптимизировать дальше.
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39281473
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hollisterСпасибо за советы, установка параметра в JDBC драйвере FetchSize позволило достингнуть скорости 21 000 row/sec, то есть ускорение примерно в 7 раз.

Какая сетевая карта?

hollisterEXTRA_OPTION_ORACLE.defaultRowPrefetch = 90 000

Никогда Prefetch'ем в JDBC не пользовался, в свое время игрался, разницу по отношению к стандартному setFetchSize не увидел.

Т.ч. какой код у Вас используется для выгрузки - не очень понятно.

1. Профилировать Java код. Не факт, что тормозит на JDBC вызовах. Даже запись такого потока на локальный диск - уже не очень быстрая операция. По хорошему, забирать данные и отдавать/записывать на диск нужно в двух разных потоках.
2. Можно поиграться с настройками Net80, сетевой карты. Сколько-то десятков процентов выжать можно.
3. В случае многопроцессорной машины, можно попытаться прибить поток гвоздями к одному из ядер. Установка affinity для клиентского потока у меня до 2-х раз давала увеличение скорости работы по сети.

сферический хрусталь в вакуумени запроса ни кода хоть одного из вариантов выгрузки.
+
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39281487
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сеть на БД - 1 Гб/сек
на клиенте 10 Гб/сек
Для тестирования я использую ETL средство (на JAVA) при этом запись на диск не произвожу, просто отбрасываю полученные данные, то есть они точно в оперативке.

Профилировать Java код смысла нет, ETL работает правильно и не виснет. Дело точно не в нем.
Сравнивал скорость работы с Greenplum и Vertica, с них те же самые данные я забираю со скоростью 200 000 r/sec. Тем же самым клиентом.
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39281693
кепу5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, видимо и зависит от клиента. КАк тут , примерно. Есть у вас всякие блобы и т.п. ?
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39281725
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кепу5Ну, видимо и зависит от клиента. КАк тут , примерно. Есть у вас всякие блобы и т.п. ?

Нее... блобов там нет.
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39281767
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По Вашим сообщениям, можно только гадать на кофейной гуще или смотря в запотевший (от алкоголя ))) ) хрустальный шар.

ТоПробовали и Java и утилита exp и oracle client, примерно все одинаково.

то
есть ускорение примерно в 7 раз.


Писал свои утилиты загрузки данных в Oracle на OCI (железо было конца 90-х, сервер уровня Pentium Celeron 500, 100 M Ethernet) - добивался почти 90% загрузки CPU на сервере.

Писал свою утилиту Oracle -> PostgreSQL на JDBC - загрузка сети (1 G Ethernet) по версии Windows была на уровне > 30%, но вся работа была в один поток. Загрузка процов на серверах Oracle, PostgreSQL так же под >50% (железо не знаю, виртуалки)

IMHO & AFAIK теоретически, до достижения размера пакета примерно 32 Kb - рост скорости от увеличения fetch size должен быть практически линейным. Выше 32 K - можно наткнутся на проблемы конфигурирования OS (размер MTU и прочее и прочее)

Если увеличили fetch size на порядки, а рост скорости "в 7 раз" - это как-то странно.

Для Ethernet 100 Mb/s - наверное почти придел по скорости, для 1 G и тем более 10 G - без тюнинга OS даже близко к приделу по скорости для одного потока не подойти. IMHO & AFAIK.

Я бы все же:
1. Разбирался, что именно тормозит
2. Читать доки по настройке
3. Если проблема чисто "скачать данные" и табличка НЕ меняется и сервер супер-топовый - никто не мешает побить табличку на части и качать в несколько потоков. Теоретически, OS сама смултиплицирует поток данных в сети и в общем, общее увеличение throught input может получится. Это ЖУТКОЕ издевательство на железом
4. Перенести скачивание данных на сторону сервера. Loopback на locall host имеет на порядки меньший latency, чем сеть. Реализовать сервис выгрузки (наподобие expdb), на клиента передавать уже готовый результат (файл), можно даже его паковать. Если админы разрешат, никто не мешает даже реализовать данные "exp" как ф-цию БД (встроенный java, external function).
5. Никто не мешает объединить 3+4 в одном флаконе и выжимать 70-100% производительности сети, за счет надругательства над серверами.

IMHO & AFAIK Все советы из разряда https://heretics.wapper.ru/tavern/vredsov.htm . Т.к. прежде чем что-то делать, хорошо бы понять, что именно у Вас происходит и что именно Вам нужно.
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39281773
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hollister,

Какой средняя задержка по сети?
Если большая, посмотри: 15056010

Источник - отличный документ, но я его нашел только в таком виде:
"Net Services: Best Practices for Performance Scalability and High Availability"

Похожий новый документ:
Oracle Net Services 12c
Best Practices for Database Performance and Scalability
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39281800
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevПисал свою утилиту Oracle -> PostgreSQL на JDBC - загрузка сети (1 G Ethernet) по версии Windows была на уровне > 30%, но вся работа была в один поток. Загрузка процов на серверах Oracle, PostgreSQL так же под >50% (железо не знаю, виртуалки)

Так загрузка в БД у нас достаточно быстрая, с этим проблем нет.


авторЕсли увеличили fetch size на порядки, а рост скорости "в 7 раз" - это как-то странно.

Видимо есть максимальный предел этого значения. разницы между 90 000 и 200 000 нет.




авторКакой средняя задержка по сети?
Если большая, посмотри: 15056010
Задержка 1 ms, поигрался с настройками - особо не помогло.
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39281828
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hollisterТак загрузка в БД у нас достаточно быстрая, с этим проблем нет.

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

hollisterЕсли увеличили fetch size на порядки, а рост скорости "в 7 раз" - это как-то странно.

Видимо есть максимальный предел этого значения. разницы между 90 000 и 200 000 нет.

Это понятно, я так и сказал, "при размере пакета < 32 kb"

Если пакет становится > 32 Kb уже легко попасть на не эффективные настройки OS (MTU и прочее), Oracle (reсv_buf, send_buf и пр.), железа (Interrupt'ы и JumboFrames) и т.д.

AFAIK Но и при 32 Kb пакетах, Вы должны уже достаточно сильно сеть загружать. Т.ч. что именно у Вас "тормозит" по Вашему описанию совсем не понятно

Тормозить может:
1. Клиент забирающий данные - профилировать
2. Сеть и передача через TCP и JDBC
3. Собственно сервер

Даже 21 Mb/s (3*7) это приличный скорость, например, мой Windows на десктопном SSD при массовом копирование мелких файлов больше 7-8 Mb/s (диск/диск) не показывает ))) Т.ч. при таких потоках, не факт, что тормоз в сети.

Думаю, что 30-50 % загрузка сети это уже очень много (т.е. 1 G Ethernet = 50 Mb/s), т.е. выжать еще раза 2 ускорения можно, а дальше уже пинать железо ))) IMHO
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39281865
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Антивируса не стоит случаем типа MSE, столкнулись тут что поставили нового клиента Java с кучей xml, и все тормозииит, причем протрассировала, за час чтение с диска 20 секунд, выполнение запросов 2 минуты, остальное Net message from client, убрали из под проверки папку с приложением, яву, оракл. И все ушла проблема.
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39281942
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да вот смотрю на утилизацию сети - 1.5 % максимум до чего доходит график нагрзуки.
Похоже проблема в процессоре.
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39281972
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При этом при выполнении count(*) ( таблица без индекса). Все это работает меньше секунды
Primary Key имеется?
Насколько я знаю - сущность primary key в большинстве БД реализуется как unique index
ИМХО, посчитать так быстро 2.5 млн записей за t<1сек проблемно, хотя зависит от железа

exp утилиту пробовали локально на сервере или через сеть?
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39282124
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
landyПри этом при выполнении count(*) ( таблица без индекса). Все это работает меньше секунды
Primary Key имеется?
Насколько я знаю - сущность primary key в большинстве БД реализуется как unique index
ИМХО, посчитать так быстро 2.5 млн записей за t<1сек проблемно, хотя зависит от железа


Индексов точно никаких нет.
Ничего проблематичного, если все это вертится на флеш-массиве)))
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39282219
Dmitry Remizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hollister,

На эту тему помню была интересная презентация от Tanel Podder:
http://blog.tanelpoder.com/2011/01/11/performance-stories-from-exadata-migrations/
(с сожалению slideshare залочено на работе)

Насколько помню пришлось ,как уже советовали, загружать в параллель разбив на несколько сегментов.
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39282282
Dmitry Remizov,презентация действительно весьма интересная
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39282340
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Была бы проблема в процессоре count(*) так быстро не делался бы.

Трассируй выгрузку 12 уровнем по 10046 как тут правильно подсказали, делай ее tkprof, выкладывай последний блок где общий отчет, можно даже первую часть, Хоть будешь знать чего внутри делается.
Только правильно трассируй, запустил трассировку тут же запустил выгрузку, закончилась выгрузка тут же остановил трассировку.
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39282386
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё перекодировка строк из одной кодировки в другую (скажем, cp1251 -> utf8) очень сильно влияет, так что Java для этой задачи не очень хороша, людям приходится качать в несколько потоков одновременно, чтобы нагрузить сеть. Кстати, и sqlplus чем-то непонятным занимается, как будто строки перекодировать пытается, даже если не надо, и грузит процессор на 100%, а данные в час по чайной ложке. Так максимум надо искать в C + OCI, да ещё не забыть файловый буфер на запись выделить побольше. (Разумеется, анализ 10046 и чтение строк пачками обязательны).
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39282497
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гадание на кофейной гуще.

Если проблема в процессоре, то где? На сервере или на клиенте? Какая загрузка.

Отпрофилировать Java приложение, посмотреть на чем стоит. Делов на один день максимум.
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39282590
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevГадание на кофейной гуще.

Если проблема в процессоре, то где? На сервере или на клиенте? Какая загрузка.

Отпрофилировать Java приложение, посмотреть на чем стоит. Делов на один день максимум.

На клиенте, есть понимание как можно оптмизировать как раз.
...
Рейтинг: 0 / 0
Oracle отдает данные медленно.
    #39282603
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в целом я добился хорошей скорости засчет параллелизма на Java (достиг ускорения в раз 10 быстрее исходных).
Но проблема немного глубже, объяснять долго слишком.
В общем есть SAS, данные котором мы хотели перести на Oracle, а SAS оставить как "гляделку" на данные БД.
Но проблема в том, что SAS быстро умеет локально читать своим файлики данных, а если делать такую "гляделку" то получается полный шлак. В общем настроить там параллеьный забор данных нереально.
SAS конечно умеет опускать запросы на уровень БД, но не всегда это возможно.
В общем будем решать такую проблему немного по другому.
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle отдает данные медленно.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]