В предыдущих двух статьях мы рассмотрели аргументы в пользу перехода на Microsoft SQL Server 2016 и некоторые подготовительные задачи для обновления, а также задачи, которые необходимо выполнить в процессе обновления. Теперь перейдем к задачам, выполняемым после обновления.
По завершении обновления
После того как переход на SQL Server 2016 завершен, необходимо выполнить последовательность шагов, дабы убедиться, что база данных готова к передаче конечным пользователям для дальнейшего тестирования. Рассмотрим этот этап подробнее.
Первое, что нам предстоит, — это создание резервных копий. Немедленно. Прежде, чем предпринимать любые другие действия. Ведь вы администратор базы данных, и резервное копирование должно быть вашей привычкой. Вы должны получить резервную копию перед началом любого обновления или миграции, и настоятельно рекомендуется сделать это сейчас и повторно перед передачей базы данных конечным пользователям. Кроме того, следует сохранить все выходные данные из перечисленных здесь элементов. Они пригодятся, если что-то пойдет не так. И не забудьте проверить корректность резервных копий (см. материал thomaslarock.com/2010/05/statistical-sampling-for-verifying-database-backups/).
DBCC CHECKDB
После миграции или обновления необходимо выполнить следующую инструкцию (дополнительная информация приведена в статье по адресу: msdn.microsoft.com/en-us/library/ms176064(v=sql.120).aspx):
DBCC CHECKDB WITH DATA_PURITY;
Эта инструкция позволит проверить ваши данные на предмет значений, которые более недействительны для типа данных столбца. Предполагается, что для баз данных, созданных в SQL Server 2005 и более новых версиях, проверка DATA_PURITY выполняется автоматически с помощью обычной команды CHECKDB. Иная ситуация с версиями, предшествующими SQL Server 2005 (они еще эксплуатируются), поэтому данный шаг еще более важен.
Но что делать с базой данных, созданной в SQL Server 2000, перенесенной в экземпляр SQL Server 2008 и оставленной в режиме обратной совместимости SQL Server 2000 (номер режима совместимости 80)? Исходить из того, что проверка DATA_PURITY выполнена? Совет: в любом случае запустите ее самостоятельно. Так вы в любом случае будете уверены в том, что проверка выполнена.
Кроме того, следует отметить, что проверки целостности столбца не выполняются, когда используется параметр PHYSICAL_ONLY.
DBCC UPDATEUSAGE
Эта команда не так важна, как DATA_PURITY, но все же принимает участие в любом процессе миграции или обновления:
DBCC UPDATEUSAGE (db_name);
С помощью этой команды (дополнительная информация приведена в статье по адресу: msdn.microsoft.com/en-us/library/ms188414(v=sql.120).aspx) можно исправить любые неточности в подсчете страниц, возникающие из-за неверных результатов, возвращенных хранимой процедурой sp_spaceused. Лучше всего выполнить эту команду сразу, но помните, что для ее выполнения требуется некоторое время, в зависимости от размера таблицы или базы данных. Предпочтительно запускать ее регулярно вследствие одной из перечисленных ниже причин.
- Есть подозрения, что вы видите неверные значения, возвращенные для sp_spaceused.
- Ваша база данных содержит много инструкций DDL (CREATE, ALTER или DROP).
Обновление статистики
Этот шаг нельзя пропускать. Он просто обязателен для любой миграции или обновления:
USE db_name; GO EXEC sp_updatestats;
Приведенная команда обновит статистику для всех таблиц в базе данных. Она выдает команду UPDATE STATISTICS, которая заслуживает упоминания, так как ее полезно использовать с параметром FULLSCAN. Я предпочитаю проявить излишнюю осторожность, чтобы впоследствии не жалеть об опрометчивости, поэтому выполняю примерно такую команду:
USE db_name; GO EXEC sp_MSforeachtable @command1='UPDATE STATISTICS? WITH FULLSCAN’;
Важно не забыть об обновлении статистики после модернизации. Без этого скорость выполнения запросов может уменьшиться, когда вы приступите к тестированию, и в итоге вы впустую потратите время, пытаясь устранить возможные узкие места.
В SQL Server 2016 также появился новый модуль оценки мощности, или количества элементов в наборе, Cardinality Estimator (CE). Оценка планов оптимизатором запросов зависит от точности статистических данных, поэтому, прежде чем начать тестирование, необходимо собрать как можно более точные статистические данные. Позаботьтесь о статистических данных заблаговременно, чтобы не беспокоиться о них впоследствии.
Обновление определений представления
Верьте или нет, но некоторые пользователи строят представление, распространяющееся на другую базу данных на том же экземпляре. Порой, как ни удивительно, эти представления охватывают и связанный сервер. И невероятный шаг: иногда эти представления создаются с помощью синтаксиса SELECT *.
Какова вероятность, что подобный программный код существует в вашей компании? Такое случается. И если имеется некорректный программный код сверх представлений, охватывающих другие базы данных (или представлений чего-то еще, спроектированного каким-нибудь фанатом представлений), вам следует использовать хранимую процедуру sp_refreshview для обновления этих представлений.
Проверка уровней совместимости
Если вам случалось выполнять обновления SQL Server, то вы, вероятно, заметили, что уровень совместимости не распространяется на новейшую версию после завершения миграции. Необходимо самостоятельно вручную назначить уровень совместимости. В SQL Server 2016 это важнее, чем в предыдущих версиях, из-за нового модуля CE.
Рекомендуется обновить каждую базу данных на экземпляре SQL Server 2016 до режима совместимости 130, а затем выполнить тщательное тестирование. Предполагается, что известны эталонные уровни производительности для важнейших запросов до миграции, и вы можете убедиться, что новый модуль CE не работает против вас.
Проверка количества объектов
Помните результаты прошлых подсчетов количества объектов, таких как таблицы и хранимые процедуры? Выполните подсчеты заново. Убедитесь, что количество объектов такое же, как до обновления и миграции. Не забывайте о принципе обновлений SQL Server: не потерять ни единой таблицы!
Проверка настроек
В процессе подготовки к обновлению следует собрать сведения о приложениях собственной разработки и сторонних поставщиков, использующих сервер базы данных. Также следует собрать информацию о конкретных настройках, применяемых к операционной системе сервера, экземпляру базы данных и самой базе данных. После этого необходимо изучить эти данные и убедиться, что настройки применены к новому серверу.
Обновления — неотъемлемая часть любого цикла разработки. Вероятность успешного обновления увеличивается пропорционально количеству усилий по планированию и подготовке, затраченных на организацию процесса обновления. Возможно, вы уже продумали обновление до SQL Server 2016 или только намереваетесь сделать это (кстати, время пришло). Тогда вы можете воспользоваться данной серией статей, чтобы составить контрольный список задач перед модернизацией, во время модернизации и после нее. Убежден, что это позволит вам избежать многих проблем.