powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / "Багофичное" поведение оптимизатора запросов.
20 сообщений из 20, страница 1 из 1
"Багофичное" поведение оптимизатора запросов.
    #35352141
svat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
(написанное ниже прошу расценивать как информацию к размышлению).

Код: plaintext
1.
 Тема:
----- 
Обнаружено странное поведение оптимизатора, когда он выбирает
явно неоптимальный план запроса. Описаны условия возникновения, солюшены.

Код: plaintext
1.
 Вводная:
-------- 

Версии IDS, на которых тестировалось: 7.31.UD8, 9.40.UC8, 11.50.FC1TL .

Параметры конфига IDS, касающиеся оптимизатора:
Код: plaintext
1.
2.
3.
4.
5.
6.
OPTCOMPIND       2         # Use costs regardless of the transaction isolation
OPT_GOAL         0         # FIRST_ROWS
DIRECTIVES       1         # Optimizer DIRECTIVES ON ( 1 /Default) or OFF ( 0 )
DS_MAX_QUERIES   3         # Maximum number of decision support queries
DS_TOTAL_MEMORY  524288    # Decision support memory (Kbytes)
DS_MAX_SCANS     1048576   # Maximum number of decision support scans

Таблица, на которой проявился эффект:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE "informix".sd_lines(
   id_line INTEGER NOT NULL,
   ...
   id_doc INTEGER NOT NULL,
   ...
) EXTENT SIZE  35000  NEXT SIZE  131072  LOCK MODE ROW;
...
CREATE UNIQUE INDEX "informix".p287_664 ON "informix".sd_lines(id_line);
CREATE INDEX "informix".r287_1961 ON "informix".sd_lines(id_doc);
...


Количество строк в таблице:

Код: plaintext
1.
2.
3.
4.
SELECT count(*)
FROM sd_lines; 

 7435707 

Из них (как выяснилось), эффект проявляется примерно на 700 строках (+/-).

Простой запрос, на котором "спотыкается" оптимизатор (далее - "глючный" ):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
QUERY:        (FIRST_ROWS OPTIMIZATION)

------
SELECT {+EXPLAIN, AVOID_EXECUTE}
id_line
FROM sd_lines
WHERE id_doc =  13406526 
ORDER BY id_line

DIRECTIVES FOLLOWED:
EXPLAIN
AVOID_EXECUTE
DIRECTIVES NOT FOLLOWED:

Estimated Cost:  939558 
Estimated # of Rows Returned:  2651 

   1 ) informix.sd_lines: INDEX PATH

        Filters: informix.sd_lines.id_doc =  13406526 

    ( 1 ) Index Keys: id_line   (Serial, fragments: ALL)


Тот же запрос, но з другим значением в фильтре, на нем оптимизатор
ведет себя предсказуемо:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
QUERY:        (FIRST_ROWS OPTIMIZATION)

------
SELECT {+EXPLAIN, AVOID_EXECUTE}
id_line
FROM sd_lines
WHERE id_doc =  13437160 
ORDER BY id_line

DIRECTIVES FOLLOWED:
EXPLAIN
AVOID_EXECUTE
DIRECTIVES NOT FOLLOWED:

Estimated Cost:  10 
Estimated # of Rows Returned:  25 
Temporary Files Required For: Order By

   1 ) informix.sd_lines: INDEX PATH

    ( 1 ) Index Keys: id_doc   (Serial, fragments: ALL)
        Lower Index Filter: informix.sd_lines.id_doc =  13437160 

Код: plaintext
1.
2.
3.
 "Видимые" признаки "глюка":
---------------------------
 
Из вышеуказанных запросов видим, что они отличаются
1) значением в фильтре WHERE
2) Estimated Cost: 939558 против 10
3) используемым оптимизатором индексом:

"Index Keys: id_line"
против
"Index Keys: id_doc"
4) (как следствие 2) ) - временем выполнения: ~1мин. против долей
секунды


Код: plaintext
1.
2.
3.
 "Неочевидные" причины "глюка":
------------------------------
 
Как показало исследование вопроса, "глюк" проявляется на значениях фильтра,
которые, согласно имеющемуся распределению данных в таблице, имеют низкую
избирательность фильтра. А именно, если посмотреть в "data distibution"
по этому столбцу таблицы:

Код: plaintext
1.
2.
3.
4.
$ dbschema -hd sd_lines -d database > sd_lines_distribution.txt

