powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Подскажите с оптимизацией.....
25 сообщений из 57, страница 1 из 3
Подскажите с оптимизацией.....
    #34955267
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть 2 таблицы:
DBADMIN.DOCUMENT
(ID BIGINT NOT NULL DEFAULT 0,
SHOP_ID BIGINT NOT NULL,
PARTNER_ID BIGINT NOT NULL,
DOC_NUM BIGINT NOT NULL,
CLASS_NAME BIGINT NOT NULL,
DOC_TIME TIMESTAMP NOT NULL DEFAULT CURRENT TIMESTAMP,
ACPT SMALLINT NOT NULL DEFAULT 0,
SUM_UCH DECIMAL(20, 2) NOT NULL DEFAULT 0,
SUM_ZAK DECIMAL(20, 2) NOT NULL DEFAULT 0,
SUM_PROD DECIMAL(20, 2) NOT NULL DEFAULT 0,
SUM_FAKT DECIMAL(20, 2) NOT NULL DEFAULT 0
)

DBADMIN.STRINGS
(ID BIGINT NOT NULL DEFAULT 0,
SHOP_ID BIGINT NOT NULL,
PARTNER_ID BIGINT NOT NULL,
DOC_ID BIGINT NOT NULL,
TOVAR_ID BIGINT NOT NULL,
PARTIJA_ID BIGINT NOT NULL DEFAULT 0,
STRING_TIME TIMESTAMP NOT NULL DEFAULT CURRENT TIMESTAMP,
CLASS_NAME BIGINT NOT NULL,
ACPT SMALLINT NOT NULL DEFAULT 0,
PRICE_UCH DECIMAL(20, 2) NOT NULL DEFAULT 0,
PRICE_ZAK DECIMAL(20, 2) NOT NULL DEFAULT 0,
PRICE_PROD DECIMAL(20, 2) NOT NULL DEFAULT 0,
PRICE_FAKT DECIMAL(20, 2) NOT NULL DEFAULT 0,
TOVAR_MOV DECIMAL(20, 3) NOT NULL DEFAULT 0
)

В DBADMIN.DOCUMENT есть primary key ID.
В DBADMIN.STRINGS есть foreign key DBADMIN.STRINGS.DOC_ID = DBADMIN.DOCUMENT.ID

В таблице DBADMIN.DOCUMENT порядка 1,5 млн. записей, DBADMIN.STRINGS порядка 9 млн.записей.

Запускаю запрос вида:

select b.tovar_id, sum(b.tovar_mov) as kolich
from dbadmin.strings b, dbadmin.document c
where b.doc_id = c.id and c.class_name = 43
and b.acpt = 0 and c.shop_id = 5
group by b.tovar_id

Почему не хватаются индексы для DBADMIN.STRINGS. Explain показывает, что идет Table access full.
Подскажите чего переделать?
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34955492
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Какие есть индексы есть на STRINGS и DOCUMENT?
2. Собрана ли статистика на таблицы и индексы?
3.
(
select count(1)
from dbadmin.document c
where c.class_name = 43 and c.shop_id = 5
) = ?
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34955531
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. На dbadmin.document есть индекс ind15_doc (id, class_name, shop_id).
На dbadmin.strings есть индексы, которые используются для других запросов.... С полем doc_id есть индекс, который создался при создании foreign key

2. Реорганизация и сбор статистики произведен.
3. Запрос возвращает 5153 записи, данные целиком выбираются по индексу ind15_doc.
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34955569
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правда на индексе (doc_id) cardinality стоит 400000....
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34955602
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда изменяю класс оптимизации до 0 или 1, запрос работает на порядок быстрее По умолчанию стоит 5 класс.
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34955653
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TORT1. На dbadmin.document есть индекс ind15_doc (id, class_name, shop_id).
На dbadmin.strings есть индексы, которые используются для других запросов.... С полем doc_id есть индекс, который создался при создании foreign key

2. Реорганизация и сбор статистики произведен.
3. Запрос возвращает 5153 записи, данные целиком выбираются по индексу ind15_doc.Для такого запроса вам нужен индекс по (class_name, shop_id).
На первое место поставьте поле с наибольшей cardinality.

