Предисловие

Глава 1. Настройка среды оптимизации

Подготовка к тестированию

Оборудование
Программное обеспечение
Данные
Составление плана теста
Организация работы

Проведение тестирования

Творческая дисциплина

После тестирования
Формальная оценка
Определение дальнейших действий

Часть 1. Создание грамотно спроектированной
базы данных

Глава 2 Нормализация

Первая нормальная форма
Вторая нормальная форма
Третья нормальная форма
Когда нормализация не требуется

Вычисляемые значения
Архивная информация
Разделение

Специальные типы данных

Строки переменной длины
Двоичные данные переменной длины
Типы данных TEXT и IMAGE

Ограничения

Ограничение PRIMARY KEY
Ограничение FOREIGN KEY
Ограничение UNIQUE
Ограничение CHECK

Типы данных, определяемые
пользователями

ANSI-спецификация и SQL-сервер
Отмена ограничений

Использование представлений
Анализ зависимостей

Глава 3. Стратегия индексирования

Структура индекса

Кластеризованные индексы
Некластеризованные индексы
Leaf-страницы и non-leaf-страницы

Первичные ключи
Столбцы-фильтры
Столбцы-соединители
Широкие и узкие индексные ключи
Уникальные и неуникальные индексы
Символьные и числовые индексы
Составные индексы
Недостатки индексов, содержащих часто
повторяющиеся
значения
Кластеризованные индексы и
предварительно
упорядоченные данные
Растеризованные индексы и реорганизация
данных
Столбцы сортировки
Индексирование и специальные типы
данных
Индексирование и рабочие таблицы
Избыточное индексирование
Коэффициент заполнения индекса

Опция PADJNDEX

Размещение индексов

Глава 4. Принципы функционирования
оптимизатора

Microsoft SQL Server
Что такое оптимизатор?
Характеристики и алгоритмы оптимизатора
Диагностика оптимизатора

Использование SHOWPLAN
Анализ результатов SHOWPLAN

Советы по программированию

Корректировка работы оптимизатора

Команда UPDATE STATISTICS

DBCC SHOW_STATISTICS

Часть 2. Улучшение организации доступа к
базам данных

Глава 5 Советы по SQL

Виды соединений

Стандартное соединение
Перекрестное соединение
Внутреннее соединение
Левое внешнее соединение
Правое внешнее соединение
Полное внешнее соединение
Числовые и нечисловые соединения

SQL-пакеты
Выражение CASE

Функция COALESCE
Функция NULLIF

Поиск по подстроке
Временные и рабочие таблицы

Локальные временные таблицы
Глобальные временные таблицы
Неявные рабочие таблицы
Явные временные таблицы
Повышение производительности
временных таблиц

Подзапросы
Оценка представлений
Использование математических операций в
SQL
Объединения
Сортировка данных
ROLLUP
CUBE
Выполнение INSERT с помощью хранимых
процедур
INSERT и значения по умолчанию
Расширенные функции оператора UPDATE
Удаление нескольких таблиц
Удаление больших массивов информации

Глава 6. Хранимые процедуры и триггеры

Хранимые процедуры

Создание и применение хранимых
процедур
Использование хранимых процедур
Часто используемые программы
Автоматически стартующие хранимые
процедуры
Расширенные хранимые процедуры
Клиент/ сервер
Безопасность данных
Улучшение функционирования хранимых
процедур
Повторная компиляция хранимых
процедур

Триггеры

Журнал аудита
Тиражирование данных
Каскадное удаление

Глава 7. Общие рекомендации

Транзакции

Транзакции и DDL
Вложенные транзакции
Точки сохранения
Недопущение длительных транзакций
В каких случаях транзакции не
применяются
Размещение операторов BEGIN
TRANSACTION
и COMMIT TRANSACTION
Добавление транзакций к существующим
приложениям
Протоколирование транзакций и типы
данных TEXT/IMAGE
Неявные транзакции
Контроль за прерыванием транзакций
Распределенные транзакции

Курсоры

Серверные курсоры
Параметр INSENSITIVE
"Прокручиваемые" курсоры
Курсоры "только для чтения"
Обнаружение изменения данных с
помощью курсоров
FOR UPDATE
Отмена курсоров

Параллельность

Анализ блокировок
Уровни изоляции транзакций

Советы

Загрузка массивов данных
Перенос объектов и создание
сценариев

Глава 8. Архитектура клиент/сервер

Оценка возможностей сети
Минимизация сетевого трафика

Усовершенствование распределенных
запросов
Применение тиражирования
Выбор только необходимых столбцов
Использование соединений вместо
последовательности
операторов SELECT
Применение хранимых процедур
Выбор только необходимых строк
Обновление только измененных
столбцов

Настройка сети
Длительность соединения клиент/сервер

Часть 3. Оптимизация машины SQL-сервера

Глава 9. Средства мониторинга

SQL Performance Monitor
Объекты
Установка оповещений
Протоколирование
Отчеты

