?

Log in

No account? Create an account

Пт, 29 май, 2009, 16:20
Stay tuned

Один из способов оптимизации сложных запросов состоит в сравнении реальной кардинальности с прогнозом оптимизатора. Допустим, на каком-то шаге плана выполнения оптимизатор ожидал выбрать N строк, а реально было выбрано M, «сильно не похожее» на N. Стало быть, оптимизатор исходил из неправильных представлений и, скорее всего, построил неудачный план. Причин тому может быть много: отсутствие или неадекватность необходимой статистики, невозможность воспользоваться имеющейся статистикой, а также такие штуки, как коррелированность предикатов... Но, по крайней мере, понятно, где копать.

Оракл постепенно движется, с одной стороны, к усложнению и уточнению статистики (говорят, в 11g коррелированность уже можно победить), а с другой — к возможностям «самосовершенствования» (механизм bind peeking в 11g, порождающий разные планы при наличии гистограммы на столбце).

Спрашивается: почему бы не сделать так, чтобы после каждого выполнения запроса проводилась «работа над ошибками»? Увидев, что на каком-то шаге имеется несоответствие между имеющейся статистикой и реальным положением дел, Оракл мог бы автоматически создавать некую дополнительную статистику, чтобы в следующий раз базироваться на более точных прогнозах.

Оно, конечно, не просто, но если подумать...

Вт, 2 июн, 2009 06:17 (UTC)
sergg_rw

В резюме можно написать "Думаю про Оракл."

Вт, 2 июн, 2009 17:48 (UTC)
egorius

Бородку сбрил, но мыслишки...