powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Опять про игнорирование индексов
25 сообщений из 31, страница 1 из 2
Опять про игнорирование индексов
    #35234466
uchuDB2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Разбираюсь с DB2 и простая вещь меня ставит в тупик :-(
Есть две таблички мастер-деталь (хранилище чеков):

Код: 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.
CREATE TABLE WAREHOUSE.CHEQUEHEAD (
  SHOPID INTEGER NOT NULL,
  ID INTEGER NOT NULL,
  DATEOPERATION TIMESTAMP NOT NULL,
  CK_NUMBER INTEGER NOT NULL,
  SUMMA DECIMAL( 13 ,  4 ) DEFAULT  0 ,
  DISC_SUMM DECIMAL( 13 ,  4 ) DEFAULT  0 ,
  CASSIR VARCHAR( 50 ),
  CARDNUMBER VARCHAR( 20 )
)
--был просто индекс по DateOperation, но
--советчик "насоветовал" сделать такой:
CREATE INDEX WAREHOUSE.IDX_CHEQUEHEAD ON WAREHOUSE.CHEQUEHEAD
  (DATEOPERATION, ID, SHOPID) ALLOW REVERSE SCANS; 
--Типа ПК
CREATE UNIQUE INDEX WAREHOUSE.PK_CHEQUEHEAD
  ON WAREHOUSE.CHEQUEHEAD (ID , SHOPID ) ALLOW REVERSE SCANS;

CREATE TABLE WAREHOUSE.CHEQUEPOS (
  SHOPID INTEGER NOT NULL,
  ID INTEGER NOT NULL,
  CHEQUEID INTEGER NOT NULL,
  CH_POS INTEGER DEFAULT  0 ,
  QUANT DECIMAL( 10 ,  3 ) DEFAULT  0 ,
  PRICE DECIMAL( 13 ,  4 ) DEFAULT  0 ,
  CODE INTEGER NOT NULL,
  SUMMA DECIMAL( 13 ,  4 ) DEFAULT  0 ,
  DISC_SUMM DECIMAL( 13 ,  4 ) DEFAULT  0 
)

--Внешний ключ
ALTER TABLE WAREHOUSE.CHEQUEPOS ADD CONSTRAINT FK_CHEQUEPOS
FOREIGN KEY (CHEQUEID, SHOPID) REFERENCES WAREHOUSE.CHEQUEHEAD(ID, SHOPID)
ON DELETE CASCADE ON UPDATE NO ACTION
--индекс для FK
CREATE INDEX WAREHOUSE.IDX_CHEQUEPOS ON WAREHOUSE.CHEQUEPOS
(CHEQUEID, SHOPID) ALLOW REVERSE SCANS;
--Типа ПК
CREATE UNIQUE INDEX WAREHOUSE.PK_CHEQUEPOS
ON WAREHOUSE.CHEQUEPOS (ID , SHOPID ) ALLOW REVERSE SCANS;
Количество записей:
ChequeHead ~11млн
ChtquePos ~60млн
Статистика полностью собрана
Имею простейший запрос:
Код: plaintext
1.
2.
3.
select sum(p.summa) as summa
from warehouse.chequehead h
join warehouse.chequepos p on h.shopid = p.shopid and h.id = p.chequeid
where h.dateoperation between '2008-03-24-00.00.00.00' and '2008-03-31-00.00.00.00'
Если период задавать сутки или меньше - все классно и задействуются все индексы (по DateOperation для ChequeHead и по FK для ChequePos) - запрос отрабатывает мгновенно.
Стоит увеличить период и все, по ChequePos идет TBSCAN и все виснет намертво :-(((
db2advis выдает какую-ту хрень и обещает увеличение производительности на 3.2%, что меня ни как не устроит.
Хочу отметить, что с DB2 только разбираюсь. Плотно же работаю с Firebird и MSSQL, но обе эти СУБД позволяют "указать" оптимизатору подхватить индекс.
Что же мне сделать в DB2???
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35234538
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На вскидку:
Я бы поменял порядок колонок в индексах
Код: plaintext
1.
2.
3.
4.
5.
CREATE INDEX WAREHOUSE.IDX_CHEQUEHEAD ON WAREHOUSE.CHEQUEHEAD
  (DATEOPERATION, SHOPID, ID) ALLOW REVERSE SCANS; 
...
CREATE INDEX WAREHOUSE.IDX_CHEQUEPOS ON WAREHOUSE.CHEQUEPOS
(SHOPID, CHEQUEID) ALLOW REVERSE SCANS;

А запрос переписал бы с помощью WITH.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 WITH 
     CHK AS (SELECT .... FROM WAREHOUSE.CHEQUEHEAD WHERE 
           dateoperation between '2008-03-24-00.00.00.00' 
            and '2008-03-31-00.00.00.00' 
            SELECTIVITY  0 . 0001 
     ),
    POS AS (SELECT ... FROM CHK, WAREHOUSE.CHEQUEPOS P WHERE ...)
 )
SELECT SUM(SUMMA) FROM POS

Причем до кучи указал бы селективность.
Поищите SELECTIVITY тут на форуме.

И еще, когда вы указываете явно параметры запроса - это одно.
А когда вы будите связывать их в будущем через переменные - это другое.
Имейте ввиду что можете получить разные вещи.
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35235268
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
uchuDB2Хочу отметить, что с DB2 только разбираюсь. Плотно же работаю с Firebird и MSSQL, но обе эти СУБД позволяют "указать" оптимизатору подхватить индекс.
Что же мне сделать в DB2???Какая у вас версия db2 и фикспак?
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35235418
uchuDB2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinКакая у вас версия db2 и фикспак?[/quot]
Добрый день.
У меня установлен DB2 Express-C 9.1.2
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35235628
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
uchuDB2У меня установлен DB2 Express-C 9.1.2К сожалению не уверен, что на express-c будет работать, но вы можете попробовать использовать optimization profiles .
Это те же указания оптимизатору.
Вкратце:
1.
Создаете таблицу SYSTOOLS.OPT_PROFILE:
db2 "call sysinstallobjects('opt_profiles', 'c', '', '')"
2.
У себя на диске создаете somefile.xml:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="UTF-8"?>
<OPTPROFILE VERSION="9.1.0.0">
  <STMTPROFILE ID="Guidelines for my simplest query">
    <STMTKEY>
      <![CDATA[select sum(p.summa) as summa
from warehouse.chequehead h
join warehouse.chequepos p on h.shopid = p.shopid and h.id = p.chequeid
where h.dateoperation between ? and ?]]>
    </STMTKEY>
    <OPTGUIDELINES>
      <IXSCAN TABLE="h" INDEX="IDX_CHEQUEHEAD"/>
    </OPTGUIDELINES>
  </STMTPROFILE>
</OPTPROFILE>
И файл somefile.txt для импорта:
Код: plaintext
"MY_SCHEMA","MY_NAME","somefile.xml"
3.
Из командного окна db2cmd, соединившесь с базой, вставляете 1 запись в SYSTOOLS.OPT_PROFILE:
Код: plaintext
db2 IMPORT FROM somefile.txt OF DEL MODIFIED BY LOBSINFILE INSERT INTO SYSTOOLS.OPT_PROFILE
4.
В command center при соединении с базой выполняем:
Код: plaintext
SET CURRENT OPTIMIZATION PROFILE = MY_SCHEMA.MY_NAME
и смотрим план запроса
Код: plaintext
1.
2.
3.
select sum(p.summa) as summa
from warehouse.chequehead h
join warehouse.chequepos p on h.shopid = p.shopid and h.id = p.chequeid
where h.dateoperation between ? and ?
5. Сообщите, что получилось.
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35235709
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На мой субъективный взгляд хранить дата_время в одном поле timestamp не есть очень хорошо... Всегда пытаюсь разбить на 2 поля... Мне кажется так ищется гораздо быстрее... Кстати, предметная облать та же: чеки, товары в них... ну и т.д.
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35235733
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TORTНа мой субъективный взгляд хранить дата_время в одном поле timestamp не есть очень хорошо... Всегда пытаюсь разбить на 2 поля... Мне кажется так ищется гораздо быстрее... Кстати, предметная облать та же: чеки, товары в них... ну и т.д.

+1

У меня еще есть вопрос к uchuDB2 . Ну и ко всемв том числе.
Почему на этапе создания чека общую сумму по всем позициям не поместить в WAREHOUSE.CHEQUEHEAD? Почему сделано именно так как сделано?
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35236160
uchuDB2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein
Марк, спасибо! Обязательно попробую, когда добирусь до базы.

TORT, gardenman
На мой субъективный взгляд хранить дата_время в одном поле timestamp не есть очень хорошо... Всегда пытаюсь разбить на 2 поля... Мне кажется так ищется гораздо быстрее...
А на мой - без разницы :) (тем более, что я храню и дату и таймштамп)
И, должен заметить, что индек по полю DateOperation задействован. У меня в голове не укладывается почему не берется индекс по внешнему ключу. Причем, задаю период сутки - отрабатывает в момент, задаю период сутки + 1мин (кол-во чеков увеличивается на 3!) - индекс отваливается и идет таблскан на 20мин!!!!!

gardenmanУ меня еще есть вопрос к uchuDB2. Ну и ко всемв том числе.
Почему на этапе создания чека общую сумму по всем позициям не поместить в WAREHOUSE.CHEQUEHEAD? Почему сделано именно так как сделано?
Как нету? А поле Summa и Disc_Summ в табл. WAREHOUSE.CHEQUEHEAD
Просто я показал упращенный вариант запроса, а мне нада сделать НДС, Sum(Сумма) group by НДС, а для этого мне необходимо перебрать позиции чеков :-(
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35236329
mitek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо, но строить DWH на Express-C идея по меньшей мере сомнительная.
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35236356
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mitekИмхо, но строить DWH на Express-C идея по меньшей мере сомнительная.
Жить вообще глупо. От этого даже умирают.
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35236732
uchuDB2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein
Mark Barinstein5. Сообщите, что получилось.

Я добавил в xml-файл строку, надеюсь я правильно все понял :)
Код: plaintext
<IXSCAN TABLE="p" INDEX="WAREHOUSE.IDX_CHEQUEPOS"/>

Получился план с индексными чтениями! Но если вместо знаков "?" я подставляю период, то все как и прежде ;-(

Оппа. Попробовал запустить "свежий" редактор (Command Editor), подсоединился к базе без указания
Код: plaintext
SET CURRENT OPTIMIZATION PROFILE = CTO.CTO
Эффект тот же. Т.е. с "?" - индекс, с периодом - таблскан.
:-(((
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35236736
uchuDB2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, и если со знаками "?" план удачный, значит ли это, что используя, например, в Delphi в запросе :dt1 and :dt2 будет такой же план. Или DB2 будет перестроивать план в зависимости от конкретных значений dt1 и dt2
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35236777
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
uchuDB2Да, и если со знаками "?" план удачный, значит ли это, что используя, например, в Delphi в запросе :dt1 and :dt2 будет такой же план. Или DB2 будет перестроивать план в зависимости от конкретных значений dt1 и dt2Никогда не работал с дельфи, но мне кажется, что оно должно делать prepare c маркерами, т.е. должно работать.
Оптимизатор db2 ищет точное совпадение текстов запросов, исключая лишние пробелы и управляющие символы.
Т.е. если вы будете использовать константы, то оно не будет оптимизироваться по профилю.
Другой способ, как вам выше советовали, сделать так (из db2cmd):
Код: plaintext
1.
2.
3.
db2set DB2_SELECTIVITY=ALL
db2stop
db2start
и писАть так:
Код: plaintext
1.
2.
3.
select sum(p.summa) as summa
from warehouse.chequehead h
join warehouse.chequepos p on h.shopid = p.shopid and h.id = p.chequeid
where h.dateoperation between '2008-03-24-00.00.00.00' and '2008-03-31-00.00.00.00' selectivity  0 . 000001 
Оптимизатор, увидев такое, поймет, что это весьма удобный фильтр - по h.dateoperation, т.к. он имеет очень маленькую selectivity и, скорее всего, будет использовать индекс по этому полю.
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35236879
uchuDB2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein
Еще раз спасибо.
Небольшое уточнение: индекс по
Код: plaintext
where h.dateoperation between '2008-03-24-00.00.00.00' and '2008-03-31-00.00.00.00' 
и так используется, я хочу что бы использовался индекс по warehouse.chequepos p
Код: plaintext
join warehouse.chequepos p on h.shopid = p.shopid and h.id = p.chequeid
Т.е. мне надо написать
Код: plaintext
join warehouse.chequepos p on h.shopid = p.shopid and h.id = p.chequeid selectivity  0 . 000001 
???
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35236971
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
...warehouse.chequepos p on (h.shopid,h.id) = (p.shopid,p.chequeid) selectivity  0 . 000001 
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35237843
OlegA67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein Какая у вас версия db2 и фикспак?
Добрый день Mark, не покажите как это должно выглядеть, для версии 8.2 FixPack 15. Заранее спасибо
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35238712
uchuDB2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переделал индекс по внешнему ключу как кластерный, и он стал подхватываться.
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35239629
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
OlegA67Добрый день Mark, не покажите как это должно выглядеть, для версии 8.2 FixPack 15. Заранее спасибоК сожалению, мне не удалось заставить v8 подхватывать optimization profile, несмотря на то, что, вроде бы, это возможно, как описано здесь .
C selectivity должно работать.
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35240141
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне кажется была какая-то статья примерно на эту тему, как правильно собирать статистику.
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35242183
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OlegA67 Mark Barinstein Какая у вас версия db2 и фикспак?
Добрый день Mark, не покажите как это должно выглядеть, для версии 8.2 FixPack 15. Заранее спасибоДобрался до v8.1.14 на linux.
При установленной переменной db2_optprofile, т.е. после
db2set db2_optprofile=YES
db2stop
db2start
похоже, что точно такой же оптимизационный профиль подхватывается, т.к. я на одних и тех же тестовых запросах получаю разные планы в зависимости от того, выполняю я команду
SET CURRENT OPTIMIZATION PROFILE=MY_SCHEMA.MY_NAME
или нет перед построением плана.
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #35242755
OlegA67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо буду пробовать
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Опять про игнорирование индексов
    #38919813
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,
У меня вот такой запрос:
Код: sql
1.
SELECT * FROM METR.CSM_CUSTOMER WHERE DELETE_DATE IS NULL 


Я добавил индекс IDX_DELETE_DATE, но так как по результатам выполнения выдаются примерно 90% записей, то выполняется TBLSCAN. Я разбираюсь с профилями оптимизации и хочу принудить оптимизатор использовать в этом запросе индекс IDX_DELETE_DATE, для этого я написал следующий профиль:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="UTF-8"?>
<OPTPROFILE VERSION="9.5.0.808">
  <STMTPROFILE ID="Guidelines for my simplest query">
    <STMTKEY>
	<![CDATA[SELECT * FROM METR.CSM_CUSTOMER WHERE DELETE_DATE IS NULL]]>
    </STMTKEY>
    <OPTGUIDELINES>
      <IXSCAN TABLE="METR.CSM_CUSTOMER" INDEX="IDX_DELETE_DATE"/>
    </OPTGUIDELINES>
  </STMTPROFILE>
</OPTPROFILE>


Я выполнил приведенные выше рекомендации:
Mark Barinstein uchuDB2У меня установлен DB2 Express-C 9.1.2К сожалению не уверен, что на express-c будет работать, но вы можете попробовать использовать optimization profiles .
Это те же указания оптимизатору.
Вкратце:
1.
Создаете таблицу SYSTOOLS.OPT_PROFILE:
db2 "call sysinstallobjects('opt_profiles', 'c', '', '')"
2.
У себя на диске создаете somefile.xml:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?xml version="1.0" encoding="UTF-8"?>
<OPTPROFILE VERSION="9.1.0.0">
  <STMTPROFILE ID="Guidelines for my simplest query">
    <STMTKEY>
      <![CDATA[select sum(p.summa) as summa
from warehouse.chequehead h
join warehouse.chequepos p on h.shopid = p.shopid and h.id = p.chequeid
where h.dateoperation between ? and ?]]>
    </STMTKEY>
    <OPTGUIDELINES>
      <IXSCAN TABLE="h" INDEX="IDX_CHEQUEHEAD"/>
    </OPTGUIDELINES>
  </STMTPROFILE>
</OPTPROFILE>

И файл somefile.txt для импорта:
Код: sql
1.
"MY_SCHEMA","MY_NAME","somefile.xml"


3.
Из командного окна db2cmd, соединившесь с базой, вставляете 1 запись в SYSTOOLS.OPT_PROFILE:
Код: sql
1.
db2 IMPORT FROM somefile.txt OF DEL MODIFIED BY LOBSINFILE INSERT INTO SYSTOOLS.OPT_PROFILE


4.
В command center при соединении с базой выполняем:
Код: sql
1.
SET CURRENT OPTIMIZATION PROFILE = MY_SCHEMA.MY_NAME

и смотрим план запроса
Код: sql
1.
2.
3.
4.
select sum(p.summa) as summa
from warehouse.chequehead h
join warehouse.chequepos p on h.shopid = p.shopid and h.id = p.chequeid
where h.dateoperation between ? and ?


5. Сообщите, что получилось.
и
Mark Barinstein OlegA67пропущено...

Добрый день Mark, не покажите как это должно выглядеть, для версии 8.2 FixPack 15. Заранее спасибоДобрался до v8.1.14 на linux.
При установленной переменной db2_optprofile, т.е. после
db2set db2_optprofile=YES
db2stop
db2start
похоже, что точно такой же оптимизационный профиль подхватывается, т.к. я на одних и тех же тестовых запросах получаю разные планы в зависимости от того, выполняю я команду
SET CURRENT OPTIMIZATION PROFILE=MY_SCHEMA.MY_NAME
или нет перед построением плана.
Но запрос все равно не использует профиль оптимизации, а выполняет TBLSCAN.
Вопрос : Как мне сделать, чтобы этот профиль оптимизации использовался при выполнении моего запроса???
P.S. при добавлении
Код: sql
1.
selectivity 0.000001

используется индекс IDX_DELETE_DATE, но я хочу этого добиться с помощью профиля оптимизации.
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #38920003
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASukhov1986,

Control Center по какой-то причине не реагирует на текущие установки профиля для сессии. Но он реагирует на переменную CURRENTOPTIMIZATIONPROFILE в db2cli.ini. Т.е. вы можете выставить этот профиль на клиенте (там, где, скажем, база зарегистрирована под алиасом mydbalias ) так:
Код: plaintext
update cli cfg for section  mydbalias  using CURRENTOPTIMIZATIONPROFILE  MY_SCHEMA.MY_NAME 

Либо получать план не в гарфическом виде, а при установленной в сессии CURRENT OPTIMIZATION PROFILE (в т.ч. и в сессии DB2 Command Center) командой:
Код: plaintext
explain all for  my_query 
а потом получить план вручную, например, утилитой db2exfmt.

IBM Data Studio лишена этого недостатка.
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #38920225
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Исходя из рекомендаций:
Mark BarinsteinASukhov1986,

Control Center по какой-то причине не реагирует на текущие установки профиля для сессии. Но он реагирует на переменную CURRENTOPTIMIZATIONPROFILE в db2cli.ini. Т.е. вы можете выставить этот профиль на клиенте (там, где, скажем, база зарегистрирована под алиасом mydbalias ) так:
Код: plaintext
update cli cfg for section  mydbalias  using CURRENTOPTIMIZATIONPROFILE  MY_SCHEMA.MY_NAME 

Либо получать план не в гарфическом виде, а при установленной в сессии CURRENT OPTIMIZATION PROFILE (в т.ч. и в сессии DB2 Command Center) командой:
Код: plaintext
explain all for  my_query 
а потом получить план вручную, например, утилитой db2exfmt.

IBM Data Studio лишена этого недостатка.

выполнил следующие шаги:
1. в командной строке подключился к БД с помощью команды
Код: sql
1.
db2 connect to CU242176

;
2. в командной строке установил для текущей сессии профиль оптимизации с помощью команды
Код: sql
1.
db2 SET CURRENT OPTIMIZATION PROFILE = METR.PROFIL1

;
3. в командной строке получил план в не графическом виде с помощью команды:
Код: sql
1.
db2 explain all for SELECT * FROM METR.CSM_CUSTOMER WHERE DELETE_DATE IS NULL

;
4. в командной строке получил отображение плана с помощью команды:
Код: sql
1.
db2expln -database CU242176 -terminal -statement "SELECT * FROM METR.CSM_CUSTOMER WHERE DELETE_DATE IS NULL"

.
В результате индекс опять не использовался. Журнал моих действий:
Код: xml
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.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
C:\Program Files (x86)\IBM\SQLLIB\BIN>db2 connect to CU242176

   Информация соединения с базой данных

 Сервер баз данных           = DB2/NT 9.5.0
 ID авторизации SQL          = ANTON
 Алиас локальной базы данных = CU242176


C:\Program Files (x86)\IBM\SQLLIB\BIN>db2 SET CURRENT OPTIMIZATION PROFILE = METR.PROFIL1
DB20000I  Команда SQL выполнена успешно.

C:\Program Files (x86)\IBM\SQLLIB\BIN>db2 explain all for SELECT * FROM METR.CSM_CUSTOMER WHERE DELE
TE_DATE IS NULL
DB20000I  Команда SQL выполнена успешно.

C:\Program Files (x86)\IBM\SQLLIB\BIN>db2expln -database CU242176 -terminal -statement "SELECT * FRO
M METR.CSM_CUSTOMER WHERE DELETE_DATE IS NULL"

DB2 Universal Database Version 9.5, 5622-044 (c) Copyright IBM Corp. 1991, 2007
Licensed Material - Program Property of IBM
IBM DB2 Universal Database SQL and XQUERY Explain Tool

DB2 Universal Database Version 9.5, 5622-044 (c) Copyright IBM Corp. 1991, 2007
Licensed Material - Program Property of IBM
IBM DB2 Universal Database SQL and XQUERY Explain Tool

******************** DYNAMIC ***************************************

==================== STATEMENT ==========================================

        Isolation Level          = Cursor Stability
        Blocking                 = Block Unambiguous Cursors
        Query Optimization Class = 5

        Partition Parallel       = No
        Intra-Partition Parallel = No

        SQL Path                 = "SYSIBM", "SYSFUN", "SYSPROC", "SYSIBMADM",
                                   "ANTON"


Statement:

  SELECT *
  FROM METR.CSM_CUSTOMER
  WHERE DELETE_DATE IS NULL


Section Code Page = 1208

Estimated Cost = 3389,229736
Estimated Cardinality = 19020,000000

Access Table Name = METR.CSM_CUSTOMER  ID = 2,21
|  #Columns = 48
|  Avoid Locking Committed Data
|  Evaluate Block/Data Predicates Before Locking Committed Row
|  Relation Scan
|  |  Prefetch: Eligible
|  Lock Intents
|  |  Table: Intent Share
|  |  Row  : Next Key Share
|  Sargable Predicate(s)
|  |  #Predicates = 1
|  |  Return Data to Application
|  |  |  #Columns = 48
Return Data Completion

End of section
...
Рейтинг: 0 / 0
Опять про игнорирование индексов
    #38920240
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

Также выполнил шаги исходя их первой рекомендации с db2cli.ini, в результате выполнения действий индекс опять не использовался.
Вот шаги которые я выполнял:
Код: xml
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.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
C:\Program Files (x86)\IBM\SQLLIB\BIN>db2 connect to Cu242176

   Информация соединения с базой данных

 Сервер баз данных           = DB2/NT 9.5.0
 ID авторизации SQL          = ANTON
 Алиас локальной базы данных = CU242176


C:\Program Files (x86)\IBM\SQLLIB\BIN>db2 update cli cfg for section CU242176 using CURRENTOPTIMIZAT
IONPROFILE METR.PROFIL1
DB20000I  Команда UPDATE CLI CONFIGURATION выполнена успешно.

C:\Program Files (x86)\IBM\SQLLIB\BIN>db2 GET cli cfg for section CU242176

 Раздел:  CU242176
 -------------------------------------------------
   CURRENTOPTIMIZATIONPROFILE=METR.PROFIL1

C:\Program Files (x86)\IBM\SQLLIB\BIN>db2expln -database CU242176 -terminal -statement "SELECT * FRO
M METR.CSM_CUSTOMER WHERE DELETE_DATE IS NULL"

DB2 Universal Database Version 9.5, 5622-044 (c) Copyright IBM Corp. 1991, 2007
Licensed Material - Program Property of IBM
IBM DB2 Universal Database SQL and XQUERY Explain Tool

DB2 Universal Database Version 9.5, 5622-044 (c) Copyright IBM Corp. 1991, 2007
Licensed Material - Program Property of IBM
IBM DB2 Universal Database SQL and XQUERY Explain Tool

******************** DYNAMIC ***************************************

==================== STATEMENT ==========================================

        Isolation Level          = Cursor Stability
        Blocking                 = Block Unambiguous Cursors
        Query Optimization Class = 5

        Partition Parallel       = No
        Intra-Partition Parallel = No

        SQL Path                 = "SYSIBM", "SYSFUN", "SYSPROC", "SYSIBMADM",
                                   "ANTON"


Statement:

  SELECT *
  FROM METR.CSM_CUSTOMER
  WHERE DELETE_DATE IS NULL


Section Code Page = 1208

Estimated Cost = 3389,229736
Estimated Cardinality = 19020,000000

Access Table Name = METR.CSM_CUSTOMER  ID = 2,21
|  #Columns = 48
|  Avoid Locking Committed Data
|  Evaluate Block/Data Predicates Before Locking Committed Row
|  Relation Scan
|  |  Prefetch: Eligible
|  Lock Intents
|  |  Table: Intent Share
|  |  Row  : Next Key Share
|  Sargable Predicate(s)
|  |  #Predicates = 1
|  |  Return Data to Application
|  |  |  #Columns = 48
Return Data Completion

End of section
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Опять про игнорирование индексов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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