powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ограничить выборку по таймауту?
25 сообщений из 64, страница 2 из 3
Ограничить выборку по таймауту?
    #40023319
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что бы возвращались First Rows, то, насколько я понимаю, в плане не должно быть сортировки (можно попытаться избежать за счет прохода по индексу), в плане должен быть Nested Loops.

Что бы было максимально быстро, пытаться исключить доступ к таблицам. Как минимум, что бы доступа к t_log не было вообще (только Index Full Scan)

Ну и партиционирование, обработка запросов в несколько потоков.

IMHO & AFAIK

p.s. постановка задачи "ищем по like сами незнаем что, лишь бы что-то нашлось". Очень напомнило ТЗ на "секретную" систему мониторинга трафика ФСО. Когда трафик свален в таблицы, но никаких адекватных критериев поиска по ним не сформулировано. И (не знаю как называется должность) кто-то эти таблицы смотрит в PL/SQL Developer'е пытаясь "уязвимости" обнаружить )))
p.p.s. По нормальному, нужно в отдельную таблицу ключевые слова типа Навальный, Соболь и прочее выносить и триггером или job'ом сразу и проверять ))) ни оператор ни аналитик тут не нужен. Агенты ЦРУ и так всем известны.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023334
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev

p.s. постановка задачи "ищем по like сами незнаем что, лишь бы что-то нашлось".

имхо сдесь проще (обычная ситуация)
анализируем лог (одна широкая табличка) по некоторому параметру

основной отбор по индексу (допустим ранже) и чтоб не было сортировки (в плане нет сортировки)

для анализа достаточно около 200 "первых" по индексу записей
все ок когда индекс+фильтр набирают 200 записей скажем в "первом по индексу" миддионе строк (напр за 10сек)

но есть фильтры, которые отбирают 199 записей в первом млн, следуящая 200 очень далеко по индеску
и доберемся до нее за 20 мин

Egoр хочет как-то указать что 199 тож хватает, и после 10сек поиска отрабатываем как для rownum<=199 (stop key)

sample по времени

.....
stax
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023347
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

А 198-ми записей хватит, а 20-ти, а одной, а если ни одной записи не будет получено за отведенное время, но записи там где то есть, хотя было это давно и неправда?
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023353
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode
Stax,

А 198-ми записей хватит, а 20-ти, а одной, а если ни одной записи не будет получено за отведенное время, но записи там где то есть, хотя было это давно и неправда?

имхо
неважно сколько (200 для примера привел)

select * from (select /*+ index (t ii) */ from t sample интервал order by ii) r where rownum<200

не важно скоко вернет, мож и 0 строк, если за интервал не доберется ни до одной

.....
stax
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023362
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

Автору топика уже предлагали ограничить выборку разумным интервалом по дате появления записи в таблице и вообще разбить на разделы, а лишний мусор удалить или слить в архив и затем удалить, однако автор упорно ищет философский камень.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023364
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode
Stax,

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


уверен, он ето знает

ищет другие возможности, которых возможно еще нет

.....
stax
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023381
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
Egoр,

на правах попробовать шютку

rownum < f_time200(rownum,sysdate,200)

в ф-ции if time work < xxx then return 200 else return 1 /* rownum-1 */ end if

.....
stax


в случае FULL SCAN время выполнения может быть превышено в разы пока дойдет до первой подходящей строки.

SY.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023384
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

тогда вернет 0, и возможно надо увеличивать интервал работы

.....
stax
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023386
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Stax
Egoр,

на правах попробовать шютку

rownum < f_time200(rownum,sysdate,200)

в ф-ции if time work < xxx then return 200 else return 1 /* rownum-1 */ end if

.....
stax


А теперь помедитируй сколько раз выполнится f_time200(rownum,sysdate,200). Сравни с например:

rownum < f_time200(rownum,sysdate,nvl2(col1,200,200))

Ну и в случае FULL SCAN время выполнения может быть превышено в разы пока дойдет до первой подходящей строки.

SY.


Соломон, большая просьба не злоупотреблять модераторскими возможностями для ЛИЧНЫХ целей.
Если ступил, недочитал или т.п. то лучше признай, а не подтирай свои следы.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023388
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на
авторА теперь помедитируй сколько раз выполнится f_time200(rownum,sysdate,200). Сравни с например:

rownum < f_time200(rownum,sysdate,nvl2(col1,200,200))

был ответ 22239790

.....
stax
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023391
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic

Соломон, большая просьба не злоупотреблять модераторскими возможностями для ЛИЧНЫХ целей.
Если ступил, недочитал или т.п. то лучше признай, а не подтирай свои следы.


А что редактировать собственные сообщения может только модератор???

SY.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023394
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
которых возможно еще нет

А, возможно, есть.
- Для ad-hoc запросов при типовых в аналитике предикатах равенства (тождества) могут подойти bitmap-индексы.
- Для иных вариантов можно попробовать Orace Text или напрячься собственной реализацией доменного индекса для нечеткого поиска.
- Для прерывания по timeout можно, к примеру, швыряться no_data_needed из pipelined
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023397
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax, спасибо

В таком виде заработало
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with r0 as
(select * from t_log order by log_id desc),
r1 as
(select * from r0 where rownum < 1e7),
r as
(select * from r1 where note like :note
  order by log_id desc
  fetch first 200 rows only)
select * from r left join t_log_details using (log_id)
 order by log_id desc

Так, наверное, даже правильнее. Таймаут-таймауту рознь.
А тут явно сказано, хошь-как-хошь, а 1е7 записей просмотри.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023398
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
А что редактировать собственные сообщения может только модератор???
К модератору гораздо выше планка.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023499
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Egoр,

Интересный способ удалять гланды через одно место ...
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023763
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode,

У вас есть юзфулл предожения?
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023765
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотреть план запроса.

С учетом "не заканчивается до победного конца" и "в таком виде заработало" не удивлюсь, если в исходном запросе Hash Join образовался.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023829
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Egoр,

Выше было много предложений ...

Ограничивать период по идентификатору довольно странное решение, могу предложить разве что получать идентификатор соответствующий вашему
Код: plsql
1.
2.
3.
4.
with r0 as
(select * from t_log order by log_id desc),
r1 as
(select * from r0 where rownum < 1e7),


и затем использовать его в select * from r1 where log_id > :p_id and note like :note, в зависимости от прироста объемов хватит на неделю или месяц.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023830
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egoр
Аналитик я. Моя бизнес задача - проанализировать протокол в системе.
Я реально выдумываю условия поиска в зависимости от ситуации.

Т.е. никаких формальных правил нет?
Каждый раз новый поиск с новыми условиями по абсолютно любым полям протокола?
А они какого типа - тупо CLOB?

Если сортируется по log_id, то почему вместо выдирания всех протоколов с сортировкой в одном запросе не заменить на N запросов (по числу протоколов) с прямым отбором по log_id и уже доп.условиям? Это и быстрее выполняется, и ответы есть сразу, и можно остановиться на любом, не выполняя остальных.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023877
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode,

Предложений было много, но все сводились к измению поставки задачи.
Однако частое ее переформулирование привело к решению.

А ваш последний вариант по сути есть усложнение моего.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40023888
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася,

Ага. примерно так.
Есть протокол. Есть некое внешнее неформализуемое событие.
Нужно просмотреть последние записи протокола, которые могут иметь отношение к этому событию.
Сколько этих записей - не известно.
Начинаю с двухсот. Если не хватает, то увеличиваю, 500, 1000, 5000 ...
И иной раз случается, что запсиси для выбранного условия в таблице заканчиваются.

Ваше предложение, честно говоря, не понял.
"заменить на N запросов по числе протоколов"? пртокол-то один.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40024035
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egoр
Ваше предложение, честно говоря, не понял.
"заменить на N запросов по числе протоколов"? пртокол-то один.

Из постановки задачи я понял, что log_id не уникальный, т.е. несколько записей относятся к одному протоколу, идентифицируемому этим log_id, а самих протоколов много. Тогда и можно брать протокол с конкретно его записями, а не все протоколы с их записями сразу.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40024060
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Egoр
А ваш последний вариант по сути есть усложнение моего.

Чего чего? С этого момента поподробнее пожалуйста, в чем усложнение?
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40024174
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egoр
Леонид, вот запрос
Код: plsql
1.
2.
3.
4.
5.
6.
with r as
(select * from t_log where note like :note
  order by log_id desc
  fetch first 200 rows only)
select * from r left join t_log_details using (log_id)
 order by log_id desc


работает великолепно, когда в t_log по log_id desc достаточно достаточно записей, соответствующих note like :note.
Но если в t_log в по log_id desc есть только 199 записей like :note, а следующая только через сотню миллионов,
то БД честно сканирует все эти сто миллионов, хотя уже на первом десятке можно было бы и остановится,


если бы :note были вида 'SMTH%' то помогло бы создание индекса по note.
...
Рейтинг: 0 / 0
Ограничить выборку по таймауту?
    #40024200
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode
Egoр
А ваш последний вариант по сути есть усложнение моего.

Чего чего? С этого момента поподробнее пожалуйста, в чем усложнение?

Для log_id > :p_id нужен :p_id
Получить :p_id, соответствующий моему rownum < 1e7, можно через условие rownum < 1e7
Но зачем получать :p_id и подставлять его в log_id > :p_id, если уже rownum < 1e7
...
Рейтинг: 0 / 0
25 сообщений из 64, страница 2 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ограничить выборку по таймауту?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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