Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Informix [игнор отключен] [закрыт для гостей] / Обновление статистики / 25 сообщений из 30, страница 1 из 2
09.04.2008, 16:02
    #35245847
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
Народ я наверное что то не понимаю но почему при обновлении статистики (далее вывод explain) информикс сканирует таблицу каждый раз для каждого поля? Неужели раз он и так читает таблицу целиком, нельзя собрать распределения за один раз для всех указанных в UPDATE STATISTICS полей в один проход по таблице? Туплю наверное ....

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
UPDATE STATISTICS:
==================

Table:          baan.ttfgld410354
Mode:           HIGH
Number of Bins:       267         Bin size    257484 
Sort data          5800 . 7  MB     PDQ memory granted          128 . 0  MB
Estimated number of table scans  15 
PASS # 1  t_item
PASS # 2  t_cprj
PASS # 3  t_trtm
PASS # 4  t_orno
PASS # 5  t_docn
PASS # 6  t_trdt
PASS # 7  t_cwar
PASS # 8  t_ttyp
PASS # 9  t_ocom
PASS # 10         t_pono
PASS # 11         t_srno
PASS # 12         t_lino
PASS # 13         t_fcom
PASS # 14         t_fitr
PASS # 15         t_tror
Light scans enabled
...
Рейтинг: 0 / 0
09.04.2008, 16:49
    #35246053
Алексан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
AndronНарод я наверное что то не понимаю но почему при обновлении статистики (далее вывод explain) информикс сканирует таблицу каждый раз для каждого поля? Неужели раз он и так читает таблицу целиком, нельзя собрать распределения за один раз для всех указанных в UPDATE STATISTICS полей в один проход по таблице? Туплю наверное ....

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
UPDATE STATISTICS:
==================

Table:          baan.ttfgld410354
Mode:           HIGH
Number of Bins:       267         Bin size    257484 
Sort data          5800 . 7  MB     PDQ memory granted          128 . 0  MB
Estimated number of table scans  15 
PASS # 1  t_item
PASS # 2  t_cprj
PASS # 3  t_trtm
PASS # 4  t_orno
PASS # 5  t_docn
PASS # 6  t_trdt
PASS # 7  t_cwar
PASS # 8  t_ttyp
PASS # 9  t_ocom
PASS # 10         t_pono
PASS # 11         t_srno
PASS # 12         t_lino
PASS # 13         t_fcom
PASS # 14         t_fitr
PASS # 15         t_tror
Light scans enabled
Можно, но ему для этого не хватает памяти (сортировать надо 5,8 Гб, а памяти под сортировку выделено 128 Мб). Отправляясь от доступной памяти, он и строит план, состоящий из нескольких сканирований.
...
Рейтинг: 0 / 0
09.04.2008, 17:06
    #35246106
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
Точно, там же гигабайты. А вот например medium для той же таблицы информик делает за один проход по тем же полям:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
UPDATE STATISTICS:
==================

Table:          baan.ttfgld410354
Mode:           MEDIUM
Number of Bins:        54         Bin size        74 
Sort data             3 . 5  MB     Sort memory granted           3 . 7  MB
Estimated number of table scans  1 
PASS # 1  t_lino,t_cprj,t_item,t_cwar,t_srno,t_pono,t_orno,t_fcom,t_docn
        t_ttyp,t_trtm,t_trdt,t_fitr,t_tror,t_ocom

а насколько меньше памяти при этом надо! хотя распределения конечно менее точные.
...
Рейтинг: 0 / 0
09.04.2008, 17:06
    #35246110
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
AndronНарод я наверное что то не понимаю но почему при обновлении статистики (далее вывод explain) информикс сканирует таблицу каждый раз для каждого поля? Неужели раз он и так читает таблицу целиком, нельзя собрать распределения за один раз для всех указанных в UPDATE STATISTICS полей в один проход по таблице? Туплю наверное ....
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
UPDATE STATISTICS:
==================
Table:          baan.ttfgld410354
Mode:           HIGH
Number of Bins:       267         Bin size    257484 
Sort data          5800 . 7  MB     PDQ memory granted          128 . 0  MB
Estimated number of table scans  15 

