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

Эта публикация открывает цикл статей, которые вместе составят руководство по переходу на Microsoft SQL Server 2016. Однако помните, что не существует двух одинаковых процессов модернизации. То, что кто-то потерпел неудачу (или, напротив, добился успеха) не означает, что вы получите такой же результат.

Зачем обновлять

«Зачем обновлять?» — первый вопрос, который приходится слышать на начальном этапе каждого проекта обновления. Кто-то всегда хочет понять, зачем нужно вносить изменения в исправную и безупречно функционирующую систему.

Ниже приводится краткий список причин, побуждающих пользователей к переходу на SQL Server 2016.

1. Новые функции SQL Server 2016

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

  • постоянное шифрование Always Encrypted (https://msdn.microsoft.com/en-us/library/mt163865.aspx);
  • динамическое маскирование данных Dynamic Data Masking (https://msdn.microsoft.com/en-us/library/mt130841.aspx);
  • защита на уровне строки Row Level Security (https://msdn.microsoft.com/en-us/library/dn765131.aspx);
  • расширяемая база данных Stretch Database (https://msdn.microsoft.com/en-us/library/dn935011.aspx);
  • временные таблицы (https://msdn.microsoft.com/en-us/library/dn935015.aspx);
  • автоматическая поддержка программной реализации технологии NUMA (https://blogs.msdn.microsoft.com/psssql/2016/03/30/sql-2016-it-just-runs-faster-automatic-soft-numa/);
  • • хранение запросов (https://msdn.microsoft.com/en-us/library/dn817826.aspx).

Кроме того, усовершенствованы функции, появившиеся в предыдущих версиях:

  • выполнение запросов OLTP в памяти In-Memory OLTP (https://msdn.microsoft.com/en-us/library/dn133186.aspx);
  • группы постоянной доступности Always On (https://msdn.microsoft.com/en-us/library/hh510230.aspx);
  • обновляемый некластери­зованный столбчатый индекс columnstore (https://msdn.microsoft.com/en-us/library/gg492088.aspx);
  • обновленная версия DBCC CHECKDB (https://blogs.msdn.microsoft.com/psssql/2016/02/25/sql-2016-it-just-runs-faster-dbcc-scales-7x-better/).

Полный список усовершенствованных компонентов SQL Server 2016 можно найти в статье SQL Server 2016: It Just Runs Faster (https://thomaslarock.com/2016/06/sql-server-2016-just-runs-faster/).

2. Условия поддержки

Срок завершения поддержки прежних версий SQL Server приближается (https://support.microsoft.com/en-us/lifecycle/search? alpha=SQL%2520 Server). Конечно, можно приобрести расширенную поддержку, но ее стоимость велика. Действительно, компания Microsoft продлила период поддержки Windows Server 2008 и SQL Server 2008 (http://www.computerworld.com/article/3150245/enterprise-applications/why-microsoft-added-6-years-to-windows-server-support.html), но это не означает, что дальнейшее их использование целесообразно.

3. Требования поставщиков программного обеспечения

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

4. Стандарты компании и отрасли

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

5. Масштабируемость

За прошедшее десятилетие в ядро SQL Server было внесено много улучшений, направленных на решение проблемы масштабируемости. Выше перечислено несколько из них (columnstore, группы доступности, OLTP в памяти), но собственно ядро модернизировано и дополнено, в частности, новыми методами прогнозирования числа строк в запросе (https://msdn.microsoft.com/en-us/library/dn600374.aspx), чтобы можно было строить оптимальные планы на основе распределения ваших данных. Переход на SQL Server 2016 обеспечивает более широкие возможности масштабирования по сравнению с предыдущими версиями.

Итак, какие выводы мы можем сделать из всего изложенного? Если какой-либо из приведенных аргументов окажется достаточно убедительным, чтобы вы задумались о необходимости обновления, то пора начинать готовить план проекта. Самый простой план состоит из трех шагов:

  1. Задачи, связанные с подготовкой к обновлению.
  2. Задачи обновления.
  3. Задачи, выполняемые после обновления.

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

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

1) Спланируйте этапы.

Возможен прямой переход к SQL Server 2016 со следующих версий:

  • SQL Server 2014;
  • SQL Server 2012 с пакетом обновления 1 (SP1);
  • SQL Server 2008 R2 с пакетом обновления 2 (SP2);
  • SQL Server 2008 с пакетом обновления 3 (SP3).

Пользователям SQL Server 2005 и более ранних версий следует перейти на промежуточную версию перед обновлением до SQL Server 2016.

2) Ознакомьтесь с изменениями в условиях лицензирования.

Изучите изменения в условиях лицензирования, которые, возможно, произошли в SQL Server 2016 по сравнению с вашей текущей версией. В SQL Server 2012 лицензирование производится по ядрам, а не разъемам процессора. Однако в редакции SQL Server 2016 Standard Edition допускается также лицензирование типа Server + CAL. Вследствие перехода от разъема процессора к ядру варианты обновления «на месте» могут сопровождаться значительным повышением стоимости. Необходимо тщательно изучить особенности лицензирования SQL Server 2016 (https://www.microsoft.com/en-us/sql-server/sql-server-2016-pricing).

Также достойно упоминания, что SQL Server 2016 с пакетом обновления 1 (SP1) располагает многими функциями (https://blogs.msdn.microsoft.com/sqlreleaseservices/sql-server-2016-service-pack-1-sp1-released/), ранее предоставлявшимися лишь в корпоративной редакции, в том числе группами доступности, сжатием данных, секционированием, индексом columnstore и т. д. Прежде чем начинать проект модернизации, оцените расходы на лицензирование и изучите список функций, доступных теперь в стандартной редакции продукта.

3) Рассмотрите все варианты.

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

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

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

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

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

4) Соберите данные инвентаризации.

Также полезно собрать информацию об экземплярах серверов и баз данных, затронутых обновлением. Существует много инструментов для сбора таких сведений, в частности Microsoft Assessment and Planning (MAP) Toolkit (https://www.microsoft.com/en-gb/download/details.aspx?id=7826) и SQL Power Doc (https://sqlpowerdoc.codeplex.com/), а также инструменты независимых компаний.

5) Познакомьтесь с мастером Data Migration Assistant.

В прошлом известный как помощник по обновлению Microsoft SQL Server, Data Migration Assistant (DMA), описанный в документе по адресу: www.microsoft.com/en-us/download/details.aspx?id=53595, поможет обнаружить любые критические изменения, а также устаревшие функции. Вы можете воспользоваться DMA для поиска проблем, которые необходимо устранить перед переходом на другую версию SQL Server. DMA также может помочь идентифицировать части базы данных, которые выиграют от новых функций SQL Server 2016. Кроме того, DMA обеспечит перенос данных.

6) Узнайте об устаревших функциях.

С выходом каждой новой версии SQL Server некоторые функции отмечаются как устаревшие. Это не означает, что данные функции удалены. Устаревшие функции, возможно, будут удалены в следующей версии, и их не следует применять в новых разработках. Список устаревших функциональных возможностей компонента Database Engine для SQL Server 2016 опубликован в документе по адресу: msdn.microsoft.com/en-us/library/ms144262.aspx.

7) Идентифицируйте функции, поддержка которых прекращена.

Начиная с версии SQL Server 2016 компания Microsoft начала публиковать список функций, поддержка которых прекращена. Это означает, что данные функции полностью удалены. Спиcок опубликован в документе по адресу: msdn.microsoft.com/en-us/library/ms144262.aspx. Следует ознакомиться с этим списком и убедиться, что ваши приложения не зависят от функций, которые после обновления исчезнут.

8) Узнайте о критических изменениях.

Известно ли вам, что Microsoft публикует список критических изменений (https://msdn.microsoft.com/en-us/library/ms143179.aspx) для каждой версии SQL Server? Что ж, теперь вы это знаете. Необходимо внимательно ознакомиться с ним. Хочется верить, что вы получите предупреждения о многих критических изменениях от DMA, но на самом деле DMA не успевает за электронной документацией. В электронной документации могут быть сведения, которых нет в проверочном списке DMA, поэтому нужно ознакомиться с соответствующим разделом.

9) Получите информацию об изменениях поведения.

В предыдущих версиях SQL Server был опубликован список изменений поведения для компонента Database Engine. Аналогично критическим изменениям, изменения поведения могут оказать неблагоприятное влияние. Их полезно изучить, и они часто не отражаются в DMA, так как не обязательно ведут к проблемам; это просто изменения, которые потенциально могут стать причиной проблем.

Однако я не смог найти раздел электронной документации по SQL Server 2016 для компонента Database Engine. Есть страницы для Analysis Services, Integration Services и Reporting Services. Подозреваю, что такой материал для компонента Database Engine появится по мере распознавания проблем. Вы всегда можете просмотреть предыдущие версии на странице SQL Server 2012 (https://msdn.microsoft.com/en-us/library/cc707785%2528v=sql.110%2529.aspx) и воспользоваться ею как отправной точкой.

10) Прочитайте заметки об изменениях по отношению к предыдущей версии.

Выделите несколько минут на то, чтобы прочитать заметки об изменениях по отношению к предыдущей версии (https://docs.microsoft.com/en-us/sql/sql-server/sql-server-2016-release-notes). Нет, они не такие интересные, как заметки о выпуске приложений для телефона, но все же могут быть полезны. Желательно иметь как можно более полную картину новой версии, если что-то будет работать не так, как предполагалось. Кроме того, в заметках об изменениях по отношению к предыдущей версии содержатся подробности, которых вы не найдете в других местах.

11) Выясните новые требования среды.

На странице https://msdn.microsoft.com/en-us/library/ms143506.aspx приведены минимальные требования для установки SQL Server 2016. Если ваши серверы не соответствуют этим требованиям, то, скорее всего, вы не собираетесь выполнять обновление в обозримом будущем. Но если вы готовитесь к обновлению, то, вероятно, пора обновить и аппаратные средства. Можно даже подумать о переходе в виртуальную среду (если это уже не сделано), что также сопряжено с определенными требованиями к аппаратным средствам.

Однако настоящая причина для обновления аппаратных средств — новые функциональные возможности. Предположим, вы обдумываете переход на SQL Server 2016, чтобы воспользоваться преимуществами технологии Hekaton (https://msdn.microsoft.com/en-us/library/dn170449.aspx). Учитывая, как много новшеств в SQL Server 2016, вам придется проделать дополнительную работу, чтобы определить необходимые аппаратные средства. В противном случае вам не удастся воспользоваться многими новыми функциями.

12) Определите базовые показатели производительности.

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

13) Сравните нагрузки от приложений.

Вы можете использовать функцию распределенного воспроизведения (https://msdn.microsoft.com/en-us/

library/ff878183.aspx), чтобы извлечь нагрузку от приложений с исходного сервера и воспроизвести ее на целевом сервере. Это поможет оценить результаты обновления SQL Server, сравнивая производительность приложений на двух системах. Распределенное воспроизведение наиболее полезно в случаях с высоким параллелизмом, когда нельзя достоверно моделировать нагрузку от приложений на одном клиенте.

Database Experimentation Assistant (https://www.microsoft.com/en-us/download/details.aspx? id=54090) — новый инструмент, на сегодня представленный ознакомительной технической версией. В нем используется распределенное воспроизведение наряду со службами R, чтобы предоставить пользователю возможность автоматического получения показателей тестирования при работе приложений. Статистический анализ нагрузок от приложений позволяет более уверенно выполнять переход к новым версиям SQL Server.

14) Протестируйте характеристики сервера.

С помощью таких инструментов, как iPerf (https://iperf.fr/) и DskSpd https://github.com/Microsoft/diskspd), проверьте соответствие производительности сети и дисков сервера ожидаемым показателям перед установкой SQL Server. Эти инструменты помогут обнаружить потенциальные проблемы в настройках, связанные с сетью и дисками.

15) Создайте резервные копии.

Прежде чем приступить к обновлению, не забудьте сделать резервные копии баз данных, файлов приложений и операционной системы сервера. Иногда можно задействовать моментальный снимок (или контрольную точку) виртуальной машины, чтобы упростить процесс. Рекомендую применять тройное правило к резервному копированию компьютера (https://www.hanselman.com/blog/TheComputerBackupRuleOfThree.aspx).

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

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