|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
Есть база статистики (содержит около 500 000 записей за один день) и SUMMARY TABLE по этой таблицы для быстрого подведения итогов. Сум.таблица содержит в себе последних 40 дней. Вот таблицы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
И при выполнении запроса Код: plaintext
выполнение дооолгое, совсем не такое как если выполнить Код: plaintext
Refresh table выполняю после обновления таблицы всегда. Почему не выполняется запрос к суммари табле ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2004, 12:15 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
А статистика свежая??? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2004, 20:09 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
что значит свежая? Если имеется в виду - выполняетсяли refresh table после каждого обновления - ДА! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2004, 11:02 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
Свежая означает RUNSTATS когда последни раз запускали??? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2004, 17:43 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
А можно с этого места поподробнее. Дело в том, что в умных книжках (rebook) ничего нет про RUNSTATS+SumTab. В хелпе я действительно нашел упоминание про RUNSTATS + SumTab. Вот оно "Since summary tables behave like regular tables in many ways, the same considerations for optimizing data access using tablespace definitions, creating indexes, and issuing RUNSTATS apply to summary tables. " и все... Это не отвечает на вопросы: 1. Как часто надо запускать RUNSTATS (если учесть что в формуле выбора SumTab есть параметр DATE) 2. С какими параметрами В любом случае даже после выполнения RUNSTATS к таблице исходной и summary - начего не поменялось. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2004, 11:35 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
db2expln -d SAMPLE -stmtfile xz.sql -terminator @ -o xz.out где xz.sql файл с вашим запросом xz.out это то что ты должен сюда запостить. @ разделитель операторов. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2004, 13:03 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
К сожелению этот DB2 сервер этого проекта работает на версии 7.2 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2004, 13:53 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
Вот на восьмом сервере создал нечто похожее и запустил. Исходные данные такие: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
и SUMMARY TABLE Код: plaintext 1. 2. 3. 4. 5.
вот запрос (который по логике должен быть перенаправлен в trace_sum_last40 ) Код: plaintext 1. 2. 3.
вот ответ утилиты: Isolation Level = Cursor Stability Blocking = Block Unambiguous Cursors Query Optimization Class = 5 Partition Parallel = No Intra-Partition Parallel = No SQL Path = "SYSIBM", "SYSFUN", "SYSPROC", "DB2ADMIN" SQL Statement: select date, Sum(size) from trace where IsOnlySPAM<>'S' and date>'2004-01-11' group by date Section Code Page = 1251 Estimated Cost = 8448,232422 Estimated Cardinality = 23,000000 Access Table Name = DB2ADMIN.TRACE ID = 2,7 | #Columns = 2 | Relation Scan | | Prefetch: Eligible | Lock Intents | | Table: Intent Share | | Row : Next Key Share | Sargable Predicate(s) | | #Predicates = 2 | | Insert Into Sorted Temp Table ID = t1 | | | #Columns = 3 | | | #Sort Key Columns = 1 | | | | Key 1: DATE (Ascending) | | | Sortheap Allocation Parameters: | | | | #Rows = 23 | | | | Row Width = 21 | | | Piped | | | Buffered Partial Aggregation Sorted Temp Table Completion ID = t1 Access Temp Table ID = t1 | #Columns = 3 | Relation Scan | | Prefetch: Eligible Final Aggregation | Group By | Column Function(s) Return Data to Application | #Columns = 2 End of section ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2004, 19:13 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
1) Статистику по обеим таблицам собрана или нет??? 2) Статистику вам лучше собрать со всеми опциями 3) Статистику нужно обновлять регулярно. Насколько зависит от того как интенсивно меняется таблица ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2004, 12:31 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
автор 1) Статистику по обеим таблицам собрана или нет??? ДА. автор2) Статистику вам лучше собрать со всеми опциями Я запускаю runstats on table db2admin.Trace and indexes all runstats on table db2admin.Trace_sum_last40 and indexes all Какие еще параметры? Что влияет на сум.табл ? где почитать? автор3) Статистику нужно обновлять регулярно. Насколько зависит от того как интенсивно меняется таблица После каждого "refresh table db2admin.Trace_sum_last40" получается ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2004, 14:05 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
Что с уровнем оптимизации запроса??? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2004, 17:20 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
Попробуй заодно RUNSSTATS ON TABLE NULLID.STAT WITH DISTRIBUTION ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2004, 17:56 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
Уровень деволтовый - 5 "RUNSSTATS ON TABLE NULLID.STAT WITH DISTRIBUTION" не помогло попробовал создать SumTbl вообще без where (смотри верхний пример) Код: plaintext 1. 2. 3. 4. 5.
всеравно при вызове Код: plaintext
не используется. У уже не знаю что и думать. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2004, 10:34 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
Попробуй create summary table nullid.stat_summary as ( select date, Sum(Traffik) as Traffik, Count(*) as Connections, from nullid.stat group by date ) data initially deferred refresh deferred ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2004, 19:37 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
не помогло Код: plaintext
а Код: plaintext
это после всех Код: plaintext 1. 2.
какие еще идеи? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2004, 16:01 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
1) Сount включил в запрос??? 2) Попробуй заменить > на >= ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2004, 16:31 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
1. Нет 2. Нет :( ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2004, 17:51 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
в смысле 1. не помогло 2. не помогло ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2004, 17:52 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
побольше RTFM-а, например: 8.1, sql reference, create table: A REFRESH DEFERRED system-maintained materialized query table defined with ENABLE QUERY OPTIMIZATION can be used to optimize the processing of queries if CURRENT REFRESH AGE is set to ANY and CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION is set such that it includes system-maintained materialized query tables. A REFRESH DEFERRED user-maintained materialized query table defined with ENABLE QUERY OPTIMIZATION can be used to optimize the processing of queries if CURRENT REFRESH AGE is set to ANY and CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION is set such that it includes user-maintained materialized query tables. A REFRESH IMMEDIATE materialized query table defined with ENABLE QUERY OPTIMIZATION is always considered for optimization. For this optimization to be able to use a REFRESH DEFERRED or a REFRESH IMMEDIATE materialized query table, the fullselect must conform to certain rules in addition to those already described. The fullselect must: – be a subselect with a GROUP BY clause or a subselect with a single table reference – not include DISTINCT anywhere in the select list – not include any special registers – not include functions that are not deterministic. If the query specified when creating a materialized query table does not conform to these rules, a warning is returned (SQLSTATE 01633). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2004, 15:34 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
Да, Виктор Вы правы я действительно не сделал этого. После установки в ANY - все заработало. Только появилась МААААЛЕНЬКАЯ неприятность при работе с ними. В WHERE таблицы нельзя вводить параметр по которому группируешь (и в доке этого я не видел). Т.е. в моем примере нельзя создавать summary table на последние 40 дней (что весьма хотелосьбы, зачем кешировать все данные). Т.е. если создать таблицу : Код: plaintext 1. 2. 3. 4.
то эта СТ не будет подхватываться при запросе Код: plaintext
Даже если напрямую задать дату Код: plaintext 1. 2. 3. 4.
то все-равно не будет А если создавать вообще без даты Код: plaintext 1. 2. 3. 4.
то СТ срабатывает (естественно каждый раз я выполнял и refresh и runstats) Есть коментарии? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2004, 21:14 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
Искусственный интеллект еще не создан, а приемы, примененные Ibm-ерами, стало быть, не справились. Не понимаю, зачем Вам эта борьба за байты. Что 40 записей, что 4000 (размер за более чем 10 лет!) - пренебрежимо малые размеры по нынешним понятиям. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2004, 11:38 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
Кстати, напоминаю, что current date не является determenistic. Что касается константы, то странно, что оптимизатор с этим не справился. Возможно, дело в том, что 'yyyy-mm-dd' все-таки строка, а не дата, и в этом какие-то затруднения, а с численной колонкой было бы по-другому? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2004, 11:42 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
Насколько я помню даже, current date - это special register. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2004, 11:43 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
Насчет борьбы за байты - Вы не правы. В рабочем варианте группировка КОНЕЧНО не только по дате а по 10 полям. Исходная таблица в день содержит 1 000 000 (1 милион) записей а сумари тейбл за день примерно 30 000. Соответственно если хранить хотябы 1 год, то объемы не хилые. А если 10? Предлагаете дату задавть числом? Я подумаю... посмотрим. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2004, 13:57 |
|
Почему не используется SUMMARY TABLE ?
|
|||
---|---|---|---|
#18+
Я не знаю, поможет ли замена date на number - это просто смутная мысль, которую можно проверить. Вспомнил, что в 8.1 на VIEW с UNION ALL оптимизатор-таки опознает даты (здесь был пример в одном из старых топиков). Если надо непременно ограничение "за последние XXX дней", то без не-deterministic функции или special register не обойтись, а это значит, что к summary table можно будет обращаться только напрямую. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2004, 19:33 |
|
|
start [/forum/search_topic.php?author=Asten&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 692ms |
total: | 884ms |
0 / 0 |