А можно встречный вопрос ?
Ну и зачем вам High по ВСЕМ столбцам этой не маленькой таблички ?
Надеюсь, "рекомендации известных собаководов" из ИБМ вам известны на этот счет ?
А насчет вашего вопроса вроде бы понятно - сервер не может за раз отсортировать все требуемые объемы. Для этого не хватает ресурсов - ОП и временных dbspaces. Тем более, что вы их не указали.
...
Рейтинг: 0 / 0
09.04.2008, 17:13
    #35246144
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
Потому что high все же лучше чем medium, а также потому что вначале high работал быстро (пока таблицы были не очень большими). Теперь вот таблицы выросли и время обновления статистики тоже. А рекомендации собаководов из IBM мне конечно известны. Теперь будем переделывать как они рекомендуют (high для лидирующего поля индекса, medium для остальных индексированных полей).
...
Рейтинг: 0 / 0
09.04.2008, 17:15
    #35246154
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
Кстати еще можно и памяти для PDQ добавить.
...
Рейтинг: 0 / 0
09.04.2008, 17:24
    #35246189
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
AndronПотому что high все же лучше чем medium, а также потому что вначале high работал быстро (пока таблицы были не очень большими). Теперь вот таблицы выросли и время обновления статистики тоже. А рекомендации собаководов из IBM мне конечно известны. Теперь будем переделывать как они рекомендуют (high для лидирующего поля индекса, medium для остальных индексированных полей).
Хочу напомнить, что medium бывает разный :)
...
Рейтинг: 0 / 0
09.04.2008, 17:27
    #35246200
Алексан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
AndronПотому что high все же лучше чем medium, а также потому что вначале high работал быстро (пока таблицы были не очень большими). Теперь вот таблицы выросли и время обновления статистики тоже. А рекомендации собаководов из IBM мне конечно известны. Теперь будем переделывать как они рекомендуют (high для лидирующего поля индекса, medium для остальных индексированных полей).Техподдержка даже простой скрипт сваяла ... - это к вопросу о переделывать. А ещё у Арта Кагеля есть премилая утилита, которая имеет специальный ключ для проверки, нужно ли обновлять статистику на данной таблице, или нет. Это очевидное преимущество, поскольку обычно её обновляют периодически, не вдаваясь в детали, надо или не надо. Входит она, кажется,в util_2k и называется dostats.
...
Рейтинг: 0 / 0
09.04.2008, 17:28
    #35246209
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
Да я в курсе что там можно настраивать confidence и resolution если вы их имеете ввиду. Просто все таки базовый medium сильно от high отличается. Ну а возможность покрутить настройки и посмотреть что получиться это конечно неплохо.
...
Рейтинг: 0 / 0
09.04.2008, 17:41
    #35246266
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
АлексанА ещё у Арта Кагеля есть премилая утилита, которая имеет специальный ключ для проверки, нужно ли обновлять статистику на данной таблице, или нет. Это очевидное преимущество, поскольку обычно её обновляют периодически, не вдаваясь в детали, надо или не надо. Входит она, кажется,в util_2k и называется dostats.
Можно и без утилиты, обычным SQL-запросом (см. ниже) сформировать набор команд, а уже сформированный скрипт _update_stat_opt.sql затем выполнить любым доступным способом.
В моем случае проверяется изменение количества строк хотя бы на 10%, но эту цифру можно легко изменить.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
------------------------------------------------------------------
-- update_stat_need_only.sql
--
-- This is an SQL script to generate UPDATE STATISTICS commands 
-- by the difference between real number rows (systabinfo) and known one (systables) 
--      difference > 10% 
-- 
--      IDS 7.3+ 9.2+
--
--     %DBA%\bat\update_stat_opt.bat  db_name  update_stat_need_only
--
-- V.Shulzhenko  DBA_Tools  
------------------------------------------------------------------
--  Отобрать только таблицы, у которых кол-во строк изменилось на 10%
------------------------------------------------------------------
select   s.tabid                        table_id
        ,s.tabname[ 1 , 32 ]                table_name
        ,abs(sum(i.ti_nrows)-s.nrows)   difference
--        ,sum(i.ti_nrows)                real_rows
        ,s.nrows                        known_rows
