Oracle Magazine - Русское издание (Май Июнь 2007)

"Oracle. Основы стоимостной оптимизации" - книга для умных

 

 

 

Дж. Льюис

Oracle
Основы стоимостной оптимизации

Издательство "Питер" (www.piter.com),
СПб.:, 528 стр.; 1-е издание; 2006; 17x24 см; тир.3000; ISBN 978-5-469-01309-9; перевели с английского В.Голубев, В.Щербинин; научный редактор В.Щербинин
Аннотация от изд. "Питер" http://www.piter.com/book.phtml?978546901309

Оригинал: Cost-Based Oracle Fundamentals, by Jonathan Lewis. Apress, Oct 2005, ISBN: 1590596366 (англ.)

"Эту книгу можно назвать книгой о волшебстве.
Но Джонатан Льюис никогда не прибегал
к понятию "волшебство". Он хочет знать,
почему
что-то происходит так, как оно происходит.
Так что, по существу, его книга - о понимании.
Томас Кайт

VP (Public Sector), Oracle Corporation

"Если вы попросите меня подписать экземпляр этой книги,
девиз будет таким:
"То, что напечатано на бумаге, еще не означает,
что так оно и есть на самом деле.
Джонатан Льюис,

"Обязательное страшное предупреждение", стр. 20

Предуведомление от издательства. Уровень пользователя эксперт.

Крайне редко, но, к счастью, бывает так, что открываешь книгу в произвольном месте, читаешь первую попавшуюся на глаза строчку и с невероятным трепетом понимаешь, что нашел что-то похожее на то, о чем ты много думал в последнее время, искал и не находил приемлемого ответа ни в книгах, ни на чатах и в разговорах с коллегами, ни в ответах экспертов. (Но потом, правда, естественно, приходится читать и прорабатывать книгу с самого начала ! )

Именно такова книга Джонатана Льюиса "Oracle. Основы стоимостной оптимизации". Эта книга отвечает на очень многие вопросы как и почему так работет Oracle. В аннотации на обложке русского издания читаем текст, который, к сожалению, отсутствует в аннотации от издательства и поэтому приводимый здесь:

"Вопрос "Почему Oracle не использует мой индекс?" всегда был одним из наиболее часто задаваемых, появляющихся на форумах, посвященных Oracle. Вы уже выбрали нужные столбцы, получили их в идеальном порядке, подсчитали статистику, проверили наличие пустых столбцов - а оптимизатор просто-напросто отказывается использовать индекс, пока для него не будет соз дана подсказка. Что же здесь не так?

Если вам знакомо чувство растерянности, возникающее при наблюдении за невообразимыми действиями оптимизатора, когда лучший план исполнения очевиден, или если вы потратили многие часы или дни, пытаясь заставить оптимизатор делать то, что вам нужно, эта книга станет вашим спасением.Вы узнаете, как "думает" оптимизатор, почему он делает ошибки и из-за каких комбинаций данных ваша работа может пойти насмарку. Разобравшись в этом, вы сэкономите огромное количество времени на разработке и устранении ошибок в коде SQL."

Пожалуй, этот текст в наибольшей степени отражает квалификационный уровень пользователей, которым предназначена книга Дж. Льюиса. Хотя настройкой и оптимизацией производительности приходится заниматься практически всем администраторам баз данных (АБД) Oracle и наиболее продвинутым разработчикам Oracle-приложений, в большинстве случаев бывает достаточно значительно более скромных средств и усилий. На этом мы еще остановимся в конце данного опуса. Пока же рецензенты просят извинения за столь длинную цитату. По нашему мнению, при подготовке обзора по этой книге совершенно невозможно обойтись без многочисленных цитат и ссылок на текст и мнение автора. А лучше автора высказать его мысли нам вряд ли удастся. Если же кратко прорецензировать эту книгу, ее можно оценить всего лишь одним предложением: "Книга для умных великолепного автора"!

