powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Прокомментируйте план выполнения запроса
19 сообщений из 19, страница 1 из 1
Прокомментируйте план выполнения запроса
    #32777281
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прокомментируйте план выполнения запроса или ссылку где это можно узнать. Типа что делает оптимизатор, какой индекс использует, что значит INDEX PATH,Lower Index Filter, Filters: (informix_user.h.d_lot >= TODAY - interval( 1) year(9) to year AND informix_user.h.black_fl = 'T' ) .
Ну и рекомендации по оптимизации.
Спасибо
QUERY:
------
Код: plaintext
1.
2.
3.
SELECT SUM(LG.ddp * DL.num),SUM(Dl.num)  FROM   header H 
                                                                       INNER JOIN doc_lot DL ON  DL.id_server_c = H.id_server AND DL.id_child = H.id  
                                                                       INNER JOIN lot_good LG ON LG.id_server_lot = DL.id_server_lot AND LG.id_lot = DL.id_lot AND LG.id_good = DL.id_good 
     WHERE H.black_fl = 'T'  AND H.d_lot >=today -  1  UNITS year    AND LG.id_good =  11  AND  DL.rezerv_fl = 'F'

Estimated Cost: 142
Estimated # of Rows Returned: 1

1) informix_user.lg: INDEX PATH

(1) Index Keys: id_good (Serial, fragments: ALL)
Lower Index Filter: informix_user.lg.id_good = 11

2) informix_user.dl: INDEX PATH

Filters: ((informix_user.lg.id_good = informix_user.dl.id_good AND informix_user.dl.rezerv_fl = 'F' ) AND informix_user.dl.id_good = 11 )

(1) Index Keys: id_server_lot id_lot (Serial, fragments: ALL)
Lower Index Filter: (informix_user.lg.id_lot = informix_user.dl.id_lot AND informix_user.lg.id_server_lot = informix_user.dl.id_server_lot )
NESTED LOOP JOIN

3) informix_user.h: INDEX PATH

Filters: (informix_user.h.d_lot >= TODAY - interval( 1) year(9) to year AND informix_user.h.black_fl = 'T' )

(1) Index Keys: id_server id (Serial, fragments: ALL)
Lower Index Filter: (informix_user.dl.id_child = informix_user.h.id AND informix_user.dl.id_server_c = informix_user.h.id_server )
NESTED LOOP JOIN
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #32778773
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Query
Текст выполненного запроса. Также указывает, был ли установлен (например, оператором SET OPTIMIZATION) уровень оптимизации HIGH.

Если был установлен уровень оптимизации LOW, вывод SET EXPLAIN будет включать следующую первую строку (используются только заглавные буквы):
QUERY:{LOW}

Если был установлен уровень оптимизации HIGH, вывод SET EXPLAIN будет включать следующую первую строку (используются только заглавные буквы):
QUERY:

Directives followed
Списки директив, указанных для выполнения запроса.
Если в директиве была синтаксическая ошибка, эта директива игнорируется при обработке запроса. В этом случае вывод будет содержать такое указание: DIRECTIVES NOT FOLLOWED помимо DIRECTIVES FOLLOWED.

Estimated Cost
Оценка затрат (работ) на выполнение запроса.
При сравнении одного плана выполнения запроса с другим оптимизатор использует оценки затрат на выполнение запроса. Оценки затрат - это числовое значение, назначаемое оптимизатором выбранному методу доступа. Оценка затрат не преобразуется непосредственно во время выполнения запроса и не может использоваться для сравнения разных запросов. Однако эту оценку можно использовать для сравнения изменений, сделанных в одном и том же запросе.
Если запрос включает подзапрос, то указываются два описания оценки затрат; при этом описание оценки затрат запроса включает описание оценки затрат подзапроса. Оценка затрат подзапроса отображается таким образом, чтобы вы увидели, что эти затраты связаны с подзапросом.

Estimated # of Rows Returned
Оценка числа строк, которые должны быть выданы запросом.
Эта оценка основывается на описаниях, хранящихся в таблицах системного каталога. (если это число отличается от реального количества возвращаемых запросом строк в несколько раз, то по одному из участвовавших в запросе полей собрана неточная статистика)

Numbered List
Порядок, в котором производится обращение к таблицам согласно используемому методу доступа (по индексу или последовательное сканирование).
Если запрос использует наследуемость таблиц, то все подтаблицы супертаблицы перечисляются в том порядке, в котором производилось к ним обращение.

Index Keys
Столбцы, используемые как фильтры или индексы; указывается имя столбца, используемого в плане для чтения по индексу, или фильтр.
Обозначение (Key Only) указывает, что все нужные столбцы входят в состав ключа индекса; поэтому вместо чтения строк реальной таблицы можно было бы использовать чтение только ключей индекса (key-only read).
Обозначение (Lower Index Filter) указывает значение ключа, с которого начинается чтение по индексу. Если условие фильтра содержит несколько значений, то может быть выдано обозначение (Upper Index Filter); оно указывает значение ключа, на котором останавливается чтение по индексу.

Join Method
Если запрос содержит соединение двух таблиц, то в верхней части вывода для этого запроса указывается метод соединения этих таблиц, используемый оптимизатором - Nested Loop (метод вложенного цикла) или Dynamic Hash (динамическое хеширование).
Если запрос содержит динамическое соединение двух таблиц, а вывод также содержит обозначение (Build Outer), то это обозначает, что хэш-таблица создана для первой указанной таблицы (которая называется базовой таблицей).
Если обозначение (Build Outer) отсутствует, то это означает, что хэш-таблица создана для второй указанной таблицы.


-----------------------------------------------------------
Хочу есть. myinformix
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Прокомментируйте план выполнения запроса
    #35817613
Фотография aist-psk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
помогите разобраться

есть таблица и два запроса
{ TABLE "host".goods_r row size = 123 number of columns = 17 index size = 118 }
{ unload file name = goods00205.unl number of rows = 25917140 }

create table "host".goods_r
(
r_pos smallint not null ,
r_kod char(14) not null ,
r_amount decimal(12,3),
r_price decimal(12,3),
r_sum decimal(16,3),
r_d_xran date,
r_d_sert date,
rc_price decimal(12,3),
r_pamount decimal(12,3),
r_psum decimal(10,3),
r_gain decimal(12,3),
r_del smallint not null ,
r_key integer not null ,
r_n_sert char(10),
r_outkod char(14),
r_pckamount decimal(12,3),
r_gskey integer
);

Index_name Owner Type/Clstr Access_Method Columns
gr_pos host dupls/No btree r_pos
gr_kod host dupls/No btree r_kod
gr_del host dupls/No btree r_del
ix428_18 host dupls/No btree r_key

gr_key host unique/No btree r_key
r_pos

gr_kodkey host dupls/No btree r_kod
r_key

ind_gdr_ko001 host dupls/No btree r_kod
r_outkod

ind_gdrgs_005 host dupls/No btree r_gskey



echo 'select * from goods_r where r_del=-1' |dbaccess sm > aa.txt &
2316 row(s) retrieved
-bash-3.00$ cat sqexplain.out

QUERY:
------
select * from goods_r where r_del=-1

Estimated Cost: 862216
Estimated # of Rows Returned: 8639047

1) host.goods_r: INDEX PATH

(1) Index Keys: r_del (Serial, fragments: ALL)
Lower Index Filter: host.goods_r.r_del = -1




QUERY:
------
select * from goods_r where r_del=-1 order by r_key

Estimated Cost: 3517066
Estimated # of Rows Returned: 8639047

1) host.goods_r: INDEX PATH

Filters: host.goods_r.r_del = -1

(1) Index Keys: r_key (Serial, fragments: ALL)



первый делается секунды
второй долгие минуты
по второму - чуствую , что вначале сортируется вся таблица - после чего делается выборка по индексу
что сделать чтобы второй вначале делал выборку по индексу потом сортировал ?
приму любую критику (индексы делал не я)

информикс 10.fc8 + SunOS 5.10 Generic_137138-09 i86pc i386 i86pc


Александр
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35818157
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2316 row(s) retrieved
Estimated # of Rows Returned: 8639047

такая ошибка (на 4-е порядка) говорит о том что статистики распрелеления значений в поле rdel не собрана , правильное решение проблемы update statistics.
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35818776
Фотография aist-psk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо !
мои соплеменники еженочно делали по базе "update statistics <база>" без всяких параметров - и были в твёрдом уверовании что так и должно быть

по умолчанию там вроде с low запускается

про high мужики то не знали !

ужас!
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35820566
Valentyn P.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aist-pskпо умолчанию там вроде с low запускается

про high мужики то не знали !
"high" - нежная весчь. Щупать надо осторожно.:)

aist-pskпо второму - чуствую , что вначале сортируется вся таблица - после чего делается выборка по индексу
Да нет, во втором случае похоже, что таблица выбирается в отсортированном порядке по колонке r_key, после чего накладывается фильтр по r_del.
Я подозреваю, что если выбирать данные по r_del, запихивать их во временный файл и там сортировать - будет медленнее и стоимость повысится.:)

ЗЫ
Попробуйте во втором случае директивой заставить оптимизатор использовать индекс по r_del и увидите что будет.
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35820950
Фотография aist-psk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
программист сказал - что указывать оптимизатору какой индекс использовать - моветон
я простой админ , но я вижу что после update statisics high talbe (или база) - план тестового запроса - пришёл в норму = количество выбранного = ожидаемому количеству