sp_monitor
Утилита DBCC
Флаги трассировки

Использование флагов трассировки

sp_configure
Утилита SQL Trace
Глобальные переменные

@CONNECTIONS
@CPU_BUSY
@CURSOR_ROWS
@SDATEFIRST
@DBTS
@ERROR
@FETCH_STATUS
©IDENTITY
@SIDLE
@IO_BUSY
@LANGID
@LANGUAGE
@MAX_CONNECTIONS
@MAX_PRECISION
@MICROSOFTVERSION
@NESTLEVEL
@SOPTIONS
@PACK_RECEIVED
@PACK_SENT
@PACKET_ERRORS
@PROCID
@SREMSERVER
@ROWCOUNT
@SSERVERNAME
@SERVICENAME
@SPID
@TEXTSIZE
@TIMETICKS
@TOTAL_ERRORS
@TOTAL_READ
@TOTAL_WRITE
@TRANCOUNT
©VERSION

Глава 10 Интеграция с операционной
системой Windows NT

Аппаратное обеспечение системы

Центральный процессор
Оперативная память
Дисководы

Выделенный сервер и невыделенный сервер
Программа контроля за функционированием
Параметры конфигурации

Файл подкачки
Повышение приоритета
Управление задачами сервера

Глава 11. Работа с диском

Общее представление о дисковой памяти

Страница
Экстент
Единица размещения
Устройство
База данных
Физическое имя
Логическое имя

Варианты хранения информации на диске

RAID
Функция чередования дисков
операционной системы
Зеркальное отображение
Сегменты
Файловые системы

Утилита DBCC и информация о диске

CHECKALLOC
CHECKCATALOG
CHECKTABLE
CHECKDB
CHECKIDENT
DBREINDEX
DBREPAIR
NEWALLOC
SHOW_STATISTICS
SHOWCONTIG
SHRJNKDB
TEXTALLOC
TEXTALL
UPDATEUSAGE

Фрагментация

Фрагментация дисков
Фрагментация баз данных

Хранимая процедура sp_spaceused
Коэффициент заполнения индекса
Вопросы ввода/вывода

Асинхронный ввод/вывод
Отложенная запись
Чтение c упреждением
Статистика
Примеры
Параметры конфигурации

Хранение tempdb в ОЗУ

Глава 12 Параметры машины SQL-сервера

Память

Параметры памяти при инсталляции
Кэширование данных
Кэширование хранимых процедур

Блокирование

Основные типы блокировок
Объект SQL Server-Locks
Параметры конфигурации

Потоки

Объект Thread Windows NT
Вопросы многопроцессорной обработки

Протоколирование

Описание журнала транзакций
Задание размера журнала транзакций
Размещение журнала транзакций
Контроль за использованием журнала
Выгрузка журнала транзакций
Усечение журнала транзакций
Использование контрольных точек
Управление использованием журнала
Журналы транзакций и зеркальное
отображение
Объект SQL Server-Log

Утилита DBCC и информация о машине
SQL-сервера

MEMUSAGE
OPENTRAN
PERFMON
PINTABLE
UNPINTABLE
PROCCACHE
ROWLOCK
SQLPERF
USEROPTIONS

Глава 13. Параметры баз данных и
конфигурация пользователей

sp_helpdb
Одна большая база данных или несколько
небольших?
Прямое обновление системных таблиц
Number of Open Databases
Number of Open Objects
Stored Procedure Cache
Create for Load
Кэш чтения с упреждением
Database Size
Recovery Interval
Контроль за соединениями пользователей
Select Into / Bulk Copy
DBO Use Only
No checkpoint on Recovery
Read Only
Single User
Columns Null by Default
Truncate Log on Checkpoint
Управление работой пользователей

Объект SQL Server-Users
Статистика
Примеры

Глава 14. Параметры сети

Статистика

NET - Command Queue Length
NET - Network Reads/sec
NET - Network Writes/sec

Конфигурация

Установка размера пакетов
Remote Access
Remote Login Timeout
Remote Query Timeout

Объект SQL Server User-Defined Counters

Глава 15. SQL Enterprise Manager

Detail Activity
Примеры

Глава 16. Эффективное тиражирование

Что такое тиражирование?
Зачем НУЖНО тиражирование?

Создание отчетов
Распределенная информация
Данные только для чтения

Терминология тиражирования

Жесткое согласование
Свободное согласование
Публикация данных
Статья
Публикация
Подписчик
База данных распределения
Процесс чтения журнала
Процесс синхронизации
Процесс распределения

Объект SQL Server Replication-Published
DB

Статистика

Объект SQL Server
Replication-Subscriber DB

Статистика

Хранимые процедуры тиражирования
Эффективное тиражирование

Планирование топологии тиражирования
Журнал транзакций
Память
Контроль за объемом публикуемых
данных
Первичные ключи
Внешние ключи
Контроль за числом публикаций

Приложение А. Анализ примеров