from  sysmaster:systabinfo i,systables s
where i.ti_partnum = s.partnum
       and s.tabid >  99  and s.tabtype='T'
group by  1 , 2 , 4 
having abs(sum(i.ti_nrows)-s.nrows) > s.nrows* 0 . 1 
into temp _temp_dbatools with no log;
------------------------------------------------------------------
--select * from _temp_dbatools;
select count(*) updated_tables from _temp_dbatools;
------------------------------------------------------------------
--  MEDIUM для всех столбцов, кроме являющихся первыми в индексах
------------------------------------------------------------------
output to '_update_stat_opt.sql' without headings
SELECT UNIQUE 'UPDATE STATISTICS MEDIUM FOR TABLE ', TRIM(s.tabname)||';', '--'|| 2 
FROM systables s, _temp_dbatools t
WHERE t.table_id = s.tabid

------------------------------------------------------------------
--  HIGH для столбцов, являющихся первыми в индексах пользовательских таблиц
------------------------------------------------------------------
UNION
SELECT UNIQUE 'UPDATE STATISTICS HIGH FOR TABLE ', TRIM(s.tabname) || '(' ||
       TRIM(colname) || ');', '--'|| 4 
FROM systables s, syscolumns c, sysindexes i, _temp_dbatools t
WHERE s.tabid = c.tabid
AND i.tabid = s.tabid
AND i.part1 = c.colno
and t.table_id=s.tabid

order by  3 ;
------------------------------------------------------------------
...
Рейтинг: 0 / 0
09.04.2008, 17:45
    #35246280
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
AndronПросто все таки базовый medium сильно от high отличается.
Чем ? Результатами выполнения реальных запросов на реальных данных в пром БД ?
Честно говоря, давно уже с таким не встречался, хотя в последние годы и экспериментов таких не ставил.
...
Рейтинг: 0 / 0
09.04.2008, 21:04
    #35246672
bk0010
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
А вы всем выше приведенным боретесь за уменьшение времени выполнения update statistics или эти действия (использование не только HIGH) могут ускорить выполнение запросов к БД ?
...
Рейтинг: 0 / 0
10.04.2008, 08:44
    #35247010
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
to Vasilis: насколько я понимаю чем больше информации имеет в своем распоряжении оптимизатор, тем эффективнее будет план запроса. И режим high дает оптимизатору больше данных чем medium. Результат то выполнения запроса все равно будет один и тот же - все дело во времени выполнения :)
А кстати идея сбора статистики только по таблицам где превышен некий процент суммарных изменений данных у меня тоже была. По крайней мере можно реже собирать статистику в таблицах где изменений
происходит очень мало.

to bk0010: сейчас оптимизирую время сбора статистики и распределений. Буду проверять.
...
Рейтинг: 0 / 0
10.04.2008, 09:18
    #35247059
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
Andronto Vasilis: насколько я понимаю чем больше информации имеет в своем распоряжении оптимизатор, тем эффективнее будет план запроса. И режим high дает оптимизатору больше данных чем medium. Результат то выполнения запроса все равно будет один и тот же - все дело во времени выполнения :)В больших таблицах, можно собирать не по всем строкам, а например по 10%


AndronА кстати идея сбора статистики только по таблицам где превышен некий процент суммарных изменений данных у меня тоже была. По крайней мере можно реже собирать статистику в таблицах где изменений
происходит очень мало.Только как отследить кол-во изменений? Никак.
В таблице 100 строк, все сегодня проапдейчены, как это обнаружить?
Или утром было 100 строк, в обед их удалили, вечером вставили другие 100 строк, как это обнаружить?

Хорошо бы информикс позволял собирать статистику пофрагментно, чтобы каждый день не мусолить данные 1996-2007 года.
...
Рейтинг: 0 / 0
10.04.2008, 10:21
    #35247249
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
Журавлев ДенисТолько как отследить кол-во изменений? Никак.
В таблице 100 строк, все сегодня проапдейчены, как это обнаружить?
Или утром было 100 строк, в обед их удалили, вечером вставили другие 100 строк, как это обнаружить?