Distribution for informix.sd_lines.id_doc
High Mode,  0 . 500000  Resolution
... то увидим (проверено экспериментально), что "глюк" проявляется
только на bin's, в которых значение второго поля (кол-во уникальных
значений в bin) меньше некоторого числа (в данном случае < 36):

значение из первого запроса (13406526) попадает в 170й bin:
Код: plaintext
1.
2.
3.
 169 : (    37113 ,        72 ,      13394330 )
 170 : (    37113 ,        14 ,      13427487 )
 171 : (    37113 ,      1492 ,      13488741 )
значение из второго запроса (13437160) попадает в 171й bin.
А также на значениях из "data distribution", попавших в bin's
из раздела OVERFLOW. (в терминах "обычных" bin-ов там число во
втором поле вообще было бы < 1 ).

Таким образом, получается, что оптимизатор выбирает другой индекс
при условии низкой селективности фильтра для конкретного его значения.

НО! Что удивительно для меня: получившееся значение "Estimated Cost",
превышающее такое же для случая использования другого индекса
в ~1000 - 100 000 раз (!) его НЕ СМУЩАЮТ :)


Код: plaintext
1.
2.
3.
 Что ПОМОГАЕТ  для "вразумления" оптимизатора (workaroud/solution):
------------------------------------------------------------------
 
а) изменение переменной конфига OPT_GOAL :

Код: plaintext
OPT_GOAL     -1     # ALL_ROWS

б) использование директивы оптимизатора INDEX для принудительного
выбора "правильного" индекса:

Код: 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.
QUERY:        (FIRST_ROWS OPTIMIZATION)

------
SELECT {+EXPLAIN, AVOID_EXECUTE, INDEX (sd_lines r287_1961)}
id_line
FROM sd_lines
WHERE id_doc =  13406526 
ORDER BY id_line

DIRECTIVES FOLLOWED:
EXPLAIN
AVOID_EXECUTE
INDEX ( sd_lines r287_1961 )
DIRECTIVES NOT FOLLOWED:

Estimated Cost:  1276 
Estimated # of Rows Returned:  2651 
Temporary Files Required For: Order By

   1 ) informix.sd_lines: INDEX PATH

    ( 1 ) Index Keys: id_doc   (Serial, fragments: ALL)
        Lower Index Filter: informix.sd_lines.id_doc =  13406526 


Код: plaintext
1.
2.
3.
 Что НЕ ПОМОГАЕТ:
----------------
 
а) Снижение RESOLUTION до 0.1 при UPDATE STATISTICS.

В этом случае распределение по bin'ам получается более равномерное,
но кол-во bin'ов в разделе OVERFLOW вырастает (до ~700) и на них
"глюк" все равно имеет место быть.

б) Изменение переменной конфига OPTCOMPIND

в) Использование директивы оптимизатора ALL_ROWS (что тоже удивительно,
исходя из положительного эффекта от "OPT_GOAL -1"):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
QUERY:
------
SELECT {+EXPLAIN, AVOID_EXECUTE, ALL_ROWS}
id_line
FROM sd_lines
WHERE id_doc =  13406526 
ORDER BY id_line

DIRECTIVES FOLLOWED:
EXPLAIN
AVOID_EXECUTE
ALL_ROWS
DIRECTIVES NOT FOLLOWED:

Estimated Cost:  939558 
Estimated # of Rows Returned:  2651 

   1 ) informix.sd_lines: INDEX PATH

        Filters: informix.sd_lines.id_doc =  13406526 

    ( 1 ) Index Keys: id_line   (Serial, fragments: ALL)


Код: plaintext
1.
2.
3.
 Мое резюме:
-----------
 
Да, возможно, оптимизатор по заданному в конфиге критерию
OPT_GOAL и "имеет право на ошибку" (неоптимальный выбор плана
запроса). И в каждом конкретном случае дело программиста -
тюнинговать ли конкретный запрос директивами... Но, пардон,
не до такой же степени "промахиваться": итоговая разница
между Estimated Cost запроса с "автооптимизацией" и "без"
(939558 против 1276) просто ужасает... :)
А главное: никогда нельзя быть уверенным, не "тормознет" ли
на каком-то конкретном значении (комбинации значений) фильтра
тот или иной запрос... Всего же не протестируешь...
Думаю, это один из примеров, из-за которых в частности наши
программисты недолюбливают Informix...


