Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Ядро Oracle. Внутреннее устройство для администраторов и разработчиков баз данных

Покупка
Артикул: 712438.01.99
В данной книге автор приводит только самую необходимую информацию о внутреннем устройстве СУБД Oracle, которую должен знать каждый администратор баз данных, чтобы успешно бороться с неполадками. Снаружи Oracle выглядит сложной. В действительности же обширные функциональные возможности основываются на очень небольшой базовой инфраструктуре, являющейся результатом архитектурных решений, принятых в самом начале и выдержавших испытание временем. Эта инфраструктура управляет транзакциями, реализует механизмы подтверждения и отката изменений, защищает целостность базы данных, позволяет выполнять резервное копирование и восстановление из резервных копий, а также обеспечивает масштабируемость до поддержки тысяч пользователей, одновременно обращающихся к одним и тем же данным. Большинство проблем, с которыми администраторы баз данных сталкиваются ежедневно, можно легко идентифицировать, если знать и понимать, как действует ядро Oracle, о чем и рассказывается в книге. Издание предназначено администраторам баз данных, готовых совершенствовать свое мастерство, когда управление СУБД осуществляется на основе глубоких знаний и понимания особенностей ее работы.
Льюис, Д. Ядро Oracle. Внутреннее устройство для администраторов и разработчиков баз данных / Джонатан Льюис ; пер. с англ. А.Н. Киселев. - Москва : ДМК Пресс, 2015. - 372 с. - ISBN 978-5-97060-169-3. - Текст : электронный. - URL: https://znanium.com/catalog/product/1027788 (дата обращения: 26.06.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Джонатан Льюис

Ядро Oracle 

Внутреннее устройство 
для администраторов  
и разработчиков  
баз данных

Oracle Core

Essential Internals  
for DBAs and Developers

Jonathan Lewis


Москва, 2015

Ядро Oracle

Внутреннее устройство  
для администраторов  
и разработчиков баз данных

Джонатан Льюис


УДК   004.65:004.451Oracle Database
ББК   32.973.34

Л91

Ядро Oracle. Внутреннее устройство для администраторов и разработчиков баз данных / пер. с англ. Киселев А. Н. – М.: ДМК Пресс, 
2015. – 372 с.: ил.

             ISBN 978-5-97060-169-3

В данной книге автор приводит только самую необходимую ин
формацию о внутреннем устройстве СУБД Oracle, которую должен 
знать каждый администратор баз данных, чтобы успешно бороться с 
неполадками.

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

Большинство проблем, с которыми администраторы баз данных 

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

Издание предназначено администраторам баз данных, готовых совер
шенствовать свое мастерство, когда управление СУБД осуществляется 
на основе глубоких знаний и понимания особенностей ее работы.

                                                                           УДК 004.65:004.451Oracle Database
                                                                    ББК 32.973.34

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

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

ISBN 978-1-4302-3954-3 (англ.)                     Copyright © by Jonathan Lewis 
ISBN 978-5-97060-169-3 (рус.)                       © Оформление, перевод на русский язык 

           ДМК Пресс, 2015

Л91     Джонатан Льюис

оглавление

Об авторе ..........................................................9

О технических рецензентах ................................ 11

Благодарности ................................................. 12

Введение ........................................................ 14

Глава 1. Начало... ............................................. 17
Oracle в процессах ................................................................... 18
Oracle в действии .................................................................... 21
В заключение .......................................................................... 22

Глава 2. Повтор и отмена ................................... 24
Изменение простых данных ..................................................... 24
Подход ...........................................................................................25
Пример ...........................................................................................26
Коротко о главном ..........................................................................30
Подведение итогов .........................................................................32
ACID ........................................................................................ 32
Простота механизма повторения ............................................. 35
Сложность механизма отмены ................................................. 44
Согласованное чтение ....................................................................45
Откат ..............................................................................................46
В заключение .......................................................................... 48

Глава 3. Транзакции и согласованность ................ 50
Разрешение конфликтов ......................................................... 51
Транзакции и механизм отмены ............................................... 52
Начало и конец транзакции .............................................................54
Таблица транзакций ........................................................................55
Обзор блока отмены .......................................................................58
Блоки данных и механизм отмены ........................................... 62
Подготовка полигона ......................................................................62
Список заинтересованных транзакций ...........................................64
Параллельные операции ................................................................67
Поддержка согласованности ................................................... 69

Оглавление

Номер SCN подтверждения ..................................................... 75
Фиксирующая очистка ....................................................................76
Отложенная очистка блока ..............................................................79
Откат таблицы транзакций ..............................................................84
Большие объекты .................................................................... 92
В заключение .......................................................................... 93

