MS SQL Server: проектирование высокопроизводительных баз данных
Роберт Д. Шнайдер
Предисловие
Глава 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
Статистика
Хранимые процедуры тиражирования
Эффективное тиражирование
Планирование топологии тиражирования
Журнал транзакций
Память
Контроль за объемом публикуемых
данных
Первичные ключи
Внешние ключи
Контроль за числом публикаций
Приложение А. Анализ примеров