SQL Server. Наладка и оптимизация для профессионалов - Дмитрий Короткевич - E-Book

SQL Server. Наладка и оптимизация для профессионалов E-Book

Дмитрий Короткевич

0,0

Beschreibung

Исчерпывающий обзор лучших практик по устранению неисправностей и оптимизации производительности Microsoft SQL Server. Специалисты по базам данных, в том числе разработчики и администраторы, научатся выявлять проблемы с производительностью, системно устранять неполадки и расставлять приоритеты при тонкой настройке, чтобы достичь максимальной эффективности. Автор книги Дмитрий Короткевич — Microsoft Data Platform MVP и Microsoft Certified Master (MCM) — расскажет о взаимозависимостях между компонентами баз данных SQL Server. Вы узнаете, как быстро провести диагностику системы и найти причину любой проблемы. Методы, описанные в книге, совместимы со всеми версиями SQL Server и подходят как для локальных, так и для облачных конфигураций SQL Server.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 593

Veröffentlichungsjahr: 2023

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Дмитрий Короткевич
SQL Server. Наладка и оптимизация для профессионалов
2023

Переводчик С. Черников

Дмитрий Короткевич

SQL Server. Наладка и оптимизация для профессионалов. — СПб.: Питер, 2023.

ISBN 978-5-4461-2332-2

© ООО Издательство "Питер", 2023

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

Оглавление

Предисловие
Для кого эта книга
Структура книги
Условные обозначения
Использование исходного кода примеров
Благодарности
От издательства
Глава 1. Установка и настройка SQL Server
Аппаратное обеспечение и операционная система
Настройка SQL-сервера
Настройка баз данных
Анализ журнала ошибок SQL Server
Консолидация экземпляров и баз данных
Эффект наблюдателя
Резюме
Глава 2. Модель выполнения SQL Server и статистика ожидания
SQL Server: высокоуровневая архитектура
SQLOS и модель выполнения
Статистика ожидания
Динамические административные представления, связанные с моделью выполнения
Обзор регулятора ресурсов
Резюме
Глава 3. Производительность дисковой подсистемы
Как устроена подсистема ввода/вывода SQL Server
Подсистема хранения: целостный обзор
Настройка контрольных точек
Ожидания ввода/вывода
Резюме
Глава 4. Неэффективные запросы
Чем плохи неэффективные запросы
Статистика выполнения на основе кэша планов
Расширенные события и трассировки SQL
Хранилище запросов
Сторонние инструменты
Резюме
Глава 5. Хранение данных и настройка запросов
Хранение данных и схемы доступа
Таблицы на основе строк
Фрагментация индекса
Статистика и оценка количества элементов
Анализ плана выполнения
Характерные проблемы при настройке запросов
Индексирование данных
Резюме
Глава 6. Загрузка процессора
Неоптимизированные запросы и код T-SQL
Компиляция запросов и кэширование планов
Компиляция и параметризация
Параллелизм
Резюме
Глава 7. Проблемы с оперативной памятью
Использование и конфигурация памяти в SQL Server
Выделение памяти
Выполнение запросов и предоставление памяти
In-Memory OLTP и устранение неполадок
Резюме
Глава 8. Блокировки и конкурентный доступ
Типы блокировок и их поведение
Проблемы блокирования
Взаимные блокировки (Deadlocks)
Оптимистичные уровни изоляции
Блокировки схемы
Укрупнение блокировок
Ожидания, связанные с блокировками
Резюме
Глава 9. Работа с базой данных tempdb и ее производительность
Временные объекты в tempdb
Внутренние компоненты, использующие tempdb
Распространенные проблемы с tempdb
Конфигурация базы данных tempdb
Резюме
Глава 10. Кратковременные блокировки
Введение в кратковременные блокировки
Кратковременные блокировки страниц
Другие типы кратковременных блокировок
Резюме
Глава 11. Журнал транзакций
Внутреннее устройство журнала транзакций
Конфигурация журнала транзакций
Проблемы с усечением журнала
Ускоренное восстановление базы данных
Пропускная способность журнала транзакций
Резюме
Глава 12. Группы доступности AlwaysOn
Обзор групп доступности AlwaysOn
Очереди групп доступности
Синхронная репликация и опасное ожидание HADR_SYNC_COMMIT
Асинхронная репликация и доступные для чтения вторичные реплики
Параллельный повтор
Устранение неполадок аварийного переключения
Резюме
Глава 13. Другие примечательные типы ожиданий
Ожидания ASYNC_NETWORK_IO
Ожидания THREADPOOL
Ожидания, связанные с резервным копированием
HTBUILD и другие ожидания с префиксом HT*
Вытесняющие ожидания
Типы ожидания: подводим итоги
Резюме
Глава 14. Анализ схемы базы данных и индексов
Анализ схемы базы данных
Анализ индекса
Целостное представление: sp_Index_Analysis
Резюме
Глава 15. SQL Server в виртуализированных средах
Виртуализировать или не виртуализировать — вот в чем вопрос
Настройка SQL Server в виртуализированных средах
Управление виртуальными дисками
Стратегия и инструменты резервного копирования
Устранение неполадок в виртуальных средах
Резюме
Глава 16. SQL Server в облаке
Облачные платформы с высоты птичьего полета
Связь и обработка случайных ошибок
SQL Server в облачных виртуальных машинах
Управляемые службы Microsoft Azure SQL
Amazon SQL Server RDS
Google Cloud SQL
Резюме
Приложение. Типы ожиданий
Об авторе
Иллюстрация на обложке

Предисловие

Прошло уже несколько лет с тех пор, как была издана моя предыдущая книга. За это время многое изменилось. Выпущено несколько новых версий SQL Server. Продукт стал более зрелым, кросс-платформенным, в нем появилась полноценная поддержка облачных технологий. Но я все равно не торопился публиковать новое издание книги «Pro SQL Server Internals» («Внутреннее устройство SQL Server для профессионалов»).

Тому было несколько причин. Как бы ни были хороши новые функции, они не меняли фундаментальных принципов работы продукта. Материал из моих старых книг по большей части подходит к SQL Server 2017, SQL Server 2019 и даже к свежему SQL Server 2022. Что еще более важно, я хотел написать книгу по-другому.

Наверное, стоит уточнить. Как некоторые из вас, возможно, знают, я уже много лет провожу курсы по SQL Server и использую собственные книги как методические пособия к этим курсам. Собственно, я и писать начал именно потому, что хотел представить материал в более структурированном формате, чем презентации PowerPoint. Я рад, что моим читателям это понравилось и книги оказались полезными.

Все мои курсы были посвящены внутреннему устройству SQL Server. Я всегда считал, что профессионал должен разбираться в своих инструментах, чтобы достичь успеха. Я рассказываю ученикам, как работает SQL Server, и помогаю им применять эти знания и создавать эффективные системы. Но в какой-то момент я обнаружил, что самой популярной темой на моих занятиях стали устранение неполадок и настройка производительности: ученикам интересно, когда я описываю конкретную проблему, а затем объясняю, почему она возникла.

Изменив методику преподавания, я решил изменить и методику написания книги. Прошло 18 месяцев — и результат перед вами. Лично мне нравится то, что получилось. Книга по-прежнему посвящена внутреннему устройству SQL Server, но теперь она лаконичнее и практичнее моих предыдущих работ1. Она научит вас эффективно обнаруживать и устранять типичные проблемы при работе с SQL Server, не перегружая лишней информацией. Книга также ­покажет, в каком направлении двигаться, если вы хотите узнать еще больше.

Здесь описана методология, которую используют многие консультанты мирового уровня по SQL Server. Вы научитесь собирать и анализировать данные, выявлять узкие места и очаги неэффективности. Что еще более важно, я покажу, как рассматривать систему целостно и «видеть лес за деревьями».

Содержание книги не привязано к какой-либо конкретной версии SQL Server. За немногими исключениями оно актуально для всех версий от SQL Server 2005 до SQL Server 2022 и последующих версий. Материал также подходит для управляемых служб SQL Server, работающих в облаке.

Для кого эта книга

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

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

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

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

Структура книги

Книга состоит из 16 глав:

Глава 1 «Установка и настройка SQL Server» содержит принципы и лучшие методики того, как выбирать оборудование и настраивать экземпляры SQL Server.

Глава 2 «Модель выполнения SQL Server и статистика ожидания» описывает SQLOS — очень важный компонент SQL Server. Здесь же вы познакомитесь с таким распространенным методом устранения неполадок, как статистика ожидания. На эту главу опирается весь остальной материал книги.

Глава 3 «Производительность дисковой подсистемы» дает представление о том, как SQL Server взаимодействует с подсистемой ввода/вывода и как анализировать и оптимизировать ее производительность.

Глава 4 «Неэффективные запросы» демонстрирует несколько методов того, как выявлять неэффективные запросы и выбирать целевые объекты для оптимизации запросов.