Глава 4. Блокировки и защелки ........................... 95
В первую очередь... ................................................................. 96
Массивы .........................................................................................96
Указатели .......................................................................................97
Связанные списки ..........................................................................97
Хэш-таблицы ................................................................................100
Защелки ................................................................................ 105
Логика работы защелок ................................................................106
Статистики по операциям с защелками ........................................110
Защелки и масштабируемость .....................................................117
Блокировки ........................................................................... 120
Инфраструктура ...........................................................................120
Представление v$lock ...................................................................122
Взаимоблокировка .......................................................................127
Режимы блокировок .....................................................................133
Защелки для блокировок ..............................................................134
Блокировки KGL (и закрепления) ..................................................137
Блокировки и закрепления ...........................................................138
В заключение ........................................................................ 141

Глава 5. Кэши и копии ...................................... 143
Управление памятью ............................................................. 144
Гранулы ........................................................................................144
Гранулы и буферы ........................................................................146
Несколько кэшей данных ....................................................... 148
Гранулы и пулы буферов ...............................................................151
Пулы буферов ...............................................................................152
Рабочие наборы данных ........................................................ 155
Алгоритм LRU/TCH ................................................................ 156
Алгоритм LRU/TCH в действии ......................................................158
Переустановка ссылок в буфере ...................................................159
REPL_AUX .............................................................................. 161
Поиск данных ........................................................................ 164
Закрепленные буферы .................................................................168
Логический ввод/вывод ................................................................171
Изменение ...................................................................................172
Загрузка хэш-цепочки ..................................................................173
Согласованные копии ...................................................................174
Физический ввод/вывод ...............................................................175

Оглавление

Сканирование таблиц ...................................................................176
В заключение ........................................................................ 178

Глава 6. Запись и восстановление ..................... 181
Цели ...................................................................................... 181
Запись в журнал .................................................................... 183
Цикл записи в журнал ...................................................................186
Оптимизация PL/SQL ....................................................................189
Аномалия ACID .............................................................................193
Расширенные механизмы подтверждения ....................................194
Механика ......................................................................................196
Непроизводительные потери памяти в буфере .............................200
Приватные буферы журнала .........................................................203
Запись данных ....................................................................... 204
Заголовки буферов.......................................................................206
Очереди контрольных точек ..........................................................206
Инкрементальные контрольные точки ...........................................209
Взаимодействия процесса записи данных............................. 211
Взаимодействие dbwr и lgwr .........................................................211
Процесс записи данных и списки LRU ...........................................213
Контрольные точки и очереди .......................................................217
Очереди заголовков буферов .......................................................223
Контрольные точки и файлы журнала ............................................224
Восстановление .................................................................... 227
Восстановление носителя ............................................................229
Резервные базы данных ...............................................................230
Ретроспективные базы данных .....................................................231
Побочные эффекты ......................................................................233
В заключение ........................................................................ 234

Глава 7. Парсинг и оптимизация ........................ 237
Понимание SQL ..................................................................... 237
Парсинг ........................................................................................238
Оптимизация ................................................................................238
Интерпретация результатов tkprof ................................................240
Кэш словаря .......................................................................... 243
Структура .....................................................................................248
Функционирование кэша словаря .................................................251
Вызов парсера – что это? ...................................................... 255
Кэш курсора .................................................................................257
Удержание курсоров .....................................................................260
Библиотечный кэш ................................................................ 262
Организация разделяемого пула ..................................................265
Детали организации разделяемого пула ......................................270
… и его работы! ............................................................................277
Парсинг и оптимизация ......................................................... 280

Оглавление

Выполнение, блокировка и закрепление .......................................284
Мьютексы .....................................................................................286
В заключение ........................................................................ 287

Глава 8. rac и крах ......................................... 290
Общая картина ...................................................................... 291
Бесперебойная работа .................................................................294
Для чего это надо? ................................................................ 296
Отказоустойчивость .....................................................................297
Масштабируемость ......................................................................298
Oracle Grid ....................................................................................299
Как это работает? .................................................................. 301
GRD ..............................................................................................302
Ведущие и теневые ресурсы .........................................................305
GCS и GES ....................................................................................309
Cache Fusion .................................................................................312
Следствия ....................................................................................315
Восстановление .................................................................... 319
Последовательности ............................................................. 321
Кэширование последовательностей .............................................322
Внутреннее устройство последовательности ...............................323
Упорядоченные последовательности............................................325
Последовательности и индексы ....................................................328
В заключение ........................................................................ 331

Приложение. Вывод и отладка .......................... 334
oradebug ................................................................................ 334
Приостановка процессов ..............................................................334
Вывод дампов ..............................................................................335
Вывод содержимого памяти .........................................................340
Вывод дампа из инструкций SQL ........................................... 343
Альтернативы oradebug ................................................................344
Блоки файлов данных ...................................................................345
Файлы журнала ............................................................................346
Рекомендации ....................................................................... 350

Словарь терминов .......................................... 351

Предметный указатель .................................... 366

об авторе

Джонатан Льюис (Jonathan Lewis) – 
опытный преподаватель с математической подготовкой из Оксфордского университета. Хотя первый 
интерес к компьютерам появился 
у него еще в нежном возрасте, чтото около 12 лет, – во времена, когда 
под высокими технологиями понималось использование клавиатуры, 
а не устройства для перфорирования 
карт – он, все же, не получил развития, пока Джонатан не закончил 
университет и не начал заниматься 
вычислениями 
профессионально. 
Кроме первого года после обучения, 
когда он, как неопытный продавец отвечал на любой вопрос «Да», 
вместо «Да, но это займет несколько недель на программирование и 
настройку», Джонатан работал только на себя.
Первое знакомство Джонатана с Oracle состоялось с версией 5.1, 
которую он использовал на ПК, проектируя и создавая систему управления рисками для сырьевой торговой площадки в одной из крупных 
нефтяных компаний. (Тогда он написал на ПК первую версию системы с названием dBase III, в которой использовались таблицы, индексы и некоторые другие механизмы, характерные для систем управления реляционными базами данных.) Благодаря Oracle он узнал, что 
должна делать настоящая система управления реляционными базами 
данных, и эти знания немедленно были взяты им на вооружение.
С того времени Джонатан сосредоточился исключительно на использовании Oracle RDBMS. Спустя три или четыре года работы по 
контракту, в течении которых он обрел опыт строительства больших 
систем, Джонатан решил закончить работы по контракту и заняться 
оказанием консалтинговых услуг, и теперь полностью посвящает свое 

Об авторе

время краткосрочным консалтинговым работам, проведению семинаров и «исследовательским» работам.
Джонатан хорошо известен в мире Oracle – в течение последних 
10 лет он работал в 50 странах и в десятках штатов США. Он оказывает посильную поддержку группам пользователей; в частности, принимает активное участие в работе группы пользователей Oracle Великобритании «UK Oracle User Group» (www.ukoug.org). При каждой 
удобной возможности старается выкроить время для встреч с группами пользователей в других странах, за пределами Великобритании, 
которые иногда имеют формат коротких собраний после окончания 
рабочего дня. Он также ведет свой блог, посвященный Oracle (http://
jonathanlewis.wordpress.com) и регулярно (когда не занят работой над 
очередной книгой) пишет статьи для разных журналов, форумов и 
семинаров.
Джонатан совсем недавно отпраздновал серебряную свадьбу со 
своей супругой Дианой (Diana) (в настоящее время работает учителем в начальной школе и заведующей отделением математики после 
многих лет работы бухгалтером). У них есть двое детей: Анна (Anna, 
в настоящее время учится на последнем курсе Оксфордского университета) и Симон (Simon, учится на первом курсе Йоркского университета). Несмотря на привязанность родителей к математике, ни 
один не пошел по их стопам.

о технических 
рецензентах

Танел Подер (Tanel Põder) – специалист международного уровня по вопросам производительности Oracle, помогающий решать 
сложные проблемы своим клиентам в более чем двадцати странах на 
пяти континентах. Специализируется на тонкой настройке производительности, полной диагностике и решении других сложных (и от 
того особенно интересных) задач, таких как миграция огромных баз 
данных за ограниченный интервал времени. Танел занимался оптимизацией производительности аппаратно-программных комплексов 
Exadata, начиная с версии Exadata V1, и планирует провести еще более обширные исследования производительности Exadata. Является 
соавтором книги «Expert Oracle Exadata» (Apress, 2011).
Танел одним из первых в мире получил сертификат «Oracle Certified Masters», имеет звание «Oracle ACE Director» и является полноправным членом OakTable Network. Регулярно выступает на конференциях по всему миру, публикует статьи, а также распространяет 
сценарии и инструменты в своем блоге http://blog.tanelpoder.com.

благодарности

В первую очередь я хочу поблагодарить мою супругу Диану, за ее поддержку, пока я писал эту книгу. Без ее любви и терпения не было бы 
этой книги. Она приготовила мне несчетное число чашек чая (которые часто оставались на столе нетронутыми), терпела, когда я работал поздно вечером (или рано утром), и не жаловалась, когда я работал над книгой в ущерб другим делам. Эта книга требовала большой 
концентрации, и если вместо меня никто не делал бы повседневные 
дела, я не смог бы ее написать.
Любая техническая книга нуждается в рецензировании, поэтому 
я, конечно же, благодарен Танелу Подеру (http://tech.e2sn.com/ и 
http://blog.tanelpoder.com/), что стал моим техническим рецензентом. Его замечания, вопросы и исправления были весьма ценны и поучительны. 
У меня были также два «неофициальных» рецензента: Мартин 
Видлейк (Martin Widlake, http://mwidlake.wordpress.com) и Тимур 
Ахмадеев (Timur Akhmadeev, http://timurakhmadeev.wordpress.com/), 
оказавшие мне немалую помощь в создании книги. Я просил их помочь мне выяснить, что еще добавить в книгу, что убрать, и какие ее 
части несут неоднозначную информацию; однако они здорово помогли мне также в вылавливании технических ошибок. Если вам понравятся диаграммы в этой книге, благодарите за это Мартина, потому 
что это он постоянно говорил мне о том, какие описания следует сопроводить иллюстрациями.
Андрей 
Николаев 
(Andrey 
Nikolaev, 
http://andreynikolaev.
wordpress.com/) был специально приглашен для рецензирования главы 4. В Интернете имеется огромный объем информации с описанием 
работы внутренних механизмов Oracle – большая часть этого объема 
является простым повторением сведений, устаревающих с годами. 
Лучшей демонстрацией этого феномена являются сведения о «защелках» (latches); отчасти потому что это, безусловно, очень сложная 
тема. Андрей сделал намного больше, чем любой другой автор в Интернете, представив современное описание защелок (и мьютексов) – 

Благодарности

поэтому я просил его составить свое мнение о главе 4. Я очень благодарен Андрею за его комментарии и исправления.
Даже при том, что над книгой работали такие превосходные рецензенты, вы все еще можете встретить в ней ошибки и недостатки – вина 
за все эти ошибки и недостатки лежит исключительно на мне. Например, иногда я преднамеренно допускал, возможно, излишнее упрощение, иногда я сам мог что-то неправильно понять. Значительная часть 
этой книги рассказывает о работе внутренних механизмов, но ни я, ни 
приглашенные мною рецензенты не имеют доступа к внутренней, закрытой документации с описанием таких механизмов; мы – обычные 
люди, применяющие научный подход ко всему, что можно исследовать и измерить. В течение долгого времени мы наблюдаем и обсуждаем работу того или иного механизма, вырабатывая единое мнение, 
которого придерживаемся, пока не появятся новые данные.
Я мог бы назвать еще много имен людей, так или иначе внесших 
свой вклад в эту книгу; людей, которые давали мне ответы, задавали 
вопросы или приглашали для решения интересных задач. Вы всегда сможете найти огромное число вопросов на форумах, таких как 
OTN (http://forums.oracle.com) и Oracle-L (www.freelists.org/archive/
oracle-l), где описываются реальные проблемы с Oracle, и огромное 
число людей, обладающих знаниями и опытом, позволяющими решать эти проблемы. Без непрекращающегося потока вопросов так 
легко застрять в колее и думать, что вы знаете все. Я с полной уверенностью могу сказать, что значительная часть моих знаний об Oracle 
была получена в ходе исследований, которыми я занимался, пытаясь 
найти ответы, а не подсматривал готовые решения в Интернете.

введение

Когда я написал книгу «Practical Oracle 8i», прошло всего три недели с момента публикации до первого электронного письма, где меня 
спрашивали, когда я напишу книгу для версии 9i – благодаря Ларри 
Эллисону (Larry Ellison)1, выпустившему  к тому моменту версию 9i. 
За последние 12 лет этот вопрос мне задавали много-много раз (менялся только номер версии). Эта книга показывает, насколько я был 
близок к решению начать работу над вторым изданием, правда в ней 
охватывается только первая (и немного вторая и третья) глава оригинала.
Два обстоятельства побудили меня вновь сесть за письменный стол. 
Во-первых, я очень часто наталкивался на вопросы вида: «Как Oracle 
делает то-то или то-то?». Во-вторых, было подмечено, что на такие 
вопросы почти невозможно найти ответы, которые были бы просты, 
понятны и содержательны. Обычно приходится перелопачивать горы 
руководств, чтобы найти ответы на часто задаваемые вопросы. Если 
заняться поисками ответа в Интернете, можно найти массу статей с 
описанием некоторых тонкостей в работе Oracle, но вы не найдете достаточно связного описания, которое поможет понять, как работает 
тот или иной механизм и почему он работает именно так, а не как-то 
иначе. В этой книге я попытался дать именно такие ответы. Мне хотелось рассказать, как работает Oracle, поведать вам связную историю, 
а не просто дать набор отрывочных сведений.

Цели

Руководства с описанием версии 11g занимают десятки тысяч 
страниц, поэтому кажется маловероятным, что в книге, содержащей 
всего пару сотен страниц, удалось описать «как все работает», поэтому я хочу обозначить главные цели. Книга описывает основные 
механизмы ядра базы данных, приводящие в движение все остальное; по сути в их число входят механизмы повтора, отмены, кэ
1 
Лоренс Джозеф Эллисон (Lawrence Joseph Ellison) – основатель и исполнительный 
директор корпорации Oracle. Также известен как Ларри Эллисон. – Прим. перев.