В MS SQL Server
2014 после выхода SP2 появилась
новая команда DBCC,
команда
DBCC CLONEDATABASE
Данная команда создает новую базу данных с содержанием схему
всех объектов и статистики исходной базы данных.
Там же описано более подробное назначение данной команды:
«Команда поддержки Майкрософт может вас
попросить создать клон вашей базы данных данной команды для исследования проблемы
производительности связанная с оптимизатором запросов.»
И там же примечание: что созданную
данной командой базу данных не использовать как продукционную базу данных, а использовать
для диагностических целей.
Что делает данная команда по
шагам:
- создает новую базу данных
согласно базе данных model(размер
файлов и их приращение)
- создает внутренний моментальный
снимок исходной базы данных
- копируется системные и
пользовательские объекты из исходной базы данных в новую базу данных
- Копирует данные статистики из исходной базы данных без самих
данных в базе (в документации указана статистика индексов, но на самом деле всю
статистику в базе).
Для последнего пункта скорее
всего и создавалась данная команда, скопировать статистику в базе без самих
данных в базе данных и уже по этой статистике анализировать поведение
проблемных запросов.
Вообще, я думаю, причиной создания
данной команды, наверно, стало много обращений в поддержку Майкрософт, почему запрос
выполнялся хорошо, а потом плохо, а для объяснения и проверки поведения
оптимизатора запросов не хватало информации по статистике, поэтому поддержка
Майкрософт попросила у разработчиков данную команду, в итоге теперь для анализа
нужно отдавать только клон бд без
данных, что намного меньше в объеме.
Синтаксис команды:
Он довольно простой
DBCC CLONEDATABASE (source_database_name, target_database_name)
Кто сможет выполнить данную
команду - пользователи сервера с правами sysadmins.
Пример выполнения:
Есть база данных db1, в ней таблица с данными,
на таблице созданы 2 индекса, а также дополнительная статистика без индекса.
После выполнения команды
DBCC CLONEDATABASE(db1,db1_clone)
Создается база данных «db1_clone» в статусе Read-Only
.
Размещение файлов, там же где и
исходная
DB_Name physical_name
db1 C:\data\db1.mdf
db1 C:\data\db1_log.ldf
db1_clone C:\data\db1_1992956780.mdf
db1_clone C:\data\db1_log_1697443590.ldf
к файлам дописывается случайное
числовое значение.
А вот физически параметры файлов
бд взяты от model
А теперь к внутренностям
клонированной базы данных:
В ней есть все объекты исходной
базы данных:
Но без данных:
Но зато осталась дата обновления статистики
и ее распределение в таблице:
Что и нужно для оптимизатора
запросов при построение плана запроса.
Кстати такой командой можно
выполнять несколько раз в день, а потом анализировать, как меняется
распределение данных в течение рабочего дня и как после этого меняется план
запроса на вашей промышленной системе.
Еще раз, данная команда
появилась в MS SQL
2014 SP2, в Microsoft SQL
Server 2016 (RTM) - 13.0.1601.5 (X64)
данной команды пока нет, при
выполнении будет ошибка
Msg 2526,
Level 16, State 3, Line 1
Incorrect
DBCC statement. Check the documentation for the correct DBCC syntax and
options.
Так же замечание, команда может не
всегда выполняться, есть ошибки, как описаны здесь
, либо как у меня на одном сервере просто ошибка, хотя точно такую же базу
данных я использовал выше.
Database
cloning for 'DB1' has started with target as 'DB1_clone'.
Msg 213,
Level 16, State 1, Line 1
Column
name or number of supplied values does not match table definition.
А так неплохое средство для
диагностики поведения запросов на промышленной среде со временем и от
зависимости данных в таблицах. В MS SQL 2016 есть QUERY STORE,
которое так же помогает отслеживает поведение запросов в течение рабочего дня,
но это уже другая история…
Комментариев нет :
Отправить комментарий