P.S.:
При создании foreign key индекс на дочернюю таблицу не создается автоматически.
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34955688
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создал индекс на dbadmin.document по (class_name, shop_id)... Собрал статистику... Эффект отрицательный....
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34955696
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас старый индекс удалю, перепроверю результат....
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34955727
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После удаления старого индекса стало немного легче.... Надо по-лучше потестировать...
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34955729
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TORTСоздал индекс на dbadmin.document по (class_name, shop_id)... Собрал статистику... Эффект отрицательный....Подозрительно все это...
Что выдает у вас
Код: plaintext
1.
2.
3.
select tabname, colnames, stats_time, indcard
from syscat.indexes
where tabschema='DB2ADMIN' and tabname in ('DOCUMENT', 'STRINGS')
order by  1 
?
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34955761
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня DB2 v.8.1.9... В syscat.indexes нет столбца indcard... Какой подсунуть?
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34955801
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TORTУ меня DB2 v.8.1.9... В syscat.indexes нет столбца indcard... Какой подсунуть?FULLKEYCARD
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34955866
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DOCUMENT +ID 2007-11-21 10:11:18.75 1610933
DOCUMENT +SHOP_ID 2007-11-21 10:11:18.75 34
DOCUMENT +PARTNER_ID 2007-11-21 10:11:18.75 1294
DOCUMENT +DOC_NUM 2007-11-21 10:11:18.75 292715
DOCUMENT +CLASS_NAME 2007-11-21 10:11:18.75 85
DOCUMENT +DOC_TIME 2007-11-21 10:11:18.75 1437707
DOCUMENT +ACPT 2007-11-21 10:11:18.75 2
DOCUMENT +ID+SHOP_ID+ACPT 2007-11-21 10:11:18.75 1610933
DOCUMENT +ID+DOC_TIME+SHOP_ID 2007-11-21 10:11:18.75 1610933
DOCUMENT +ID+SHOP_ID+DOC_TIME+ACPT 2007-11-21 13:16:25.937 1611757
DOCUMENT +ID+PARTNER_ID+ACPT+CLASS_NAME 2007-11-21 10:11:18.75 1610933
DOCUMENT +SHOP_ID+DOC_TIME+ID 2007-11-21 10:11:18.75 1610933
DOCUMENT +SHOP_ID+PARTNER_ID+CLASS_NAME 2007-11-21 10:11:18.75 26415
DOCUMENT +CLASS_NAME+SHOP_ID 2007-11-21 15:41:20.89 1046
STRINGS +ID 2007-11-21 00:24:27.281 6851709
STRINGS +DOC_ID 2007-11-21 00:24:27.281 412979
STRINGS +SHOP_ID 2007-11-21 00:24:27.281 33
STRINGS +TOVAR_ID 2007-11-21 00:24:27.281 51689
STRINGS +SHOP_ID+STRING_TIME 2007-11-21 00:24:27.281 284579
STRINGS +CLASS_NAME 2007-11-21 00:24:27.281 19
STRINGS +PARTIJA_ID 2007-11-21 00:24:27.281 3796526
STRINGS +DOC_ID+TOVAR_ID 2007-11-21 00:24:27.281 5171940
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34955970
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это вот очень странно:
STRINGS +DOC_ID 2007-11-21 00:24:27.281 412979
Пересоберите статистику на этот индекс.
runstats on table db2admin.strings for detailed index <index_name>
Что этот запрос после runstats выдает?
Какой план запроса теперь?
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34956043
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark, Вам кажется странным, что в strings идентификаторов документов меньше, чем в document? Это объясняется тем, что в document есть записи, которые not in (select doc_id from strings group by doc_id).....
На всякий случай пересобрал
STRINGS +DOC_ID 2007-11-21 16:58:24.250000 413346

Скорость запроса не зменилась...
Может тут логический косяк при проектировании? Надо было разносить по отдельным таблицам два типа document'ов?
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34956314
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может что в настройках параметров базы или движка? Кучи какой-нибудь недостаточно?
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34956524
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте 2 варианта:
Почитать тут или сделать mqt типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table m1 as (
select b.tovar_id, c.class_name, c.shop_id, sum(b.tovar_mov) as kolich, count(*) as cnt
from dbadmin.strings b, dbadmin.document c
where b.doc_id = c.id and b.acpt =  0 
group by b.tovar_id, c.class_name, c.shop_id
) data initially deferred refresh immediate;

refresh table m1;
create index m1_idx on m1 (c.class_name, c.shop_id);
runstats on table m1 and indexes all;
Только проверьте потом планы запросов операций изменения document и strings.
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34957313
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark, я правильно понимаю, что в ссылке указываются способы оказания влияния на выбор плана оптимизатором?
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34957344
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TORTMark, я правильно понимаю, что в ссылке указываются способы оказания влияния на выбор плана оптимизатором?Да.
Похоже, что сам оптимизатор выбирает неправильный план, основываясь на статистике.
Попробуйте сделать
Код: plaintext
alter table db2admin.strings volatile
и посмотрите, изменился ли план запроса.
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34957347
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это для 8 версии актуально?
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34957363
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TORTЭто для 8 версии актуально?В статье написано, что актуально для v8.1.9 и выше.
Сам не пробовал.
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34957391
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
volatile изменений в план запроса не дал... Индекс по-прежнему не подхватывает...
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34957452
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего-то не пойму.... Профайл создается для клиента или для сервера?
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34957465
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сервере.
...
Рейтинг: 0 / 0
Подскажите с оптимизацией.....
    #34957471
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hunterik, а путь указывать как? Или его в \bin\ положить?
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 1 из 3
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Подскажите с оптимизацией.....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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