Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Маштабируемость в Оracle  [new]
Sicf
Member

Откуда:
Сообщений: 34
Господа, помогите пож. разобраться в сути вещей.
Имеем некое .NET приложение которое коннектится к БД Oracle и читает данные, ну скажем, из обчного SQL запроса. Замечена интересная особенность: если программа делает несколько попыток чтения "одновременно" в потоках которые используют разные соединения (а как же иначе), то очень заметно взаимное влияние процессов. Грубо говоря, если один процесс справляеться с работой за 2сек, то два паралельных за 4сек, три соответственно 6сек.
Для работы с базой используеться обыкновенный, можно сказать родной, провайдер ODP.NET
На выполнение самого запроса (смотрю в TOAD) идут сотые доли секунд.
Вопрос, где маштабируемость Оракла? или я что-то делаю не так?
21 ноя 06, 13:16    [3429362]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Kosto
Member

Откуда: Киев
Сообщений: 84
можно посмотреть на текст запроса?
в TOAD запрос выбирается полностью или только первые Н-строк? тоже о Вашей программе: все или часть?
21 ноя 06, 13:21    [3429407]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7134
Однако утро
Скорее всего, проблема у Вас на клиентской машине. Происходит обработка классами .net полученных от oracle данных. Для проверки запустите несколько запросов с разных машин.

Sicf
Господа, помогите пож. разобраться в сути вещей.
Имеем некое .NET приложение которое коннектится к БД Oracle и читает данные, ну скажем, из обчного SQL запроса. Замечена интересная особенность: если программа делает несколько попыток чтения "одновременно" в потоках которые используют разные соединения (а как же иначе), то очень заметно взаимное влияние процессов. Грубо говоря, если один процесс справляеться с работой за 2сек, то два паралельных за 4сек, три соответственно 6сек.
Для работы с базой используеться обыкновенный, можно сказать родной, провайдер ODP.NET
На выполнение самого запроса (смотрю в TOAD) идут сотые доли секунд.
Вопрос, где маштабируемость Оракла? или я что-то делаю не так?


Скорее всего не так...Но как правильно работать с .net я не подскажу, не работал.
Знаю только, по опыту прошлой работы, что при использовании объектов .net по умолчанию, возникают катострофические проблемы с производительностью, доходящие до маразма.

Мы решили эти проблемы, просто отказавшись от использования .net для отчетов в пользу Oracle Reports, но это было связано с отсутствием грамотных програмистов .NET.
21 ноя 06, 13:34    [3429495]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Sicf
Member

Откуда:
Сообщений: 34
to Kosto:
>можно посмотреть на текст запроса?
на самом деле не суть запрос что то типа SELECT a.f1,...a.fn, b.f1,....b.fn from a left join b ....
но так при любом запросе происходит...
>в TOAD запрос выбирается полностью или только первые Н-строк? тоже о Вашей программе: все >или часть?
Я предпологаю, что время в TOAD - время до получения первого результата. Программа естественно вычитывает весь результат, но факт взаимного влияния все равно не понятен....
21 ноя 06, 14:09    [3429767]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Sicf
Member

Откуда:
Сообщений: 34
to Vadim Lejnin:
>Скорее всего, проблема у Вас на клиентской машине. Происходит обработка классами .net >полученных от oracle данных. Для проверки запустите несколько запросов с разных машин.
К сожалению у меня трехзвенка.... программа находиться на одном сервере с БД....
Можно ли как то доказать наличие маштабируемости имея только текст запроса?
21 ноя 06, 14:13    [3429794]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7134
Sicf
to Kosto:
...
Я предпологаю, что время в TOAD - время до получения первого результата. Программа естественно вычитывает весь результат, но факт взаимного влияния все равно не понятен....


А что тут не понятно:
- oracle давно закончил обработку всех N запросов и готов передать их результатты клиентам
- клиентская машина, как правило не многопроцессорная и обработка результатов проискодит последовательно. Соответственно линейная зависимость от количества запущенных програм. А если при этом еще и сам oracle находится на этой же машине ...

ЧТобы увидеть масштабирование:
- Запустите oracle на одной машине
- Запустите программы на 1-2-3-4 машинах и засеките время выполнения