Глава 5 «Хранение данных и настройка запросов» объясняет, как SQL Server работает с данными в базе данных, и дает рекомендации по настройке запросов.

Глава 6 «Загрузка процессора» рассматривает распространенные причины высокой загрузки ЦП и учит бороться с узкими местами на уровне процессора.

Глава 7 «Проблемы с оперативной памятью» посвящена настройкам SQL Server, относящимся к памяти, и описывает, как анализировать использование памяти и решать связанные с ней проблемы.

Глава 8 «Блокировки и конкурентный доступ» рассказывает о модели конкурентного доступа, используемой в SQL Server, и о том, как обращаться с блокировками в системе.

Глава 9 «Работа с базой данных tempdb и ее производительность» описывает использование системной базы данных tempdb и лучшие методики ее конфигурации. Кроме того, здесь содержатся рекомендации о том, как оптимально использовать вре́менные объекты и устранять распространенные узкие места в tempdb.

Глава 10 «Кратковременные блокировки» посвящена кратковременным блокировкам в SQL Server. Рассматриваются случаи, когда они вызывают проблемы, и способы решения этих проблем.

Глава 11 «Журнал транзакций» рассказывает о том, как устроен журнал транзак­ций в SQL Server и как избавиться от распространенных узких мест и ошибок в нем.

Глава 12 «Группы доступности AlwaysOn» рассматривает самую популярную технологию высокой доступности SQL Server и частые проблемы, с которыми можно столкнуться при ее использовании.

Глава 13 «Другие примечательные типы ожиданий» описывает несколько распространенных типов ожиданий, которые не рассматривались в прочих главах.

Глава 14 «Анализ схемы базы данных и индексов» дает ряд советов о том, как обнаруживать неэффективные участки структуры базы данных, а также оценивать использование индексов и их работоспособность.

Глава 15 «SQL Server в виртуализированных средах» рассказывает о передовых методах настройки виртуальных экземпляров SQL Server и устранении сопутствующих неполадок.

Глава 16 «SQL Server в облаке» описывает, как настраивать и использовать SQL Server в облачных виртуальных машинах. В ней также представлен обзор управляемых служб SQL Server, доступных в Microsoft Azure, Amazon Web Services (AWS) и Google Cloud Platform (GCP).

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

Наконец, приложение «Типы ожиданий» можно использовать как справочник по распространенным типам ожиданий и методам устранения основных неполадок для каждого типа.

Условные обозначения

В этой книге используются следующие условные обозначения.

Курсив

Курсивом выделены новые термины или важные понятия.

Моноширинныйшрифт

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

Полужирный моноширинный

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

Моноширинный курсив

Показывает текст, который следует заменить значениями, полученными от пользователя или из контекста.

Шрифт без засечек

Используется для обозначения URL, адресов электронной почты, названий кнопок и других элементов интерфейса, каталогов, имен и расширений файлов.

Совет или предложение.

Общее примечание.

Предупреждение или предостережение.

Использование исходного кода примеров

Вспомогательные материалы (примеры кода, упражнения и т.д.) доступны для загрузки по адресу https://github.com/aboutsqlserver/code.

В папке TroubleshootingScripts вы найдете записные книжки Azure Data Studio2 с использованными в книге сценариями диагностики и устранения неполадок. Примеры сценариев и приложений также есть в папке CompanionMaterials(Books).

Если не указано иное, сценарии будут работать во всех версиях SQL Server, начиная с SQL Server 2005. В старых версиях могут не поддерживаться некоторые столбцы динамических административных представлений, и вам придется закомментировать их.

Я планирую поддерживать и расширять библиотеку диагностических сценариев, так что проверяйте обновления в репозитории.

Если у вас возникнут вопросы технического характера по использованию примеров кода, направляйте их по электронной почте на адрес [email protected].

В общем случае все примеры кода из книги вы можете использовать в своих программах и в документации. Вам не нужно обращаться в издательство за разрешением, если вы не собираетесь воспроизводить существенные части программного кода. Если вы разрабатываете программу и используете в ней несколько фрагментов кода из книги, вам не нужно обращаться за разрешением. Но для продажи или распространения примеров из книги вам потребуется разрешение от издательства O’Reilly. Вы можете отвечать на вопросы, цитируя данную книгу или примеры из нее, но для включения существенных объемов программного кода из книги в документацию вашего продукта потребуется разрешение.

Мы рекомендуем, но не требуем добавлять ссылку на первоисточник при цитировании. Под ссылкой на первоисточник мы подразумеваем указание авторов, издательства и ISBN.