а почему high нежное ?
чего опасного там ?
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35820997
Фотография aist-psk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поделитесь опытом кто-как делает плановый update statistics баз ?!


Александр
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35821207
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentyn P."high" - нежная весчь. Щупать надо осторожно.:)
Это бывает очень редко, это исключение.
Т.е. годами точим запросы под low потом переходим на "high", планы поехали. Тоже самое будет если сделать в обратном порядке, только вероятность что планы поедут не туда она в этом случае выше сильно выше.


Valentyn P.
Да нет, во втором случае похоже, что таблица выбирается в отсортированном порядке по колонке r_key, после чего накладывается фильтр по r_del.
Я подозреваю, что если выбирать данные по r_del, запихивать их во временный файл и там сортировать - будет медленнее и стоимость повысится.:)Нам показали что отсортировать надо 2000 записей, диск не нужен, достаточно l2 кеша процессора.
Но информикс думает (т.к. нет статистика) что отсортировать надо 8млн, а в таблице всего 25млн, поэтому такой план.
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35821212
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aist-pskпрограммист сказал - что указывать оптимизатору какой индекс использовать - моветон
я простой админ , но я вижу что после update statisics high talbe (или база) - план тестового запроса - пришёл в норму = количество выбранного = ожидаемому количеству

а почему high нежное ?
чего опасного там ?Нет там ничего опасного. Мы заплатили за информикс, мы заплатили за оптимизатор, за статистику, давайте пользоваться тем за что уже заплачено. Зачем руками писать хинты, пусть компьютер выполняет рутинную работу.

У меня в машине роботизированная коробка передач, можно ездить переключая вручную, можно на автомате. 99% автомат делает то что надо, в 1% случаев я понижаю или повышаю вручную, но этот 1% не повод ездить в ручном режиме 100% времени.
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35821498
Фотография Евгений Фадеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aist-pskпрограммист сказал - что указывать оптимизатору какой индекс использовать - моветон
я простой админ , но я вижу что после update statisics high talbe (или база) - план тестового запроса - пришёл в норму = количество выбранного = ожидаемому количествуВ общем-то, программист прав. Если база качественно спроектирована. Потому что указание конкретных индексов это, по сути, хардкод. Что - моветон.

aist-pskа почему high нежное ?
чего опасного там ?"Многая мудрости влечет многая печали". Для оптимизатора это тоже верно :)
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35821587
Valentyn P.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев ДенисЭто бывает очень редко, это исключение.
Т.е. годами точим запросы под low потом переходим на "high", планы поехали. Тоже самое будет если сделать в обратном порядке, только вероятность что планы поедут не туда она в этом случае выше сильно выше.
Серьезные опыты со статистикой "high" у нас только впереди, но уже сейчас интересно как на работу оптимизатора повлияет то, что у нас по каждой колонке таблицы будет статистика распределения данных.
На первый взгляд, такая статистика, собранная по неиндексным полям - абсолютное зло, ибо серьезно увеличит объем данных, которые будут у оптимизатора под рукой, но никогда не приведут к реальному изменению плана. Ибо менять в плане нечего:)

Valentyn P.Нам показали что отсортировать надо 2000 записей, диск не нужен, достаточно l2 кеша процессора.
Да, вот это "2316 row(s) retrieved" я пропустил.
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35821640
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentyn P.На первый взгляд, такая статистика, собранная по неиндексным полям - абсолютное зло, ибо серьезно увеличит объем данных, которые будут у оптимизатора под рукой, но никогда не приведут к реальному изменению плана. Ибо менять в плане нечего:)
Я не призываю делать high на всю базу. Индексированные поля, 5-10% строк на таблицах с млн. строк, иногда нужен гибкий график, на некоторые таблицы раз в неделю, а на другие 5 раз в день.
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35825085
Фотография aist-psk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
итого :

раз в неделю(месяц) update statistics high
в остальное время low

Александр
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35825119
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aist-pskитого :
раз в неделю(месяц) update statistics high
в остальное время low
Александр
Это откуда такой вывод ?
Совершенно неправильный.
А пользы в ежедневном low вообще не вижу...
вы хоть в доку то загляните - там общие рекомендации даны, а уж скриптов, делающих нормальный сбор статистики (с минимумом работы и максимумом пользы) и в инете (тот же IIUG) и здесь на форуме было много.
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35825178
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aist-pskитого :

раз в неделю(месяц) update statistics high
в остальное время low

Александрнеправильно.
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35825253
Фотография aist-psk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не знаю как правильно - и в ближайшем окружении так же

плиз прошу дать одну ссылку на один из вариантов как правильно - дальше сообразим

Александр
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35830985
Фотография aist-psk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Прокомментируйте план выполнения запроса
    #35831358
Фотография aist-psk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
make_updstats(731).sql из DBA_Tools хорошее руководство к действию

Александр
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Прокомментируйте план выполнения запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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