Или запустите вот такой тест:
------ begin load.sql ------------
SQL> set time on
SQL> set timing on
SQL> set termout
SQL> select * from tab; -- здесь вставте ВАШ запрос
SQL> colu mysid NEW_VALUE mysid
SQL> spool &mysid.dat
SQL> select distinct sid mysid from v$mystat;
SQL> exit
------- end load.sql ------------

:::::::::: begin file loadall.cmd ::::::::::
for %%a in ( 1 2 3 4 5 ) do start /min sqlplus scott/tiger @load.sql
:::::::::: end file loadall.cmd ::::::::::

Количество запущенных одновремемнно скриптов меняется списком в скобках
21 ноя 06, 14:29    [3429903]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
YAP
Member

Откуда: Киев
Сообщений: 2116
сия трехзвенка не поддается что ли sql_trace-у?
21 ноя 06, 14:44    [3429994]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Sicf
Member

Откуда:
Сообщений: 34
sql_trace а это что? и как может помочь?
21 ноя 06, 14:52    [3430059]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
YAP
Member

Откуда: Киев
Сообщений: 2116
похоже это длинная история, особенно для трехзвенки
21 ноя 06, 15:09    [3430201]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3696
YAP
похоже это длинная история, особенно для трехзвенки

А где здесь трехзвенка?
21 ноя 06, 15:10    [3430210]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3696
Timm
YAP
похоже это длинная история, особенно для трехзвенки

А где здесь трехзвенка?

Сорри, не заметил.
21 ноя 06, 15:11    [3430217]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7134
Пардон не заметил ошибку, последовательность спутал
------ begin load.sql ------------
SQL> set time on
SQL> set timing on
SQL> set termout
SQL> colu mysid NEW_VALUE mysid
SQL> select distinct sid mysid from v$mystat;
SQL> spool &mysid.dat
SQL> select * from tab; -- здесь вставте ВАШ запрос
SQL> exit
------- end load.sql ------------
Этот скрипт запускает запрос и в конце выводит время выполнения
---------------------
Встретил как то раз Волк девочку Машу и умер...
...
soap: vlejnin mail ру
21 ноя 06, 15:15    [3430254]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Sicf
Member

Откуда:
Сообщений: 34
to Vadim Lejnin:
Спасибо большое! Очень отрезвляющая демонстрация.
21 ноя 06, 16:31    [3430927]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Sicf
Member

Откуда:
Сообщений: 34
to Vadim Lejnin:
Время выполнения 5ти скриптиков кратно увеличиваеться. Конечно я подзреваю что проблема с записью в файл но....
Или настройки Оракла?
21 ноя 06, 16:42    [3431044]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18367
Автор, у вас часом не MTS?
21 ноя 06, 16:56    [3431173]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Sicf
Member

Откуда:
Сообщений: 34
to andrey_anonymous:
извините в окракле новичек, что есть MTS?
21 ноя 06, 17:00    [3431215]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7134
Sicf
to Vadim Lejnin:
Время выполнения 5ти скриптиков кратно увеличиваеться. Конечно я подзреваю что проблема с записью в файл но....
Или настройки Оракла?

Скорее всего с записью на дисковой станции...
Если есть возможногсть запустите по 2 задачи с 2-3 машин
Чтобы минимизировать, Попробуйте написать агрегатный запрос например avg/sum/count

НО надо настраивать, особенно если запросы тяжелые
Соберите статистику по схеме, обычно помогает
SQL> exec dbms_stats.gather_schema_stats(ownname => 'ИМЯ СХЕМЫ', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, cascade=>TRUE);

А какой сервер? железо? Особенно диски
Посмотреть нагрузку OC в момент теста
запустить statspack
...
21 ноя 06, 17:05    [3431266]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
MacDuck
Member

Откуда: Москва-Подольск
Сообщений: 6387
andrey_anonymous
Автор, у вас часом не MTS?


А что если и MTS?
21 ноя 06, 17:19    [3431377]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18367
MacDuck
andrey_anonymous
Автор, у вас часом не MTS?

А что если и MTS?

Угадай :)
Судя по симптомам имеет место сериализация этих запросов.
Сериализация возможна:
- На сервере БД, если select for update
- На MTS, если все запросы пришли на один и тот же (или единственный в системе) серверный процесс.
- На пуле коннектов AS, если в пуле болтается всего один коннект :)
- На сети, если запросы возвращают толстые выборки и полностью загружают сеть
- На клиенте, если обработка возвращенных наборов неверно реализована или полностью съедает один из ресурсов (память, CPU, диск)
21 ноя 06, 18:01    [3431702]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Sicf
Member

Откуда:
Сообщений: 34
Vadim Lejnin

Скорее всего с записью на дисковой станции...
Если есть возможногсть запустите по 2 задачи с 2-3 машин
Чтобы минимизировать, Попробуйте написать агрегатный запрос например avg/sum/count
НО надо настраивать, особенно если запросы тяжелые
Соберите статистику по схеме, обычно помогает
SQL> exec dbms_stats.gather_schema_stats(ownname => 'ИМЯ СХЕМЫ', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, cascade=>TRUE);
А какой сервер? железо? Особенно диски
Посмотреть нагрузку OC в момент теста
запустить statspack
...

Ну чудеса....
По другому не назовеш.
Тест проводим на:
Клиент 1: AMD 3000+, 512Mb
Клиент 2: Celeron 2.7, 128Mb
Сервер: Intel Xeon 2.8, 1Gb Raid 3 (36Gb)
сеть 100Mb Ethernet дерево
Oracle 10G v 10.1.10
тест производиться на таблице с 4тыс записей, размер получаемых файлов ~4Mb
статистика собрана
Так вот время выполнение на клиенте 1 1го запроса - ~1c
Время выполения 5ти - ~6c
Время выполнения на клиенте 2 5ти запросов - ~22с
ВНИМАНИЕ!!!
Время выполнения на клиенте 2 при параллельном выполнении на клиенте 1 ~18с
Время выполнения на клиенте 1 при параллельном выполнении на клиенте 2 ~6c

Ну во-первых, где логика?
А во-вторых, как же так быть получаеться, что маштабированной трехзвенки построить нельзя? Если не изобретать самокаты типа трекера сессий в системе....
Мне нужно чтобы один клиент выполнял все 5 запросов ну хотябы за ~1.5c
21 ноя 06, 18:37    [3431957]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Sicf
Member

Откуда:
Сообщений: 34
Ксеон 2х процовый!
21 ноя 06, 18:38    [3431965]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Sicf
Member

Откуда:
Сообщений: 34
Пардон Raid 1 34Gb
21 ноя 06, 18:41    [3431976]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Sicf
Member

Откуда:
Сообщений: 34
Не знаю о чем говорит...
загрузка клиентов плавно доходит до 100 %
21 ноя 06, 18:56    [3432077]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
Sicf
Member

Откуда:
Сообщений: 34
Кстати судя по конфигам MTS не настроен....
или мож еще где надо глянуть?
или мож стоит настроить?
21 ноя 06, 19:13    [3432155]     Ответить | Цитировать Сообщить модератору
 Re: Маштабируемость в Оracle  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18367
Sicf
тест производиться на таблице с 4тыс записей, размер получаемых файлов ~4Mb
5запросов*4Мб=20Мб
Сетка Ethernet 100Мбит при отсутствии конфликтов (p2p) пропускает до 10 Мб/с RAW или около 8Мб/с с учетом оверхеда IP.
В условиях конфликтов пропускная способность ethernet часто оценивается как 30% от пиковой, или ~ 2.5-3Мб/с.
Таким образом, прокачать 20Мб можно за 6-8 сек.
Пока что все сходится :)
Далее:

Sicf

Так вот время выполнение на клиенте 1 1го запроса - ~1c
Время выполения 5ти - ~6c
Время выполнения на клиенте 2 5ти запросов - ~22с
Время выполнения на клиенте 2 при параллельном выполнении на клиенте 1 ~18с
Время выполнения на клиенте 1 при параллельном выполнении на клиенте 2 ~6c
То есть два физически различных клиента работают независимо друг от друга, попытка параллельного выполнения с одной машины сериализуется.
Это может как подтверждать версию ограничений сети (если сеть построена на свитчах а не на хабах), так и свидетельствовать о недостатках реализации клиентского приложения.
Sicf
Ну во-первых, где логика?

Логика на месте.
Просто Вы ищете простых рецептов там, где надо системно искать узкие места.
Примерные зоны поиска я уже называл, сам поиск производится средствами мониторинга производительности, включая (но не ограничиваясь) sql_trace level 8 и трассировкой клиента.
21 ноя 06, 19:39    [3432233]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить