Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Подскажите алгоритм для получения всех записей  [new]
Cat FishСatcher
Guest
Необходимо придумать алгоритм, который бы позволял получать все записи таблицы при выборке. Это нужно для замера времени получения всех данных.
Т.е. нужно реализовать аналог того, что выполняется в клиентcкой части приложения (т.е. фетчатся все выбраные записи).

Сам способ получения должен быть в виде SELECT или блока, т.к. он будет использован в предложении EXECUTE IMMEDIATE.

Самый лучший вариант - это использование курсора с последовательной переборкой записей. Но курсор использовать недопускается.

Может кто подскажет какой-нибудь хитрый SELECT?
4 май 06, 14:01    [2629595]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите алгоритм для получения всех записей  [new]
Vadim_Maximov
Member

Откуда: Москва
Сообщений: 3571
SQL> select object_name, 
     count(*) over() 
from dba_objects where owner = 'HILL' and rownum <10;

OBJECT_NAME                                                                                                                      COUNT(*)OVER()
-------------------------------------------------------------------------------------------------------------------------------- --------------
ALERTS                                                                                                                                        9
ALERTSAPI                                                                                                                                     9
ALERTSAPI                                                                                                                                     9
ALERTS_ADVITEMID_X                                                                                                                            9
ALERTS_EMPID_X                                                                                                                                9
ALERTS_PK                                                                                                                                     9
ALERTS_SENDEREMPID_X                                                                                                                          9
ALERTS_SEQ                                                                                                                                    9
ALERTS_TASKID_X                                                                                                                               9

9 rows selected.

SQL> 
4 май 06, 14:09    [2629635]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите алгоритм для получения всех записей  [new]
Vadim_Maximov
Member

Откуда: Москва
Сообщений: 3571
Хм...кажется я неправильно понял вопрос.
4 май 06, 14:10    [2629646]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите алгоритм для получения всех записей  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18343
Cat FishСatcher
Самый лучший вариант - это использование курсора с последовательной переборкой записей. Но курсор использовать недопускается.



Вы не поверите - но без курсоров oracle не работает. Вообще никак ;)
4 май 06, 14:18    [2629691]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите алгоритм для получения всех записей  [new]
Proteus
Member

Откуда:
Сообщений: 1348
А вопрос: А где вы хотите замерять время и какое... получение всей выборки на серваке или прибытие всех данных на клиента ?

ИМХО: если таблицы не большие можно конечно select bulk collect into попробовать. Но без курсора (явного, неявного, динамического) гарантированно перебрать все записи не получится.
4 май 06, 14:20    [2629708]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите алгоритм для получения всех записей  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18343
Короче, я бы делал так:
1. Задекларировал курсор.
2. Делал бы fetch bulk collect LIMIT <Client_array_size>
3. Между фетчами - имитировал бы SQL*Net message from client посредством dbms_lock.sleep(dbms_random.choose_func_yourself())
4 май 06, 14:23    [2629724]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите алгоритм для получения всех записей  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18343
andrey_anonymous
имитировал бы SQL*Net message from client

Понятно, что в трассе увидим на этом месте pl/sql lock timer. Но мы-то знаем, что это SQL*Net message from client ;)
4 май 06, 14:25    [2629742]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите алгоритм для получения всех записей  [new]
Proteus
Member

Откуда:
Сообщений: 1348
а зачем же мучатся со вставкой задержки ведь скрипт на томже sqlplus может выполнится без проблем и все задержки покажутся...
4 май 06, 14:31    [2629774]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите алгоритм для получения всех записей  [new]
он же
Member

Откуда:
Сообщений: 715
select .. bulk collect into ... from ...
А что тут еще можно придумать, судя по вопросу?
4 май 06, 14:33    [2629795]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите алгоритм для получения всех записей  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18343
Proteus
а зачем же мучатся со вставкой задержки ведь скрипт на томже sqlplus может выполнится без проблем и все задержки покажутся...

автор
Т.е. нужно реализовать аналог того, что выполняется в клиентcкой части приложения (т.е. фетчатся все выбраные записи).

Здесь наиболее существенными моментами будут:
1. araysize. Влияет в т.ч. на LIO (причем сильно).
2. время реакции клиента. Особенно важно в случае нагрузочных испытаний - конкуренция за ресурсы, знаете ли...
4 май 06, 14:34    [2629798]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите алгоритм для получения всех записей  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18343
он же
select .. bulk collect into ... from ...
А что тут еще можно придумать, судя по вопросу?

Не, так не пойдет - LIMIT не вставить...
4 май 06, 14:34    [2629805]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите алгоритм для получения всех записей  [new]
он же
Member

Откуда:
Сообщений: 715
andrey_anonymous

Не, так не пойдет - LIMIT не вставить...

Было бы интересно у автора узнать - сколько записей предполагается клиентским приложением извлекать.
Если это 2-3 порядка (100 - 1000 я имею в виду) - зачем этим заморачиваться?
4 май 06, 14:39    [2629834]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить