powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA 11: как победитъ оптимизатор
19 сообщений из 19, страница 1 из 1
ASA 11: как победитъ оптимизатор
    #37787373
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Картина примерно следующая: таблица наполнена на порядка 3 мио. строк. Запрос возвращает всего 16 значений и при этом используемый план включает полный паралелный скан таблицы.
По моему убеждению есть по крайней мере дще возможности улутшить план:
1) паралелный скан на индексе. (если размер записи в индексе < размера саписи в таблице)
2) параллелный упорядоченый поиск по индексу.

Вопрос: поведение оптимизатора можно обьяснить или победить?


create table t (a varchar(12) not null, b varchar(4) not null, c smallint not null,
d1 timestamp not null, d2 timestamp not null,
primary key (a,b,c,d1),
unique (a,b,c,d2)
);

select count(*) from t; --> 3M rows

select a,b,c, max(d2) from t group by a,b,c; --> 16 rows. Full parallel table scan. What about index?

...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37787500
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mikron,
Если такие запросы идут на постоянной основе, то не лучше ли сделать materialized view?
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37787526
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно нужен отдельный индекс по полю, по которому ограничивается выборка.
В данном случае - d2.
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37787579
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antandmikron,
Если такие запросы идут на постоянной основе, то не лучше ли сделать materialized view?
Накладные расходы будут слишком велики.
Таблица дополняется / обновляется 5~10 раз в секунду. А запрос выполнятся примерно 6 раз в час. Тогда уже выгодней субоптималный запрос.
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37787594
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglОбычно нужен отдельный индекс по полю, по которому ограничивается выборка.
В данном случае - d2.

Идею не понял.
Обясните пожалуста на пальцах, как можно использовать индекс по Д2 для оптимизации выполнения моего запроса?
База сечас не доступна, но проверю позже.
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37787640
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mikron,

materialized view можно обновлять и не немедленно.
А накладные расходы как оценивали?
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37787690
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronКартина примерно следующая: таблица наполнена на порядка 3 мио. строк. Запрос возвращает всего 16 значений и при этом используемый план включает полный паралелный скан таблицы.

Отключи параллелизм в сессии, погляди, что будет без него.
Вообще, странно, что он включен -- если это не DSS, то его лучше вообще выключить и включать только при надобности --
он жрёт много ресурсов, а толку от него чаще 0.

2) тебе надо приводить ТОЧНЫЕ запросы в том виде, в котором они не работают. А не примерный их вид.
Как и точное описание реальной таблицы.
И соответственно полные планы запросов, а не их пересказ.

3) Где в этих запросах :
select count(*) from t

select a,b,c, max(d2) from t group by a,b,c;

ты вообще предполагаешь использование индекса ?

select count(*) from t
может использовать индекс как структуру, в которой заранее известно число строк. Будут сканироваться листовые или предлистовые уровни индекса для подсчёта числа строк. Но не более.

select a,b,c, max(d2) from t group by a,b,c;

d1 timestamp not null, d2 timestamp not null, -- ты уверен, что это именно timestamp ? а не datetime ?
как бы max(d2) в таком случае бессмысленно.
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37787717
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antandmikron,

materialized view можно обновлять и не немедленно.
А накладные расходы как оценивали?

Допустим обновляем сразу после изменения.
Тогда нужно чтобы 10 * 60 * 5 * Т(рефреш) < Т(запрос).
Не верю.

Допустим обновляем перед запросом.
Тогда Т(рефреш) + Т(запрос на представлении) < Т(запрос)

Только не понятно, почему план обновления должен быть лутше плана запроса?
Смею предположить что Т(рефреш) > Т(запрос)


antandА накладные расходы как оценивали?

опыт * ПИ / возраст^0.5
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37787740
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivОтключи параллелизм в сессии, погляди, что будет без него.
Вообще, странно, что он включен -- если это не DSS, то его лучше вообще выключить и включать только при надобности --
он жрёт много ресурсов, а толку от него чаще 0.

Ага, проверю. оптимизатор левел ставил на максимум - 15.

MasterZivтебе надо приводить ТОЧНЫЕ запросы в том виде, в котором они не работают. А не примерный их вид.
Как и точное описание реальной таблицы.
И соответственно полные планы запросов, а не их пересказ.
ты уверен, что это именно timestamp ? а не datetime ?


Да, каюсь, не без греха :) Всё правда: и названия полей другие, и полей больше, и индексов. Но сути это не меняет.

--> select count(*) from t
Только что бы показать кол-во данных в таблице. Это не проблема.

--> select a,b,c, max(d2) from t group by a,b,c;
Вот здесь проблема.
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37788031
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron,
В твоих условиях всегда будет полное сканирование таблицы, я например, не вижу условий, по которым можно как-то задействовать индексы. Была давно похожая задача, так там я разбивал на 2-е фазы, одна запихивала данные с определенными сортировкой и ограничениями во временную таблицу, а вторая вынимала из нее нужные мне данные...
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37788205
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Orlovmikron,
В твоих условиях всегда будет полное сканирование таблицы, я например, не вижу условий, по которым можно как-то задействовать индексы.

Если убрать первые три поля из индекса и из групировки в запросе,
то тогда можно использовать индекс для нахождения максимума.
Почему нелзя задействовать индекс? Теоритичски это просто:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
var key_cursor = ordered_keyset_get_lower();
while(valid(key_cursor)) 
{
	key_cursor = ordered_keyset_binary_search_max(key_cursor[0], key_cursor[1], key_cursor[2]);
	yeld return key_cursor;
	move_forward(key_cursor);
}
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37788567
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron,
Так тогда запрос будет уже другой...
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37788990
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Orlovmikron,
Так тогда запрос будет уже другой...

Это всё понятно. я был уверен, неизвестно почему, что тот-же принцип поиска максимуа / минимума по индексу, может исползоватся оптимизатором и в данном случае.
И если я не ошибаюсь, то оракл знает/использует такую стратегию исполения запроса. Пусть меня поправять, если я не прав. Ищё одна мысль по птимизации - вынести значения первых трёх полей в отделниё таблицу и связать её с данными.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
-- that happens very rare
insert into tt
on existing skip
select distinct a,b,c
from t;

-- and the select can be rewritten
select t.a,t.b,t.c, max(t.d2)
from t, tt
where t.a = tt.a and t.b = tt.b and t.c = tt.c;

...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37789734
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronИ если я не ошибаюсь, то оракл знает/использует такую стратегию исполения запроса. Пусть меня поправять, если я не прав.

Попровляю: оракл (10g) тоже не может предложить ничего лутшего, чем полный скан таблицы.
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37789974
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заинтересовался темой, и посмотрел некоторые базы данных: постгрес, МС Сиквел 2008, оракл.
Вот что нащёл пока.
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37789975
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37804426
Марсель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Product Suggestion: Index Skip Key Processing
Расследование Вашего случая
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37805487
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марсель,спасибо за наводку.
Брек Картер гуру и спаситель!
...
Рейтинг: 0 / 0
ASA 11: как победитъ оптимизатор
    #37806304
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень позитивно, что авторитетные блогеры поддерживают.
А то начал подозревать, что я один камасутру практикую а большинство по мессионерски "select *" :)
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA 11: как победитъ оптимизатор
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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