Поделиться через


Размещение tempdb в эфемерном хранилище для SQL Server на виртуальных машинах Azure

Область применения:SQL Server на виртуальной машине Azure

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

Обзор

Локальный диск SSD, подключенный к определенным виртуальным машинам Azure, предоставляет оптимизированное эфемерное хранилище — высокопроизводительный диск, физически подключенный к хост-компьютеру. Это эфемерное хранилище повторно создается при деактивации или перемещении виртуальной машины (например, когда она находится на техническом обслуживании или изменении размера). Независимо от того, что размещение системной базы данных SQL Server tempdb в эфемерном хранилище не представляет риска, так как база данных повторно создается при каждом перезапуске SQL Server.

Размещение tempdb на эфемерном диске рекомендуется, так как оптимизированная низкая задержка и высокий объем операций ввода-вывода в секунду может значительно повысить производительность рабочих нагрузок, которые сильно зависят от временных объектов, в том числе:

  • Запросы на обработку больших наборов записей
  • Создание и обслуживание индексов
  • Уровни изоляции версий строк
  • Временные таблицы
  • Триггеры

Однако, так как локальный диск SSD не является постоянным, его содержимое и разрешения теряются при остановке, освобождении виртуальной машины или перемещении на новый узел. Это требует тщательного планирования с учетом следующих соображений:

  • Перенастройка при перезапуске: tempdb необходимо перенастроить для использования эфемерного диска (обычно D:) при каждом перезапуске виртуальной машины. Для образов виртуальных машин SQL Server из Azure Marketplace этот процесс автоматизирован с помощью расширения агента IaaS SQL, что упрощает задачу управления, создавая папки и обрабатывая разрешения автоматически при запуске виртуальной машины. Однако если вы вручную установили SQL Server, необходимо настроить tempdb использование эфемерного диска вручную при каждом перезапуске виртуальной машины. Этот процесс можно автоматизировать с помощью PowerShell и планировщика задач.
  • Эксклюзивное использование: tempdb должно быть единственными данными, хранящимися на локальном ssd-диске. Постоянные данные , такие как файлы данных, файлы журналов или резервные копии, не должны размещаться в эфемерном хранилище, так как они будут потеряны при каждом перезапуске виртуальной машины или освобождении.

Предпосылки

Прежде чем настроить tempdb для использования эфемерного хранилища, вам потребуется следующее:

Замечание

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

Настройка tempdb для использования эфемерного хранилища

Во время периода обслуживания можно настроить SQL Server tempdb для использования эфемерного диска с помощью Transact-SQL. Рассмотрим следующее:

  • База tempb данных может иметь несколько файлов данных, таких как tempdb.mdf, tempdb2.mdи tempdb3.mdв зависимости от конфигурации SQL Server. Для MODIFY FILE необходимо выполнить команду, чтобы перенастроить tempdb его для использования эфемерного диска, напримерD:\SQLTemp.
  • Вы можете запросить sys.master_files (где database_id = 2) для идентификации всех tempdb файлов данных.
  1. Создайте папку на локальном ssd-диске, например D:\SQLTemp.

  2. Откройте SQL Server Management Studio (SSMS) и подключитесь к вашему экземпляру SQL Server.

  3. Выполните следующие команды T-SQL, чтобы настроить tempdb для использования эфемерного диска:

    USE MASTER
    GO
    
    ALTER DATABASE tempdb MODIFY FILE (NAME= tempdev, FILENAME= 'D:\SQLTemp\tempdb.mdf') -- to move data files
    GO
    
    ALTER DATABASE tempdb MODIFY FILE (name = templog, filename = 'D:\SQLTemp\templog.ldf') -- to move log files
    GO
    
  4. Перезапустите экземпляр SQL Server, чтобы применить изменения.

  5. Убедитесь, что tempdb используется временный диск, выполнив следующую команду T-SQL:

    USE tempdb
    GO
    
    EXEC sp_helpfile
    GO
    
  6. Проверьте папку на эфемерном диске, чтобы убедиться, что tempdb файлы созданы в папке D:\SQLTemp .

Автоматизация конфигурации tempdb при запуске

Так как содержимое на эфемерном диске теряется при перезапуске виртуальной машины, SQL Server не запускается, если tempdb папка не создана до запуска SQL Server. PowerShell можно использовать для автоматизации создания папки до запуска службы SQL Server.

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

  1. Настройка служб: Установите ручной запуск для служб SQL Server и агента SQL Server. Это предотвращает автоматическое запуск этих файлов до создания папки.
  2. Создайте скрипт PowerShell , который создает папку на эфемерном диске и запускает службы SQL Server и агента SQL.
  3. Запланируйте выполнение скрипта при запуске системы с помощью запланированной задачи Windows. Настройте задачу для запуска, независимо от того, вошел пользователь в систему или нет, используя учетную запись.

