|
|
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
Коллеги, привет. Столкнулись с такой проблемой. Oracle вертится на топовом железе и на флешовых дисках. Пытаемся забрать данные из него, но скорость забора очень низкая 2,5 млн(2,2 Гб в CSV) строк выгрузились за 13 минут. Сеть 100 Мбит/сек что примерно 3,2 Krows/sec или 3 Мб/сек При выгрузке через 10 Гб/сек сеть результаты лучше примерно раза в 2. Экспорт даже на хосте машины особо не дает выгрышаю При этом при выполнении count(*) ( таблица без индекса). Все это работает меньше секунды. То есть сама таблица читается с дисков в принципе норм(специально беру разные секции каждый раз, результат точно не из буферного кеша) Пробовал JDBC и Native Oracle-client, разницы особой нет. Подскажите, в чем может быть проблема и проблема ли это или это действительно нормально? Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 10:02:40 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
P.S. эксперимент проводили как под нагрузкой так и без нее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 10:03:57 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
Array size? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 10:19:29 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
Чем выгружаете? Java приложением? Fetch Size крутили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 10:20:29 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
ElicArray size? каждая секция таблицы - 2,5 млн(2,2 Гб в CSV) - в оракле примерно занимает 700 Мб (75 полей) авторЧем выгружаете? Java приложением? Fetch Size крутили? Пробовали и Java и утилита exp и oracle client, примерно все одинаково. Боюсь, что дело не в Fetch Size ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 10:43:46 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
hollister, а эскуэльплюс, стартованный на ос сервера со спулом в ос сервера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 10:53:05 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
Пробовали всеми возможными вариантами, и exp и sql*plus и jdbc и oracle client, больших различий нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 10:58:52 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
hollisterПробовали всеми возможными вариантами, и exp и sql*plus и jdbc и oracle client, больших различий нет это симптом, того, что так пробовали, что оптимизировать и не пытались ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 11:22:39 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
Так же проболвал забирать через ETL, который стати уже оптмизирует подключение для быстрой отдачи данных. Результат такой же. авторэто симптом, того, что так пробовали, что оптимизировать и не пытались А что можете посоветовать для оптмизации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 11:36:04 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
Так же добавлю, что мне нужно, что бы Oracle отдавал данные быстрее раз в 100 как минимум. Возможно ли такое в принципе или это вообще нормально для Оракла? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 11:37:58 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
Снимите трассу 10046 level 8 (см. faq форума) или, если закуплено - попробуйте awr. Задача - убедиться, что сервер по большей части простаивает, ожидая активности клиента (SQL*Net message from/to client). Если сервер не простаивает - то есть простор для оптимизации. Далее - ищите узкое место. Локальные диски и сетка - вполне себе кандидаты, 6Мб/с - по порядку похоже. Утилитки для мониторинга - по вкусу. Как уже отметил Elic (судя по Вашему ответу, Вы замечание не поняли) - надо попробовать увеличить array size/fetch size, это такой параметр, определяет количество строк, передаваемых клиенту за одно обращение. Радикально поднимает скорость передачи по сети, особенно если сервер отдален от клиента на несколько хопов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 12:46:17 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
Даже если клиент на сервере ARRAYSIZE радикально повышает быстродействие больших выборок Тут вопрос не столько в сетевых задержках, сколько в количестве вызовов FETCH и откуда они продолжаются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 13:16:50 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
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 получил вполне приемлемую сумму ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 15:03:29 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
ни запроса ни кода хоть одного из вариантов выгрузки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2016, 15:05:52 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
Спасибо за советы, установка параметра в JDBC драйвере FetchSize позволило достингнуть скорости 21 000 row/sec, то есть ускорение примерно в 7 раз. EXTRA_OPTION_ORACLE.defaultRowPrefetch = 90 000 Но это все равно мало для меня. В любом случае, спасибо за советы, буду оптимизировать дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 17:37:41 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
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-х раз давала увеличение скорости работы по сети. сферический хрусталь в вакуумени запроса ни кода хоть одного из вариантов выгрузки. + ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 18:30:10 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
Сеть на БД - 1 Гб/сек на клиенте 10 Гб/сек Для тестирования я использую ETL средство (на JAVA) при этом запись на диск не произвожу, просто отбрасываю полученные данные, то есть они точно в оперативке. Профилировать Java код смысла нет, ETL работает правильно и не виснет. Дело точно не в нем. Сравнивал скорость работы с Greenplum и Vertica, с них те же самые данные я забираю со скоростью 200 000 r/sec. Тем же самым клиентом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2016, 18:44:47 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
Ну, видимо и зависит от клиента. КАк тут , примерно. Есть у вас всякие блобы и т.п. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 10:20:44 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
кепу5Ну, видимо и зависит от клиента. КАк тут , примерно. Есть у вас всякие блобы и т.п. ? Нее... блобов там нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 11:17:03 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
По Вашим сообщениям, можно только гадать на кофейной гуще или смотря в запотевший (от алкоголя ))) ) хрустальный шар. ТоПробовали и 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 . Т.к. прежде чем что-то делать, хорошо бы понять, что именно у Вас происходит и что именно Вам нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 11:58:27 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
hollister, Какой средняя задержка по сети? Если большая, посмотри: 15056010 Источник - отличный документ, но я его нашел только в таком виде: "Net Services: Best Practices for Performance Scalability and High Availability" Похожий новый документ: Oracle Net Services 12c Best Practices for Database Performance and Scalability ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 12:04:46 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevПисал свою утилиту Oracle -> PostgreSQL на JDBC - загрузка сети (1 G Ethernet) по версии Windows была на уровне > 30%, но вся работа была в один поток. Загрузка процов на серверах Oracle, PostgreSQL так же под >50% (железо не знаю, виртуалки) Так загрузка в БД у нас достаточно быстрая, с этим проблем нет. авторЕсли увеличили fetch size на порядки, а рост скорости "в 7 раз" - это как-то странно. Видимо есть максимальный предел этого значения. разницы между 90 000 и 200 000 нет. авторКакой средняя задержка по сети? Если большая, посмотри: 15056010 Задержка 1 ms, поигрался с настройками - особо не помогло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 12:24:28 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 12:49:42 |
|
||
|
Oracle отдает данные медленно.
|
|||
|---|---|---|---|
|
#18+
Антивируса не стоит случаем типа MSE, столкнулись тут что поставили нового клиента Java с кучей xml, и все тормозииит, причем протрассировала, за час чтение с диска 20 секунд, выполнение запросов 2 минуты, остальное Net message from client, убрали из под проверки папку с приложением, яву, оракл. И все ушла проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2016, 13:23:20 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=209&tid=1887768]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 349ms |

| 0 / 0 |