PS. Сразу же отвечу на логичную реплику "так поставьте OPT_GOAL=-1
и будет вам щастье!": нет, из пушки по воробьям не стреляют. По мне
так логичнее сделать, чтобы действительно работала директива
оптимизатора {+ALL_ROWS}. А еще лучше, чтоб он был более интеллектуальным
и не допускал слишком большой разницы между Estimated Cost при подборе вариантов
плана запроса. Иными словами, при некоторых условиях выгоднее не следовать
тупо поведению, заданному переменной конфига OPT_GOAL.
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35352300
Art S. Kagel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Денис, ты где?
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35352396
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Art S. KagelДенис, ты где? я тут. А тебе Арти чего не спится?
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35352423
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svat2
sd_lines_distribution.txt
целиком выложите а, а то я половину не понял?

WHERE id_doc = 13406526
Estimated # of Rows Returned: 2651

WHERE id_doc = 13437160
Estimated # of Rows Returned: 25

т.е. 2651 и 25 правильные так?


стоимость = 939558 я думаю правильная. Надо обойти практически весь индекс и всю таблицу.


svat2SELECT {+EXPLAIN, AVOID_EXECUTE}
Estimated Cost: 939558
Estimated # of Rows Returned: 2651

SELECT {+EXPLAIN, AVOID_EXECUTE, INDEX (sd_lines r287_1961)}
Temporary Files Required For: Order By
Estimated Cost: 1276
Estimated # of Rows Returned: 2651

вот это интересно, да. Теоретически надо брать план с меньшей стоимостью.


svat2
Думаю, это один из примеров, из-за которых в частности наши программисты недолюбливают Informix...Завидую вашим программерам. А они какую субд порекомендуют? С безглючным оптимизатором?

/topic/480339
/topic/348785
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35352500
Фотография sysmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svat2
Думаю, это один из примеров, из-за которых в частности наши программисты недолюбливают Informix...
Программисты?!?!
По своему опыту, мне казалось, что Informix недолюбливали DBA (сисадмины) за его "графический" интерфейс и "обилие" литературы (IBM привет) .
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35352564
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Денис
svat2SELECT {+EXPLAIN, AVOID_EXECUTE}
Estimated Cost: 939558
Estimated # of Rows Returned: 2651

SELECT {+EXPLAIN, AVOID_EXECUTE, INDEX (sd_lines r287_1961)}
Temporary Files Required For: Order By
Estimated Cost: 1276
Estimated # of Rows Returned: 2651

вот это интересно, да. Теоретически надо брать план с меньшей стоимостью.
А нет, не интересно. Супруга мне подсказывает, что сортировка очень дорогая операция, и этот план был откинут на раннем этапе режима оптимизации first_rows потому как надо сортировать слишком много (аж 2651) строку (тут была ирония да).
Т.е. все абсолютно предсказуемо и правильно в оптимизаторе в некотором смысле.
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35353230
svat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев Денис svat2
sd_lines_distribution.txt
целиком выложите а, а то я половину не понял?


cм. в прицепе (распределение по другим полям таблицы вырезано).

Журавлев Денис
WHERE id_doc = 13406526
Estimated # of Rows Returned: 2651

WHERE id_doc = 13437160
Estimated # of Rows Returned: 25

т.е. 2651 и 25 правильные так?


как "Estimated" - да, правильные. А реально (повод улыбнуться проделкам Случая) даже совсем наоборот :) :

Код: plaintext
1.
2.
3.
4.
5.
SELECT count(*)
FROM sd_lines 
WHERE id_doc =  13406526 

 3 

Код: plaintext
1.
2.
3.
4.
5.
SELECT count(*)
FROM sd_lines 
WHERE id_doc =  13437160 

 34 
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35353282
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT {+EXPLAIN, AVOID_EXECUTE}
Estimated Cost: 939558
Estimated # of Rows Returned: 2651

SELECT {+EXPLAIN, AVOID_EXECUTE, INDEX (sd_lines r287_1961)}
Temporary Files Required For: Order By
Estimated Cost: 1276
Estimated # of Rows Returned: 2651

Если еще подумать, то оптимизатор-то прав, безумно прав:

Мы хотим первые строки, просим первые!
Стоимость получения первой строки (в этом плане): 939558/2651 = 354 (т.е. <1276) (при таком плане такой расчет допустим, во втором случае с Temporary Files Required For: Order By так делить нельзя, и стоимость получения первой строки и вообще всех = 1276).
Таким образом если таблица нормализована и вся лежит на диске (со стандартным временем отклика и процессор со стандартной частотой), первую строку мы увидим раньше при плане со стоимостью 939558
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35353362
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svat2
Код: plaintext
1.
2.
3.
 Что ПОМОГАЕТ  для "вразумления" оптимизатора (workaroud/solution):
------------------------------------------------------------------
 
а) изменение переменной конфига OPT_GOAL :

Код: plaintext
OPT_GOAL     -1     # ALL_ROWS


Код: plaintext
1.
2.
3.
 Что НЕ ПОМОГАЕТ:
----------------
 

в) Использование директивы оптимизатора ALL_ROWS (что тоже удивительно,
исходя из положительного эффекта от "OPT_GOAL -1"):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
QUERY:
------
SELECT {+EXPLAIN, AVOID_EXECUTE, ALL_ROWS}
id_line
FROM sd_lines
WHERE id_doc =  13406526 
ORDER BY id_line

DIRECTIVES FOLLOWED:
EXPLAIN
AVOID_EXECUTE
ALL_ROWS
DIRECTIVES NOT FOLLOWED:

Estimated Cost:  939558 
Estimated # of Rows Returned:  2651 

   1 ) informix.sd_lines: INDEX PATH

        Filters: informix.sd_lines.id_doc =  13406526 

    ( 1 ) Index Keys: id_line   (Serial, fragments: ALL)


Код: plaintext
1.
2.
3.
 Мое резюме:
-----------
 

PS. По мне
так логичнее сделать, чтобы действительно работала директива оптимизатора {+ALL_ROWS}.

Поведение оптимзатора оправдать можно не во всех упомянутых случаях. Расстраивает и удивляет именно вот это исключение (читаем ещё раз цитату): ПОМОГАЕТ OPT_GOAL -1, но НЕ ПОМОГАЕТ использование директивы оптимизатора ALL_ROWS...
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35353402
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛой
Поведение оптимзатора оправдать можно не во всех упомянутых случаях. Расстраивает и удивляет именно вот это исключение (читаем ещё раз цитату): ПОМОГАЕТ OPT_GOAL -1, но НЕ ПОМОГАЕТ использование директивы оптимизатора ALL_ROWS... :(
можно использовать: set optimization all_rows;

А на половине запросов ansi синтаксисом не работает директива +explain .
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35353421
svat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев Денис
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT {+EXPLAIN, AVOID_EXECUTE}
Estimated Cost: 939558
Estimated # of Rows Returned: 2651

SELECT {+EXPLAIN, AVOID_EXECUTE, INDEX (sd_lines r287_1961)}
Temporary Files Required For: Order By
Estimated Cost: 1276
Estimated # of Rows Returned: 2651

Если еще подумать, то оптимизатор-то прав, безумно прав...

причем "БЕЗУМНО" - ключевое слово :-)

ЗЫ. с выкладками согласен полностью.
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35353456
svat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев Денис
можно использовать: set optimization all_rows;


попробовал использовать.
Да, такой вариант "помогает":

Код: plaintext
1.
2.
3.
4.
5.
6.
set optimization all_rows;

SELECT 
...
WHERE id_doc =  13406526 
... ;
Estimated Cost: 1276
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35353602
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svat2
причем "БЕЗУМНО" - ключевое слово :-)

ЗЫ. с выкладками согласен полностью.
я бы сказал что стоимость сортировки несколько завышена.

откуда получается 1276 для 2651 строк надо читать тут: http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.perf.doc/perf292.htm
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35355054
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysmaster svat2
Думаю, это один из примеров, из-за которых в частности наши программисты недолюбливают Informix...
Программисты?!?!
По своему опыту, мне казалось, что Informix недолюбливали DBA (сисадмины) за его "графический" интерфейс и "обилие" литературы (IBM привет) .

Литература по информиксу (документация) одна из лучших.
А насчет "графического интерфейса" - "все великие дела делались в командной строке" (С).
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35355139
Фотография sysmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выбегалло sysmaster svat2
Думаю, это один из примеров, из-за которых в частности наши программисты недолюбливают Informix...
Программисты?!?!
По своему опыту, мне казалось, что Informix недолюбливали DBA (сисадмины) за его "графический" интерфейс и "обилие" литературы (IBM привет) .

Литература по информиксу (документация) одна из лучших.
А насчет "графического интерфейса" - "все великие дела делались в командной строке" (С).

Это не мое личное мнение, это мнение тех людей, с которыми мне приходилось общаться.
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35364880
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Денися бы сказал что стоимость сортировки несколько завышена.
А это у информикса было всегда - оптимизатор (, наверное, еще с древних времен, когда памяти было мало, сортировка всегда требовала временного пространства на диске) всегда жутко боялся сортировок и при первом удобном случае ее избегал (использованием соответствующего индекса, хоть и огромного, как в данном случае).
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35364993
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasilis Журавлев Денися бы сказал что стоимость сортировки несколько завышена.
А это у информикса было всегда - оптимизатор (, наверное, еще с древних времен, когда памяти было мало, сортировка всегда требовала временного пространства на диске) всегда жутко боялся сортировок и при первом удобном случае ее избегал (использованием соответствующего индекса, хоть и огромного, как в данном случае).
вот тут скупо описано:

libA sort requires in-memory work as well as disk work. The in-memory work depends on the number of columns that are sorted, the width of the combined sort key, and the number of row combinations that pass the query filter. Use the following formula to calculate the in-memory work that a sort operation requires:
не понятно как посчитать где будем сортировать в памяти или на диске.

libWm = (c * Nfr) + (w * Nfrlog2(Nfr))

Wm
is the in-memory work.
c
is the number of columns to order and represents the costs to extract column values from the row and concatenate them into a sort key.
w
is proportional to the width of the combined sort key in bytes and stands for the work to copy or compare one sort key. A numeric value for w depends strongly on the computer hardware in use.
Где посмотреть это загадочное w для инстанса?
lib
Nfr
is the number of rows that pass the query filter.
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35365079
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Денис libA sort requires in-memory work as well as disk work. The in-memory work depends on the number of columns that are sorted, the width of the combined sort key, and the number of row combinations that pass the query filter. Use the following formula to calculate the in-memory work that a sort operation requires:
не понятно как посчитать где будем сортировать в памяти или на диске.
Да, похоже, что заранее оптимизатор это не может определить, соответственно, боится дисковых операций даже там, где их нет. Хотя, наверное, мог бы, по крайней мере, для небольших выборок.
Журавлев Денис Где посмотреть это загадочное w для инстанса?
Если мне не изменяет память, то в старых (прошлого века :) материалах этот очень условный коэффициент равнялся 0,03 и был одинаковый для всех железяк. Возможно потом что то изменилось...
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35365099
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasilisЕсли мне не изменяет память, то в старых (прошлого века :) материалах этот очень условный коэффициент равнялся 0,03 и был одинаковый для всех железяк. Возможно потом что то изменилось...
Вот нашел. Память меня пока не подвела :)
---------------
Используемая при вычислении стоимости формула основывается на стоимости операций ввода-вывода, которые необходимо будет выполнить, и количестве процессорного времени, необходимого для обработки данных. Стоимость операций ввода-вывода вычисляется из ожидаемого количества обращений к диску, которые потребуются для обработки данных. Стоимость процессорного времени основывается на количестве обработанных кортежей. Эта стоимость конвертируется в эквивалентную стоимости ввода-вывода с помощью весового коэффициента. Весовой коэффициент является корректирующим значением стоимости про-цессорного времени, потому что обработка записи (стоимость процессора) относительно де-шевле, чем операция обращения к диску (стоимость ввода-вывода).
Весовой коэффициент жестко задан в программном коде и не может быть изменен.
Используемая формула полностью выглядит следующим образом:
стоимость = (стоимость ввода-вывода) + W * (стоимость процессора)
где стоимость ввода-вывода = количество обращений к диску, а стоимость процессора = ко-личество обработанных кортежей. W = весовой коэффициент, преобразующий стоимость процессорного времени в относительные единицы стоимости ввода-вывода (в настоящее время W=0.03).

---------------
...
Рейтинг: 0 / 0
"Багофичное" поведение оптимизатора запросов.
    #35365112
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vasilisЕсли мне не изменяет память, то в старых (прошлого века :) материалах этот очень условный коэффициент равнялся 0,03 и был одинаковый для всех железяк. Возможно потом что то изменилось...
W = weighting factor converting CPU cost to relative I/O cost

3/100 т.е. 15 лет назад 3 операции цпу были равны 100 дисковым операциям, а сечас наверно где-то 3/1000
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / "Багофичное" поведение оптимизатора запросов.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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