Отправляет email-рассылки с помощью сервиса Sendsay

Открыто о СУБД Oracle на русском

  Все выпуски  

Открыто о СУБД Oracle на русском : новая книга Тома Кайта и новые планы ведущего рассылки


Информационный Канал Subscribe.Ru

Выпуск 41

Уважаемые подписчики рассылки!

Сообщаю вам, что уже вернулся из отпуска и возобновляю регулярный выпуск рассылки. Спасибо за терпение.

Несколько слов о дальнейших планах развития рассылки. В ближайшее время выйдет еще несколько выпусков, основанных на блестящих материалах Тома Кайта:

  • История изменений по иерархическим данным (workspace management)
  • Ускорение вставки
  • Средства тщательного контроля доступа (FGAC) в действии
  • USING - ключевое слово PL/SQL
  • Накладные расходы в индексе

Далее, я хочу перевести все статьи, опубликованные Джонатаном Льюисом на сайте DBAzine.com. Это тоже очень толковый и знающий специалист, одна из статей которого, "Понимание индексов на основе битовых карт", уже публиковалась в этой рассылке. Тогда мне разрешили перевод, думаю, разрешат и для всех остальных статей...

Речь идет, как минимум, о следующих статьях Джонатана Льюиса (я даю их названия в своем переводе на русский - оригиналы ищите на сайте DBAzine.com):

  • Oracle_trace - лучшее встроенное средство диагностики
  • Мониторы транзакций и распределенные транзакции в Oracle
  • Понимание индексов на основе битовых карт (уже опубликована)
  • Стабилизация планов оптимизатора в Oracle 8i/9i
  • Надежный метод создания хранимых шаблонов планов оптимизатора в Oracle 9i
  • Индексы на основе битовых карт: преобразоване запросов типа "звезда"
  • Индексы на основе битовых карт: bitmap join index в Oracle 9.2
  • Локально управляемые табличные пространства
  • Сколько "стОит" UPDATE?
  • Почему Oracle не использует индекс?

До Нового года хватит, я думаю. Затем я перейду к авторским выпускам, посвященным систематическому изучению СУБД Oracle по принципам, предложенным Томом Кайтом в новой книге (ее содержание представлено ниже). Это не исключает публикации переводов обсуждений с сайта AskTom, но, думаю, вы все его и так читаете, а выступать в роли просто переводчика и редактора мне надоело... Поэтому прямых переводов будет намного меньше - они будут заменены ссылками.

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

А теперь приведу вам (в моем предварительном переводе на русский) содержание новой книги Тома Кайта, "Effective Oracle by Design", которая должна выйти в августе.

Проектирование эффективных приложений Oracle