За получением разрешения на использование значительных объемов программного кода из книги обращайтесь по адресу [email protected].

Как связаться с автором

Вы можете написать мне по адресу [email protected], если у вас есть вопросы по книге или по SQL Server в целом. Я всегда рад помочь, чем смогу.

Также загляните в мой блог по адресу https://aboutsqlserver.com. Обещаю писать туда чаще, раз уж книга наконец вышла!

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

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

Кроме того, я чрезвычайно благодарен Эрланду Соммарскогу (Erland Sommarskog), Томасу Грозеру (Thomas Grohser) и Уве Рикену (UweRicken), которые проделали большую работу, рецензируя эту книгу. Благодаря им она стала значительно лучше и обрела окончательную форму.

Эрланд Соммарског работает с SQL Server уже тридцать лет и имеет статус Microsoft Data Platform MVP с 2001 года. Он работает независимым консультантом в Стокгольме (Швеция). Эрланд с удовольствием делится знаниями и опытом с сообществом. В свободное от SQL Server время он играет в бридж и путешествует.

Томас Грозер работает IT-специалистом более 35 лет и уже 12 лет является Microsoft Data Platform MVP. Он использует SQL Server с 1994 года и специа­лизируется на архитектуре и реализации высокозащищенных, доступных, восстанавливаемых и эффективных баз данных, а также их базовой инфраструктуры. В свободное время Томас любит делиться знаниями, накопленными за десятилетия, с сообществом SQL Server и платформ данных, выступая в группах пользователей и на конференциях по всему миру.

Уве Рикен — Microsoft Data Platform MVP и Microsoft Certified Master (SQL Server 2008) из Франкфурта (Германия). Уве работает с SQL Server с 2007 года и специализируется на внутреннем устройстве баз данных и индексировании, а также на архитектуре и разработке баз данных. Он регулярно выступает на конференциях и мероприятиях по SQL Server и ведет блог http://www.sqlmaster.de.

Спасибо вам, Эрланд, Томас и Уве! Работать с вами было очень круто!

Огромное спасибо моему коллеге Андре Фиано (Andre Fiano) — одному из самых знающих специалистов по инфраструктуре, которых я когда-либо встречал. Я многому научился у Андре, и он помог мне подготовить несколько наглядных примеров для этой книги.

И конечно же, я хотел бы поблагодарить всю команду O’Reilly и особенно Сару Грей (Sarah Grey), Элизабет Келли (Elizabeth Kelly), Кейт Дулли (Kate Dullea), Кристен Браун (Kristen Brown) и Одри Дойл (Audrey Doyle). Спасибо вам за то, что помогли привести мой английский в приемлемую форму и убедили меня, будто я умею рисовать диаграммы!

Эта книга посвящена SQL Server, и я хочу поблагодарить команду Microsoft за усердную работу над этим продуктом. Мне очень интересно, как он будет развиваться дальше.

И последнее, но не менее важное: отдельная благодарность — всем моим друзьям из сообщества #SQLFamily, которые поддерживали и подбадривали меня! Писать для такой замечательной аудитории — сплошное удовольствие!

Спасибо вам всем!

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

1 Название книги также изменилось. Теперь она называется «SQL Server Advanced Troubleshooting and Performance Tuning» («SQL Server. Наладка и оптимизация для профессионалов»). — Примеч. ред.

2 Azure Data Studio можно скачать с сайта Microsoft: https://oreil.ly/zwwCf.

Глава 2. Модель выполнения SQL Server и статистика ожидания

Невозможно устранять неполадки в SQL Server, не разбираясь в его модели выполнения. Чтобы обнаруживать узкие места в системе, нужно знать, как SQL Server выполняет задачи и управляет ресурсами. Этим темам посвящена данная глава.

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

SQL Server: высокоуровневая архитектура

Как известно, SQL Server — это очень сложный продукт, состоящий из десятков компонентов и подсистем, которые невозможно полноценно охватить в одной книге. В этом разделе приведем их обзор на самом общем уровне. Для удобства я разделю эти компоненты и подсистемы на несколько категорий, как показано на рис. 2.1. Давайте поговорим о них.

Уровень протокола обеспечивает связь между SQL Server и клиентскими приложениями. Этот уровень использует внутренний формат Tabular Data Stream (TDS, Поток табличных данных), чтобы передавать данные через сетевые протоколы, такие как TCP/IP или именованные каналы. Если клиентское приложение и SQL Server работают на одном компьютере, можно использовать другой протокол — Shared Memory (Общая память).

Рис. 2.1. Основные компоненты SQL Server