Более подробные сведения по каждому шагу приведены в следующих разделах.

Настройка режима запуска

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

  1. Откройте Диспетчер конфигурации SQL Server.

  2. Выберите службы SQL Server в левой области.

  3. Щелкните правой кнопкой мыши службу SQL Server и выберите "Свойства ", чтобы открыть окно "Свойства ".

  4. В окне "Свойства" выберите вкладку "Служба ".

  5. На вкладке "Служба" используйте раскрывающийся список, чтобы изменить режим запускана вручную:

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

  6. Чтобы сохранить изменения, нажмите кнопку "Применить" , а затем нажмите кнопку "ОК ", чтобы закрыть окно.

  7. Повторите эти действия для службы агента SQL Server .

Создание скрипта PowerShell

Создайте скрипт PowerShell, который:

  1. Создает папку на эфемерном диске.
  2. Запускает службу SQL Server.
  3. Запускает службу агента SQL.

Скопируйте и вставьте следующий скрипт, измените его по мере необходимости и сохраните его в виде файла PowerShell на диске ОС, например C:\Scripts\SQLStartup.ps1:

$SQLService="SQL Server (MSSQLSERVER)"
$SQLAgentService="SQL Server Agent (MSSQLSERVER)"
$tempfolder="D:\SQLTEMP"
if (!(test-path -path $tempfolder)) {
    New-Item -ItemType directory -Path $tempfolder
}
Start-Service $SQLService
Start-Service $SQLAgentService

Замечание

Сценарий предполагает, что экземпляр SQL Server является экземпляром по умолчанию. Если вы используете именованный экземпляр, замените MSSQLSERVER именем экземпляра SQL Server.

Создание запланированной задачи для запуска скрипта

Создайте запланированную задачу для запуска скрипта PowerShell при запуске. Для этого выполните следующие действия.

  1. Откройте планировщик задач из меню "Пуск".

  2. В разделе "Действия" выберите "Создать базовую задачу" , чтобы открыть окно "Создать задачу".

  3. На вкладке "Создание базовой задачи " введите имя задачи, например SQL-startupи укажите описание. Выберите Далее.

  4. На вкладке "Триггеры" установите флажок "При запуске компьютера " и нажмите кнопку "Далее".

  5. На вкладке "Действия" нажмите кнопку "Пуск программы " и нажмите кнопку "Далее".

  6. На вкладке "Пуск программы" введите и в поле powershell.exe введите путь к скрипту, например: -ExecutionPolicy Bypass -File C:\Scripts\SQLStartup.ps1

  7. Просмотрите сводку на вкладке "Готово " и нажмите кнопку "Готово ", чтобы создать задачу:

    Снимок экрана: планировщик задач, окно

Тестирование скрипта

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

Настройка расширения буферного пула

Вы можете дополнительно повысить производительность SQL Server, настроив расширение буферного пула для использования локального ssd-диска на виртуальных машинах Azure. Эта функция расширяет пул буферов в памяти с помощью файла на диске для повышения пропускной способности ввода-вывода для рабочих нагрузок с большим объемом памяти, превышающих доступную ОЗУ. Так как локальное ssd (эфемерное хранилище) обеспечивает низкую задержку и высокую производительность, это идеальное расположение для этого расширения.

При настройке расширения буферного пула укажите размер файла в килобайтах (КБ), мегабайтах (МБ) или гигабайтах (ГБ). Рекомендуемый размер обычно составляет от 4 до 8 раз, чем параметр [max_server_memory], настроенный для SQL Server, хотя для выпуска Standard максимальное значение ограничивается в 4 раза (выпуск Enterprise позволяет до 32 раз). Например, если для max_server_memory задано значение 16 ГБ, необходимо настроить расширение буферного пула размером 64–128 ГБ, в соответствии с требованиями выпуска SQL Server и рабочей нагрузки.

Если указанный путь существует на эфемерном диске (например D:\SQLTEMP\, для включения расширения буферного пула), выполните следующую команду T-SQL в SQL Server Management Studio (SSMS) после подключения к экземпляру:

ALTER SERVER CONFIGURATION
SET BUFFER POOL EXTENSION ON
( FILENAME = 'D:\SQLTEMP\ExtensionFile.BPE' , SIZE = <size> [ KB | MB | GB ] )