Но, пожалуй, одной такой восторженной и краткой характеристики просто мало. Мы постараемся соориентировать читателя в подходах автора к излагаемому материалу, к наиболее принципиальным определениям. Таковыми, с нашей точки зрения, являются тип оптимизации, кардинальность и селективность. Точные определения этих реалий помогут многим нашим специалистам разобраться в происходящих процессах.

  • "В этой книге полностью игнорируется оптимизация по синтаксису (rule based optimization, RBO), так как она она не рекомендуется к использованию несколько лет и полностью перестала поддерживаться в 10g (даже при том, что некоторый внутренний SQL-код все еще использует подсказку /*+ rule */). ... При создании базы данных автоматически устанавливается задание, которое будет автоматически каждые 24 часа генерировать статистику для всех таблиц с отсутствующей или устаревшей (stale) статистикой." (стр. 25).
  • "Прогнозируемое количество записей (кардинальность), генерируемых операцией, играет критическую роль в выборе порядка соединений и оптимальных индексов..." (стр. 68).
  • "Вычисления , выполняемые оптимизатором для определения кардинальности, основываются на оценке предполагаемой доли записей в текущем множестве данных, котрые пройдут некоторый тест. Эта доля и является числом, которое мы называем селективностью. После того, как вы получаете в селективность, кардинальность - это просто селективность, умноженная на количество записей на входе." (стр. 68).
  • И так далее. Всю книгу в журнальном отзыве переписать невозможно!

В дополнение к официальному оглавлению книги Дж. Льюис дает свое распределение материала по затронутым темам (стр. 19):

  • Табличные сканирования. Эта тема позволяет начать с простого и немного рассмотреть оценку стоимости процессорных ресурсов.
  • Простая селективность. Только одна таблица, но множество важных идей по выполняемым вычислениям.
  • Простые индексы на основе В-деревьев. Различие между одноблочными и многоблочными чтениями.
  • Фактор кластеризации. Возможно наиболее важная особеннось индексов.
  • Более тонкая селективность. Введение во многие незначительные изменения в базовой схеме.
  • Гистограммы. Почему, возможно, вы нуждаетесь в немногом; разница между OLTP и DSS/DW.
  • Битовые индексы. Потому, что не все индексы одинаковы.
  • Трансформации. То, что вы видите, это не совсем обязательно то, что вы получите.
  • Соединения. Четыре полных главы просто о том, как соединить таблицы.
  • Трассировка 10053. Рабочий пример.
  • Проблемы, связанные с обновлением. Набор предупреждений и примечаний, которые собраны из оставшейся части книги.

А в Заключении от Введения (стр. 22) Дж. Льюис пишет:

"Когда вы закончите читать эту книгу (в первый раз) [!!! - прим. В.А и А.Б.], я надеюсь, что вы подчерпнете из нее три ключевых момента.

  • Во-первых, обычно хорошее решение вашей проблемы существует где-то среди путей выполнения, доступных оптимизатору. Вам просто надо определить такой путь и найти способ заставить его появиться.
  • Во-вторых, кто угодно может создать хорошие тесты с увеличивающейся сложностью, которые увеличиваются в масштабе и ньюансах тогда и только тогда, когда это оправдано сложившейся ситуацией.
  • И наконец, если вы наблюдаете проблему с производительностью и обнаруживаете, что решаете ее, используя понятия содержимого данных, требований к доступу и стратегий физического хранения, это значит, что вы усвоили наиболее важный урок, который есть в этой книге."

Автор предупреждает, что перед нами только первая из трех частей задуманной книги. В последующих томах Дж.Льис предполагает охватить, в частности, секционированные таблицы, параллельное выполнение, индекс-таблицы, динамическую выборку и перезапись запросов. Но пока ни на сайте издательства Apress, ни на сайте самого Джонатана Льюиса нет сведений о подготовке к изданию или о написании второй и третьей частей "Cost-Based Oracle Fundamentals".

