|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
Прокомментируйте план выполнения запроса или ссылку где это можно узнать. Типа что делает оптимизатор, какой индекс использует, что значит 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.
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2004, 12:33 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2004, 09:17 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
помогите разобраться есть таблица и два запроса { 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 Александр ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2009, 14:36 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
2316 row(s) retrieved Estimated # of Rows Returned: 8639047 такая ошибка (на 4-е порядка) говорит о том что статистики распрелеления значений в поле rdel не собрана , правильное решение проблемы update statistics. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2009, 14:59 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
спасибо ! мои соплеменники еженочно делали по базе "update statistics <база>" без всяких параметров - и были в твёрдом уверовании что так и должно быть по умолчанию там вроде с low запускается про high мужики то не знали ! ужас! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2009, 09:04 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
aist-pskпо умолчанию там вроде с low запускается про high мужики то не знали ! "high" - нежная весчь. Щупать надо осторожно.:) aist-pskпо второму - чуствую , что вначале сортируется вся таблица - после чего делается выборка по индексу Да нет, во втором случае похоже, что таблица выбирается в отсортированном порядке по колонке r_key, после чего накладывается фильтр по r_del. Я подозреваю, что если выбирать данные по r_del, запихивать их во временный файл и там сортировать - будет медленнее и стоимость повысится.:) ЗЫ Попробуйте во втором случае директивой заставить оптимизатор использовать индекс по r_del и увидите что будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2009, 18:24 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
программист сказал - что указывать оптимизатору какой индекс использовать - моветон я простой админ , но я вижу что после update statisics high talbe (или база) - план тестового запроса - пришёл в норму = количество выбранного = ожидаемому количеству а почему high нежное ? чего опасного там ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2009, 22:29 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
поделитесь опытом кто-как делает плановый update statistics баз ?! Александр ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2009, 23:08 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
Valentyn P."high" - нежная весчь. Щупать надо осторожно.:) Это бывает очень редко, это исключение. Т.е. годами точим запросы под low потом переходим на "high", планы поехали. Тоже самое будет если сделать в обратном порядке, только вероятность что планы поедут не туда она в этом случае выше сильно выше. Valentyn P. Да нет, во втором случае похоже, что таблица выбирается в отсортированном порядке по колонке r_key, после чего накладывается фильтр по r_del. Я подозреваю, что если выбирать данные по r_del, запихивать их во временный файл и там сортировать - будет медленнее и стоимость повысится.:)Нам показали что отсортировать надо 2000 записей, диск не нужен, достаточно l2 кеша процессора. Но информикс думает (т.к. нет статистика) что отсортировать надо 8млн, а в таблице всего 25млн, поэтому такой план. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2009, 08:43 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
aist-pskпрограммист сказал - что указывать оптимизатору какой индекс использовать - моветон я простой админ , но я вижу что после update statisics high talbe (или база) - план тестового запроса - пришёл в норму = количество выбранного = ожидаемому количеству а почему high нежное ? чего опасного там ?Нет там ничего опасного. Мы заплатили за информикс, мы заплатили за оптимизатор, за статистику, давайте пользоваться тем за что уже заплачено. Зачем руками писать хинты, пусть компьютер выполняет рутинную работу. У меня в машине роботизированная коробка передач, можно ездить переключая вручную, можно на автомате. 99% автомат делает то что надо, в 1% случаев я понижаю или повышаю вручную, но этот 1% не повод ездить в ручном режиме 100% времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2009, 08:46 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
aist-pskпрограммист сказал - что указывать оптимизатору какой индекс использовать - моветон я простой админ , но я вижу что после update statisics high talbe (или база) - план тестового запроса - пришёл в норму = количество выбранного = ожидаемому количествуВ общем-то, программист прав. Если база качественно спроектирована. Потому что указание конкретных индексов это, по сути, хардкод. Что - моветон. aist-pskа почему high нежное ? чего опасного там ?"Многая мудрости влечет многая печали". Для оптимизатора это тоже верно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2009, 10:49 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
Журавлев ДенисЭто бывает очень редко, это исключение. Т.е. годами точим запросы под low потом переходим на "high", планы поехали. Тоже самое будет если сделать в обратном порядке, только вероятность что планы поедут не туда она в этом случае выше сильно выше. Серьезные опыты со статистикой "high" у нас только впереди, но уже сейчас интересно как на работу оптимизатора повлияет то, что у нас по каждой колонке таблицы будет статистика распределения данных. На первый взгляд, такая статистика, собранная по неиндексным полям - абсолютное зло, ибо серьезно увеличит объем данных, которые будут у оптимизатора под рукой, но никогда не приведут к реальному изменению плана. Ибо менять в плане нечего:) Valentyn P.Нам показали что отсортировать надо 2000 записей, диск не нужен, достаточно l2 кеша процессора. Да, вот это "2316 row(s) retrieved" я пропустил. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2009, 11:16 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
Valentyn P.На первый взгляд, такая статистика, собранная по неиндексным полям - абсолютное зло, ибо серьезно увеличит объем данных, которые будут у оптимизатора под рукой, но никогда не приведут к реальному изменению плана. Ибо менять в плане нечего:) Я не призываю делать high на всю базу. Индексированные поля, 5-10% строк на таблицах с млн. строк, иногда нужен гибкий график, на некоторые таблицы раз в неделю, а на другие 5 раз в день. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2009, 11:28 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
итого : раз в неделю(месяц) update statistics high в остальное время low Александр ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2009, 15:51 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
aist-pskитого : раз в неделю(месяц) update statistics high в остальное время low Александр Это откуда такой вывод ? Совершенно неправильный. А пользы в ежедневном low вообще не вижу... вы хоть в доку то загляните - там общие рекомендации даны, а уж скриптов, делающих нормальный сбор статистики (с минимумом работы и максимумом пользы) и в инете (тот же IIUG) и здесь на форуме было много. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2009, 16:00 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
aist-pskитого : раз в неделю(месяц) update statistics high в остальное время low Александрнеправильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2009, 16:20 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
я не знаю как правильно - и в ближайшем окружении так же плиз прошу дать одну ссылку на один из вариантов как правильно - дальше сообразим Александр ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2009, 16:44 |
|
Прокомментируйте план выполнения запроса
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2009, 14:15 |
|
|
start [/forum/topic.php?fid=44&msg=35825178&tid=1607887]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 173ms |
0 / 0 |