Обложка новой книги Тома Кайта

 
Введение 
Настройка среды 
1. Правильный подход к разработке приложений 
  1.1. Разработка ведется командой 
    1.1.1. Функции АБД и разработчиков 
      1.1.1.1. Что должен и чего не должен делать АБД 
      1.1.1.2. Что должен и чего не должен делать разработчик 
  1.2. Прочитайте документацию 
    1.2.1. Как изучать документацию 
      1.2.1.1. Основные концепции (Concepts Guide) 
      1.2.1.2. Новые возможности (New Features Guide) 
      1.2.1.3. Руководство для разработчиков приложений (Application Developers Guide) 
      1.2.1.4. Руководство пользователя PL/SQL (PL/SQL Users Guide and Reference) 
      1.2.1.5. Руководство по настройке производительности (Performance Tuning Guide and Reference) 
      1.2.1.6. Основы резервного копирования и восстановления (Backup and Recovery Concepts) 
      1.2.1.7. Справочное руководство по RMAN (Recovery Manager Reference) 
      1.2.1.8. Руководство администратора (Administrators Guide) 
    1.2.2. В какой последовательности читать 
      1.2.2.1. Что должны обязательно прочитать все разработчики и АБД 
      1.2.2.2. Что должны прочитать разработчики 
      1.2.2.3. Что должны прочитать АБД 
      1.2.2.4. Что еще рекомендуется почитать 
  1.3. Избегайте синдрома "черного ящика" 
    1.3.1. "Независимость" и зависимость от СУБД 
    1.3.2. Проблемы, которые вызывает подход по принципу "черного ящика" 
      1.3.2.1. Низкая производительность 
      1.3.2.2. Некорректные ответы 
      1.3.2.3. Невозможность быстрой разработки ПО 
      1.3.2.4. Неоптимальная трата средств 
  1.4. База данных, а не просто совокупность данных 
    1.4.1. Используйте первичные и внешние ключи 
    1.4.2. Проверяйте затраты на поддержку целостности ссылок 
    1.4.3. Проверка на сервере приложений - не панацея 
      1.4.3.1. Будет ли она выполняться быстрее? 
      1.4.3.2. Обеспечит ли она большую гибкость? 
      1.4.3.3. Обеспечит ли она независимость от СУБД? 
      1.4.3.4. Обеспечит ли она большую безопасность? 
  1.5. Постройте тестовую среду 
    1.5.1. Тестируйте на реальных данных 
      1.5.1.1. Задумайтесь о возможности пропуска фрагментов 
      1.5.1.2. Учтите, что со временем планы оптимизатора меняются 
    1.5.2. Не тестируйте в однопользовательской среде 
    1.5.3. Не тестируйте в "тепличных" условиях 
  1.6. Проектируйте с учетом производительности, а не настраивайте готовое приложение 
    1.6.1. Не используйте универсальные модели данных 
    1.6.2. Проектируйте модель данных с учетом эффективности 
      1.6.2.1. Будут ли выполняться, в основном, записи или чтения? 
      1.6.2.2. Какую модель данных использовать? 
  1.7. Заранее определяйте требуемые показатели производительности 
    1.7.1. Задайте четкие, конкретные показатели производительности 
    1.7.2. Регистрируйте показатели производительности по ходу разработки 
    1.7.3. Не делайте лишь потому, что "все так делают" 
  1.8. Тестируйте производительность! 
    1.8.1. Локальное тестирование 
      1.8.1.1. Используйте простые средства тестирования 
      1.8.1.2. Другие средства тестирования производительности 
    1.8.2. Глобальное тестирование 
      1.8.2.1. Тестируйте на реальных объемах данных 
      1.8.2.2. Тестируйте на реальных данных 
      1.8.2.3. Не забудьте перепроверить результаты 
      1.8.2.4. Не считайте тестирование производительности излишним 
  1.9. Снабдите систему средствами контроля и отладки 
    1.9.1. Трассировка с сайта asktom.oracle.com 
    1.9.2. Обеспечьте средства удаленной отладки 
    1.9.3. Повсеместно используйте пакет DBMS_APPLICATION_INFO 
    1.9.4. Используйте DEBUG.F в PL/SQL 
    1.9.5. Включайте SQL_TRACE в приложении 
    1.9.6. Используйте стандартные функциональные интерфейсы 
    1.9.7. Создавайте собственные процедуры контроля и отладки 
    1.9.8. Аудит - это не фигня! 
  1.10. Типичные ошибки 
    1.10.1. Берегитесь универсальных "лучших способов" 
    1.10.2. Не полагайтесь на коэффициенты и другие мифические показатели 
  1.11. Не ищите легких путей 
  1.12. Создавайте простые системы 
    1.12.1. Рассматривайте альтернативные подходы 
    1.12.2. Пусть СУБД делает то, что она может делать лучше всего 
  1.13. Используйте стандартные функциональные возможности 
    1.13.1. Мы слышали, что X работает медленно 
    1.13.2. Мы слышали, что X сложно использовать 
    1.13.3. Мы не хотим... 
    1.13.4. Мы не знали... 
    1.13.5. Мы хотим обеспечить независимость от СУБД 
  1.14. Резюме 
 