Хороший вопрос. А как насчет анализа PartitionProfiles? Если он включен то сразу видно были вообще изменения на таблице или нет (причем любые, хоть insert, update или delete). PPF решает этот вопрос "были ли изменения в таблице".
...
Рейтинг: 0 / 0
10.04.2008, 10:21
    #35247250
Алексан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
vasilis АлексанА ещё у Арта Кагеля есть премилая утилита, которая имеет специальный ключ для проверки, нужно ли обновлять статистику на данной таблице, или нет. Это очевидное преимущество, поскольку обычно её обновляют периодически, не вдаваясь в детали, надо или не надо. Входит она, кажется,в util_2k и называется dostats.
Можно и без утилиты, обычным SQL-запросом (см. ниже) сформировать набор команд, а уже сформированный скрипт _update_stat_opt.sql затем выполнить любым доступным способом. Можно. Некогда я собрался доработать аналогичный Вашему скрипт, собираясь добавить в него гибкости и управляемости (например, мне было нужно обновлять статистику не во всей базе данных, а лишь в некоторых таблицах, причём вызывать его нужно было из скриптов разработчиков приложений и от нужного им имени, а также хотелось большей диагностики - статистика для целой базы обновлялась долго, но причины ясны не были - неправильная настройка памяти? какая-то одна таблица?), и решил потратить несколько часов на знакомство с наследием (перспектива разбираться в чужой логике не радовала, но грела надежда, что я не первый, кто решает такие проблемы). Познакомившись, от разработки скрипта я отказался, потому что сие творение г-на Кагеля решило все мои проблемы (в примере, утилита умееет обновлять статистику на отдельной таблице и с правами доступа к выполняемому файлу оказалось легче с бинарной программой, чем со скриптом; также нашлись ключи, при которых программа сохраняла время выполнения каждого upd. stat.-запроса и порождала sqexplain-отчёт). Преодолев затруднения с его компиляцией, я был вознаграждён большей производительностью (подготовительная часть, генерирующая sql-скрипт, в моём исполнении работала почти полминуты, о чём я и не подозревал - всё же шеловские скрипты работают не так быстро, как скомпилированные программы!). Есть и дополнительные удобства, которые для меня полезны не были, но при некоторых условиях могут очень помочь - например, к утилите прилагается скрипт, позволяющий балансировать параллельное обновление статистики для нескольких баз и/или таблиц (представьте, что пара больших таблиц лежат на непересекающемся наборе дисков, и что по ночам сервер простаивает. Обновляя статистику для них параллельно, можно сильно уменьшить совокупное время).

Безусловно, всё это можно и самому написать, но можно воспользоваться готовым результатом.
...
Рейтинг: 0 / 0
10.04.2008, 10:37
    #35247311
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
Насчет анализа ppf есть все таки такой нюанс что если обновления данных не меняют самих значений (что само по себе странно но вполне возможно) т.е. например было в поле значение 'A' и его на 'A' изменили то конечно изменение зафиксируется, но значение то осталось прежним и распределение соответственно не должно измениться. А вот если кол-во записей не изменилось, а сами значения поменялись то тут конечно ppf поможет.
...
Рейтинг: 0 / 0
10.04.2008, 11:07
    #35247428
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
AndronНасчет анализа ppf есть все таки такой нюанс что если обновления данных не меняют самих значений (что само по себе странно но вполне возможно) т.е. например было в поле значение 'A' и его на 'A' изменили то конечно изменение зафиксируется, но значение то осталось прежним и распределение соответственно не должно измениться. Это мелочи, это можно не учитывать.

AndronА вот если кол-во записей не изменилось, а сами значения поменялись то тут конечно ppf поможет.
Да, точно, ppf может помочь, логику надо продумать, чтобы с партициями в больших таблицах процент изменений правильно считать, а то из-за веса старых данных можно не заметить что в свежих данных изменился нужный процент строк.
...
Рейтинг: 0 / 0
10.04.2008, 11:26
    #35247523
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
Журавлев ДенисТолько как отследить кол-во изменений? Никак.
В таблице 100 строк, все сегодня проапдейчены, как это обнаружить?
Или утром было 100 строк, в обед их удалили, вечером вставили другие 100 строк, как это обнаружить?
Вроде обещали в 11-ке... :

