Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Администрирование в ИС.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
457.08 Кб
Скачать

Лекция 6 Службы и различные возможности sqlServer Работа с данными.

Более эффективное чтение данных.

Данные передаются между сервером и пользователем посредством нескольких транзакций. Приложение или пользователь инициирует задачу и БД передает ее на исполнение процессору запроса и возвращает результат. Процессор запросов обслуживает задачу, принимая, интерпретируя и исполняя инструкции на T-SQL. Например, когда в сеансе пользователя передается инструкция Select, будут исполнены шаги:

  1. Реляционная подсистема оптимизирует инструкцию и компилирует ее в план исполнения.

  2. Реляционная подсистема интерпретирует план исполнения и чтобы собрать необходимые данные, отправляет запросы подсистеме хранилища.

  3. Реляционная подсистема объединяет все данные, возвращенные подсистемой хранилища в окончательный результирующий набор.

Разделяемые сканирования

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

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

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

Параллелизм

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

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

Таблицы и индексы

Поскольку таблицы и индексы подвержены росту, SQLServer распределяет новые страницы группами по 8 страниц – экстенды. В SQLServer процессор запросов автоматически использует индексированное представление в тех случаях, когда это может оптимизировать план исполнения запроса.

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

Новые типы данных

По мере развития SQLServer в нем появляются новые типы данных:

  1. bigint – целочисленный 8-ми байтный тип,

  2. sql_variant – позволяет хранить значения данных различных типов,

  3. table – табличные данные, является полезным для оптимизации производительности.

Табличные переменные позволяют более эффективно использовать базу tempdb и работают быстрее, чем временные таблицы.

Индексы

Обращения к данным оптимизируются с помощью индексов. Поскольку требования к индексированию основываются на специфике использования данных, неправильный выбор индексов является одной из самых распространенных причин медленного исполнения запроса БД.

Типовая схема обслуживания индексов должна предусматривать периодические исследования условия использования индексов. Проверку схемы индексации и подстройку или оптимизацию индексов для текущих условий использования, отключая или создавая новый индекс.

Построение индексов

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

Ресурс

Команда

Опции

Описание

TempDB

create index

Sort in tempdb

Задействует распределяемое в tempdb дисковое пространство для сортировки при создании индекса. Способствует повышению пропускной способности ввода/вывода, если tempdb находится на нескольких дисках.

Память

sp_config

Index create memory

Определяет объем памяти, используемый при создании любых индексов.

СPU

sp_config

Max degree of parallelism

Ограничивает число процессоров, используемых в параллельных операциях.

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

Подсистема хранилища определяет требования к данным и создает отдельные потоки.

Дефрагментация индексов

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

Возможно использование команды DBCC SHOWCOUNTING, чтобы наблюдать и анализировать процесс фрагментации.

Если индекс фрагментирован, можно, используя команду DBCC INDEXDEFRUG, выполнить дефрагментацию индекса. Таким образом, можно поднять производительность операций чтения, за счет увеличения плотности заполнения страниц. Из-за чего во время выборки данных будет считываться меньшее их число.

Регистрация и регенерация.

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

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

Механизм восстановления (recovery) гарантирует, что база данных остается транзакционно непротиворечива до момента, пока она не станет доступна. Если БД транзакционно непротиворечива в ней будут отражены все завершенные операции, а любые незаконченные действия будут отменены.

Процесс восстановления приводит данные в совместимое с журналом транзакций состояние. Восстановление, выполняемое во время запуска SQLServer, называют restart/startup recovery. Восстановление из резервной копии, которое обычно необходимо из-за отказа дисков – media recovery.

Восстановление имеет 2 стадии:

  1. redo – повторяет все изменения до искомой метки в журнале транзакций.

  2. Undo – отменяет все действия, выполненные транзакциями, которые были активны на момент времени, где завершилась стадия повтора redo.

Для ускорения restart/recovery SQLServer использует контрольные точки, которая сбрасывает все измененные на момент ее прохождения страницы данных из буфферного кэш на диск.