Очень хорошо, что издательство "Питер" так оперативно (буквально через год) подготовило и выпустило русской перевод этой совершенно замечательной книги. Не обошлось, правда, без некоторых огрехов по части профессионального языка и тяжеловесных фраз. Но поскольку эта книга предназначена для читателей квалификации "эксперт", то разобраться в немногих корявостях особого труда не представляет. Спасибо "Питер"! Мы будем надеяться, что и следующие книги Джонатана Льюиса будут изданы Вами с той же оперативностью и тщательной подготовкой.

Эта книга имеет ярко выраженный методологический характер. Она, в отличие от многих других произведений научно-технической лутературы, практически не дает конкретных рекомендаций по разборке конкретных случаев и практических SQL-предложений. Поэтому в заключение нашего опуса попробуем задать и ответить на два вопроса:

  • для кого все-таки предназначена эта книга и кому из АБД Oracle она принесет наибольшую пользу;
  • как сразу прочитавший и проникшийся идеями этой книги практический АБД должен применить на практике ее положения.

Довольно странные, почти риторические вопросы вопросы, не правда ли?! И все-таки, по нашему времени, наибольшую пользу эта и последующие книги Дж. Льюиса может принести АБД Oracle, который на деле интегрирован в команде разработчиков крупного проекта. В этом случае АБД, исследуя проектируемые приложения по методикам Дж. Льюиса, может сразу и непосредственно влиять на правильность разработки приложений. С другой стороны, наибольшую пользу эта книга принесет практическому АБД Oracle, который сопровождает и отвечает за промышленную эксплуатацию опять же крупного проекта с использованием СУБД Oracle и обладает правом и возможностями требовать модернизации приложений при выявлении недостаточной производительности и/или чрезмерного потребления ресурсов со стороны приложений.

Собственно говоря, последняя фраза несет ответ на наш второй (почти) риторический вопрос. Действия по модифицированию и/или настройке SQL-предложений и приложений в целом только тогда принесут действенный эффект, когда ресурсы вычислительной установки, на которой установлен Oracle близки к исчерпанию или когда время ответов на запросы пользователей перестает быть удовлетворительным. В противном случае все действия АБД приводят лишь к увеличению процента недоиспользуемой мощности ресурсов вычислительной установки. Так что времени у АБД для изучения и тестирования и опробывания рекомендаций Дж.Льюиса, будем надеяться, в большинстве случаев еще достаточно.

Виктор Абрамов,
научный редактор "Oracle Magazine/Русское Издание"

Анатолий Бачин,
главный редактор “Oracle Magazine/Русское Издание”

Дополнительно:

1. На сайте издательства "Питер" выложены дополнительные файлы:

Приведем мнение Т. Кайта (Предисловие, стр. 12): "Моя любимая глава в этой книге - седьмая: в ней приведено великолепное обсуждение того, что делают гистограммы, как оптимизатор использует их и рассказывает о некоторых мифах, которые их окружают."

2. На сайте издательства Apress выложены файлы:

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

3. Краткое оглавление книги "Oracle. Основы стоимостной оптимизации":

Предисловие
Введение (названия некоторых подглав)

   - Зачем беспокоиться?
   - Что есть в этой книге
   - Чего нет в этой книге
   - Что будет в последующих книгах
   - Обязательное страшное предупреждение
   - Теория и практика 
   - Планы выполнения

Глава 1. Что понимается под “стоимостью”
Глава 2. Табличное сканирование
Глава 3. Селективность для одной таблицы
Глава 4. Простой доступ по бинарному дереву
Глава 5. Фактор кластеризации
Глава 6. Вопросы селективности
Глава 7. Гистограммы
Глава 8. Битовые индексы
Глава 9. Трансформации запросов
Глава 10. Кардинальность соединения
Глава 11. Соединения с использованием вложенных циклов
Глава 12. Соединения хэширования
Глава 13. Соединения сортировки и слияния
Глава 14. Файл трассировки 10053
Алфавитный указатель
E-mail this page