2. Необходимые инструментальные средства 
  2.1. Утилита SQL*Plus 
  2.2. Настройка 
  2.3. Советы по использованию SQL*Plus 
    2.3.1. Используйте login.sql 
    2.3.2. Используйте @connect 
    2.3.3. Используйте SQLPATH 
    2.3.4. Прочитайте документацию! 
  2.4. Команда Explain Plan 
    2.4.1. Настройка 
    2.4.2. Использование Explain Plan 
    2.4.3. Понимание результатов Explain Plan 
    2.4.4. "Ловушка" Explain Plan 
    2.4.5. Пакет DBMS_XPLAN и представление V$SQL_PLAN 
  2.5. Установка Autotrace 
    2.5.1. Подготовка к использованию AUTOTRACE 
    2.5.2. Использование AUTOTRACE 
    2.5.3. Форматирование результатов 
    2.5.4. Понимание результатов 
    2.5.5. И что же мы ищем? 
      2.5.5.1. Рекурсивные SQL-операторы 
      2.5.5.2. Логические чтения (DB block gets/Consistent Gets) 
      2.5.5.3. Физические чтения 
      2.5.5.4. Объем данных повторного выполнения 
      2.5.5.5. Статистическая информация SQL*Net 
      2.5.5.6. Сортировки и количество обработанных строк 
    2.5.6. Резюме по использованию Autotrace 
  2.6. Утилита TKPROF 
    2.6.1. Включение TKPROF 
    2.6.2. Запуск TKPROF 
    2.6.3. TKPROF для "чайников" 
  2.7. Runstats 
    2.7.1. Настройка 
    2.7.2. Использование Runstats 
  2.8. Statspack 
    2.8.1. Настройка Statspack 
    2.8.2. Использование Statspack 
    2.8.3. Что делают неправильно 
    2.8.4. Краткий обзор Statspack 
  2.9. Пакет DBMS_PROFILER 
    2.9.1. Зачем использовать профилировщик 
    2.9.2. Получение полезной информации об использовании профилировщика 
  2.10. Jdeveloper (как средство отладки) 
  2.11. Резюме 
 
3. Масштабируемая архитектура 
  3.1. Различия подключений к выделенному и разделяемому серверу 
    3.1.1. Как работает выделенный сервер? 
      3.1.1.1. Последовательность подключения к выделенному серверу 
      3.1.1.2. Подключение к выделенному серверу - преимущества и недостатки 
    3.1.2. Как работает разделяемый сервер? 
      3.1.2.1. Последовательность подключения к разделяемому серверу 
      3.1.2.2. Выполнение команд разделяемым сервером 
      3.1.2.3. Подключение к разделяемому серверу - преимущества и недостатки 
    3.1.3. Типичные ошибочные суждения о подключениях к разделяемому серверу 
      3.1.3.1. Разделяемый сервер использует существенно меньше памяти 
      3.1.3.2. Серверы приложений должны подключаться только к разделяемому серверу 
      3.1.3.3. Разделяемые серверы предназначены только для клиент/серверных приложений 
      3.1.3.4. Экзмепляр работает (или не работает) в режиме разделяемого сервера 
    3.1.4. Итоги сравнения разделяемого и выделенного серверов 
  3.2. Используйте кластеризацию 
    3.2.1. Как работают кластеры RAC? 
      3.2.1.1. Обновление экземпляра и базы данных - сравнение 
      3.2.1.2. Экземпляры в среде RAC 
      3.2.1.3. Обновление служб 
    3.2.2. Какие преимущества дают кластеры RAC? 
    3.2.3. Резюме по кластеризации 
  3.3. Используйте локально управляемые табличные пространства (LMT) 
    3.3.1. Почему табличные пространства, управляемые по словарю, устарели? 
    3.3.2. Используйте управляемые системой LMT, если не знаете, насколько большими будут объекты 
    3.3.3. Используйте экстенты одинакового размера, если размеры объектов известны 
    3.3.4. Проблемы при использовании локально управляемых табличных пространств 
      3.3.4.1. Магический размер для одинаковых экстентов - 64 Кбайта 
      3.3.4.2. Управляемые системой LMT иначе используют пространство в файлах данных 
      3.3.4.3. Как автоматически увеличивать файлы данных 
      3.3.4.4. Не используйте старые конструкции хранения! 
    3.3.5. Резюме по использованию табличных пространств 
  3.4. Правильно используйте фрагментацию (Partitioning - "секционирование") 
    3.4.1. Основные понятия фрагментации 
      3.4.1.1. Схемы фрагментации 
      3.4.1.2. Пропуск фрагмента 
    3.4.2. Миф о фрагментации 
    3.4.3. Зачем использовать фрагментацию? 
      3.4.3.1. Повышение доступности данных 
      3.4.3.2. Упрощение администрирования 
      3.4.3.3. Повышение производительности 
    3.4.4. Резюме по фрагментации 
  3.5. Правильно используйте распараллеливание 
    3.5.1. Миф о распараллеливании 
      3.5.1.1. Расходы на параллельную обработку 
      3.5.1.2. Масштабируемость параллельной обработки 
    3.5.2. Распараллеливание при администрировании 
    3.5.3. Параллельные запросы 
      3.5.3.1. Настройки для распараллеливания запросов 
      3.5.3.2. Когда может пригодиться распараллеливание запросов? 
    3.5.4. Распарллеливание операторов ЯМД (DML) 
    3.5.5. Распараллеливание вручную 
    3.5.6. Резюме по распараллеливанию 
  3.6. Резюме 
 
4. Эффективное администрирование 
  4.1. Использование SPFILES 
    4.1.1. Нужны ли файлы параметров PFILES? 
    4.1.2. Помогите, мой SPFILE поврежден и сервер не запускается 
    4.1.3. Как понять, что используется SPFILE 
    4.1.4. Преимущества и недостатки 
  4.2. Использование файлов, управляемых сервером Oracle 
    4.2.1. Преимущества и недостатки 
  4.3. Защита резервных копий 
    4.3.1. Практически все системы должны работать в режиме Archivelog 
    4.3.2. Архивные журналы необходимо переносить/копировать за пределы исходной системы 
    4.3.3. Необходимо хранить минимум два экземпляра резервных копий 
    4.3.4. Физические резервные копии надо проверять 
    4.3.5. Необходимо потренироваться в восстановлении 
    4.3.6. Используйте инструментальные средства, снижающие вероятность ошибки 
    4.3.7. Data Guard 
    4.3.8. Резюме по резервному копированию и восстановлению 
  4.4. Попробуйте использовать автоматическое управление пространством в сегменте (Automatic Segment Space Management - ASSM) 
    4.4.1. Списки и группы списков свободных мест 
    4.4.2. Параметры Pctfree и Pctused 
    4.4.3. Когда использовать ASSM 
  4.5. Используйте автоматическое управление пространством UNDO для простоты администрирования 
    4.5.1. Установка параметра UNDO_RETENTION 
    4.5.2. Проблемы при использовании табличного пространства UNDO 
    4.5.3. Резюме по использованию табличного пространства UNDO 
  4.6. Резюме по эффективному администрированию 
 
5. Обработка операторов 
  5.1. Различные типы операторов SQL 
  5.2. Как выполняются операторы? 
    5.2.1. Анализ 
      5.2.1.1. Проверка синтаксиса и семантики 
      5.2.1.2. Проверка разделяемого пула 
        5.2.1.2.1. Проверка семантического соответствия 
        5.2.1.2.2. Проверка соответствия среды 
      5.2.1.3. Резюме по анализу операторов 
    5.2.2. Оптимизация и генерация строк 
    5.2.3. Выполнение 
    5.2.4. Резюме по выполнению операторов 
  5.3. Запросы - от начала до конца 
    5.3.1. Быстро выполняющийся запрос 
    5.3.2. Медленно выполняющийся запрос 
    5.3.3. Логичесике чтения (Consistent Reads) 
  5.4. Оператор ЯМД, изменяющий данные - от начала до конца 
  5.5. Обработка операторов ЯОД (DDL) 
  5.6. Использование связываемых переменных 
    5.6.1. Что такое связываемые переменные? 
    5.6.2. Преимущества использования связываемых переменных 
      5.6.2.1. Не использование связываемых переменных снижает производительность 
      5.6.2.2. Не использование связываемых переменных препятствует масштабируемости 
      5.6.2.3. Не использование связываемых переменных усложняет написание кода 
      5.6.2.4. Не использование связываемых переменных снижает безопасность кода 
    5.6.3. Связываемые переменные и язык Java 
    5.6.4. Резюме: как правило, надо использовать связываемые переменные 
    5.6.5. Из всякого правила есть исключения 
      5.6.5.1. Системы с быстрыми запросами 
      5.6.5.2. Системы с медленными запросами 
  5.7. Сведите анализ операторов к минимуму 
    5.7.1. Как сократить количество анализируемых операторов 
      5.7.1.1. Используйте PL/SQL 
      5.7.1.2. Избегайте ненужного динамического SQL в PL/SQL 
      5.7.1.3. Вынесите SQL-операторы из триггеров 
      5.7.1.4. Подготавливайте операторы ОДИН РАЗ, а выполняйте - много 
  5.8. Резюме 
 
6. Эффективное использование стоимостного оптимизатора 
  6.1. Почему потимизатор, основанный на правилах, не надо использовать 
  6.2. Как добиться правильной работы стоимостного оптимизатора 
    6.2.1. Параметр OPTIMIZER_INDEX_CACHING 
    6.2.2. Параметр OPTIMIZER_INDEX_COST_ADJUST 
    6.2.3. Использование статистической информации для табличного пространства SYSTEM 
  6.3. Оптимизация использования стоимостного оптимизатора 
    6.3.1. Параметр Cursor_sharing 
    6.3.2. Параметр Compatible 
    6.3.3. Параметр Db_file_multiblock_read_count 
    6.3.4. Параметр Hash_join_enabled 
    6.3.5. Параметр Optimizer_dynamic_sampling 
    6.3.6. Параметр optimizer_features_enable 
    6.3.7. Параметр optimizer_max_permutations 
    6.3.8. Параметр optimizer_mode 
      6.3.8.1. Режим CHOOSE 
      6.3.8.2. Режим RULE 
      6.3.8.3. Режимы ALL_ROWS и FIRST_ROWS 
    6.3.9. Параметр query_rewrite_enabled,query_rewrite_integrity 
    6.3.10. Параметры Bitmap_merge_area_size, sort_area_size, Hash_area_size 
    6.3.11. Параметр star_transformation_enabled 
    6.3.12. Другие параметры 
  6.4. Событие 10053 
  6.5. Резюме 
 
7. Проектирование эффективной схемы 
  7.1. Предполагаемые знания 
  7.2. Базовые принципы проектирования схемы 
    7.2.1. Пусть работает СУБД (целостность ссылок) 
    7.2.2. Используйте соответствующий тип данных 
    7.2.3. Оптимизируйте схему для наиболее часто выполняемых запросов 
  7.3. Выбор таблиц и индексов 
  7.4. Обзор типов таблиц 
  7.5. Кластеры 
    7.5.1. Создание кластеров 
      7.5.1.1. Кластеры на основе B*-дерева 
      7.5.1.2. Хеш-кластеры 
    7.5.2. Использование кластеров 
      7.5.2.1. Кластеры эффективны, когда можно контролировать способ загрузки данных 
      7.5.2.2. Кластеры на основе B*-дерева могут сократить объем ввода-вывода и повысить эффективность использования буферного кэша 
      7.5.2.3. Хеш-кластеры позволяют избавиться от блоков индекса 
      7.5.2.4. Однотабличные хеш-кластеры пригодятся для справочных таблиц (которые только читают) 
    7.5.3. Резюме по кластерам - преимущества и недостатки 
  7.6. Таблицы, организованные по индексу 
    7.6.1. Использование таблиц, организованных по индексу 
      7.6.1.1. Таблицы, организованные по индексу, - более компактная альтернатива ассоциативным таблицам 
      7.6.1.2. Таблицы, организованные по индексу, прекрасно подходят для размещения данных, вставляемых в случайном порядке 
    7.6.2. Преимущества и недостатки таблиц, организованных по индексу 
  7.7. Внешние таблицы 
    7.7.1. Использование внешних таблиц для загрузки и слияния данных 
      7.7.1.1. Настройка внешних таблиц 
      7.7.1.2. Непосредственная загрузка 
      7.7.1.3. Параллельная непосредственная загрузка 
      7.7.1.4. Слияние 
      7.7.1.5. Выявление и обработка ошибок 
  7.8. Обзор типов индексов 
  7.9. Индексы по функциям 
    7.9.1. Использование индексов по функциям - правильный подход 
      7.9.1.1. Избирательное индексирование 
      7.9.1.2. Для сложных ограничений 
  7.10. Доменные индексы 
    7.10.1. Использование доменных индексов 
      7.10.1.1. Доменные индексы могут реализовывать альтернативные способы индексирования 
      7.10.1.2. Создание индексов-"локаторов" 
  7.11. Упаковка 
    7.11.1. Упаковка ключей индекса 
    7.11.2. Упаковка таблиц 
    7.11.3. Резюме по упаковке 