nkulikov 26 апр 07, 19:23 Re: Как получить Timestamp?
В 11 версии будет для каждой строки поддерживаться такой timestamp (дата модификации записи)


nkulikov 27 апр 07, 06:57Для нового уровня изволяции LAST COMMITED DB2/Informix будут поддерживать такой столбец сами автоматически. Более подробно я еще не разбирался.

Вопрос, что делать с просто удалёнными :)

Журавлев Денис
Хорошо бы информикс позволял собирать статистику пофрагментно, чтобы каждый день не мусолить данные 1996-2007 года.

+1 :)
И где мы были, когда народ фичи на 11-ку собирал :)
...
Рейтинг: 0 / 0
10.04.2008, 11:37
    #35247564
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
АнатоЛой

nkulikov 27 апр 07, 06:57Для нового уровня изволяции LAST COMMITED DB2/Informix будут поддерживать такой столбец сами автоматически. Более подробно я еще не разбирался.

Вопрос, что делать с просто удалёнными :)Нафиг нафиг, поднимать с диска каждую из 100млн строк, ради такой проверки, спасибо.

АнатоЛой
Хорошо бы информикс позволял собирать статистику пофрагментно, чтобы каждый день не мусолить данные 1996-2007 года.
+1 :)
И где мы были, когда народ фичи на 11-ку собирал :)Я кстати писал чтобы я хотел, и еще я думаю на наши просьбы им начхать, и это правильно, есть толстые дяди которые башляют, нужные им фичи и реализуют.
компания "Независимость-Вольво" объявляет этот год годом клиента
...
Рейтинг: 0 / 0
10.04.2008, 11:48
    #35247608
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
Денис, я тоже им писал и они все таки делают если от них не отставать: по моему запросу они таки сделали PAM в 64bit AIX, а также довели до ума работу PAM и CSM. Но мы платим им за техсаппорт конечно.
...
Рейтинг: 0 / 0
10.04.2008, 12:10
    #35247725
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
AndronДенис, я тоже им писал и они все таки делают если от них не отставать: по моему запросу они таки сделали PAM в 64bit AIX, а также довели до ума работу PAM и CSM. Но мы платим им за техсаппорт конечно.так то баг, и то индусы тебе вешали лапшу про odbc+pam+парольная-идентификация ссылаясь на документацию (т.е. баг документировали и сделали фичей).



--
А вазелин еще надо заслужить.
...
Рейтинг: 0 / 0
10.04.2008, 13:09
    #35248011
Алексан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
Журавлев ДенисЯ кстати писал чтобы я хотел, и еще я думаю на наши просьбы им начхать, и это правильно, есть толстые дяди которые башляют, нужные им фичи и реализуют. Не думаю, что пожелания заказчиков остаются без внимания, но есть разумные ограничения. Могу себе представить, что будет, если к очередному релизу будут реализованы все несколько сотен пожеланий заказчиков! Кроме того, в IBM ничего не бывает быстро.
...
Рейтинг: 0 / 0
10.04.2008, 14:23
    #35248377
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
Вернемся к теме обновления статистики. Когда получаем план, если не хотим чтобы запрос выполнялся делаем например set explain on avoid_execute. Так вот директива avoid_execute не работает для update statistics high, а для medium работает. Informix 10.00.UC7 и 11.10.UC2.
...
Рейтинг: 0 / 0
11.04.2008, 15:20
    #35250120
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление статистики
Andronto Vasilis: насколько я понимаю чем больше информации имеет в своем распоряжении оптимизатор, тем эффективнее будет план запроса. И режим high дает оптимизатору больше данных чем medium. Результат то выполнения запроса все равно будет один и тот же - все дело во времени выполнения :)
"Всякая палка о двух концах". Режим high не только требует значительно больше времени для сбора данных, но и создает бОльший объем данных, которые надо хранить в системном каталоге, а когда таких данных очень много, соответственно, растет время чтения этих данных из таблицы и обработки оптимизатором.
Поэтому, принцип один - если результат выполнения запроса (план оптимизатора) не меняется с уменьшением данных статистики, то лучше, естественно, использовать подходящий medium, а если результат ухудшается, то использовать тот режим сбора сбора статистики, при котором время запроса минимально.
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Обновление статистики / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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