7.12. Резюме 
 
8. Эффективное использование языка SQL 
  8.1. Понимание способов доступа к данным 
    8.1.1. Полный просмотр 
    8.1.2. Доступ по Rowid 
    8.1.3. Просмотр индекса 
    8.1.4. Просмотр кластера 
  8.2. Понимание соединений 
    8.2.1. Соединение вложенным циклом 
    8.2.2. Соединение хешированием 
    8.2.3. Соединение сортировкой слиянием 
    8.2.4. Декартово произведение 
    8.2.5. Анти-соединения 
    8.2.6. Полные внешние соединения 
  8.3. Особенности физической схемы 
  8.4. Знание особенностей языка SQL 
    8.4.1. Псевдостолбец Rownum 
    8.4.2. Скалярные подзапросы 
    8.4.3. Аналитические функции 
    8.4.4. Материализованные представления 
  8.5. Не настраивайте производительность отдельного запроса 
  8.6. Резюме 
 
9. Эффективное программирование на PL/SQL 
  9.1. Зачем использовать PL/SQL? 
    9.1.1. PL/SQL - самый эффективный язык обработки данных 
    9.1.2. PL/SQL обеспечивает переносимость и повторное использование 
    9.1.3. Пишите как можно меньше кода 
    9.1.4. Используйте пакеты 
    9.1.5. Используйте статический SQL 
    9.1.6. Множественная обработка 
    9.1.7. Возврат данных 
    9.1.8. Использование атрибутов %TYPE, %ROWTYPE 
    9.1.9. Конструкция Authid current_user 
    9.1.10. Справочники 
    9.1.11. Автономные транзакции 
    9.1.12. Неявные и явные курсоры 
      9.1.12.1. Однострочные выборки 
      9.1.12.2. Результирующие множества с небольшим количеством строк 
      9.1.12.3. Результирующие множества с большим количеством строк 
      9.1.12.4. Динамический SQL 
      9.1.12.5. Резюме по использованию неявных и явных курсоров 
  9.2. Резюме 
 
10. Итак, у вас - проблема производительности 
  10.1. Чем среда отличается от тестовой? 
  10.2. Не паникуйте 
  10.3. Меняйте параметры по одному 
  10.4. Меняйте параметр лишь при наличии веской причины 
  10.5. Не меняйте ничего "просто так", не гадайте 
  10.6. Восстанавливайте прежние значения 
  10.7. Начните с приложения - TKPROF 
  10.8. Затем переходите к системе в целом - statspack 
  10.9. Затем переходите к настройке на уровне ОС - специфические параметры ОС 
  10.10. Сравните с прежними данными - что изменилось 
  10.11. Создание тестового случая (для службы поддержки и для себя) 
 
Приложение 
 
Изучаем конкретный пример 

Список тем уже содержит рецепты решения половины проблем производительности... Ну что? Заинтересовались? Тогда отсюда можете скачать содержание и первые три главы в формате PDF, а на сайте Amazon.com заказать себе экземпляр со скидкой. О планах перевода этой книги на русский мне пока ничего не известно...


В следующем выпуске

О реструктуризации сайта проекта Open Oracle и, конечно, обещанные ответы от Тома Кайта на вопросы, связанные с использованием средств workspace management.

С наилучшими пожеланиями,

  В.К.



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное