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

Динамические административные представления

Не буду тратить много времени на эту тему, ограничусь лишь упоминанием. Вы можете ознакомиться с одной из моих предыдущих статей, в которой описана разнообразная информация, предоставляемая через динамические административные представления (DMV) в базе данных SQL Azure. Я просто хочу еще раз привлечь к ним ваше внимание, так как они незаменимы для понимания функционирования системы. В базе данных SQL Azure ничего не изменилось, значение динамических административных представлений по-прежнему трудно переоценить.

DBCC

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

Раньше существовало множество стандартных команд, которые прекрасно работали. Например, мы всегда могли запустить DBCC SHOW_STATISTICS, так как она работает напрямую с таблицами и структурами в базе данных, не затрагивая базу данных или сервер, на котором она размещена. Вспомните, до появления версии 12 в процессе работы с базой данных основное управление было сосредоточено на объектах внутри базы данных, а не собственно на базе данных. Поэтому вместо действительно важных сведений, которые нужно знать о системе (например, какая часть журнала транзакций используется), доступных через DBCC SQLPERF, вы получаете сообщение об ошибке

Msg 40518, Level 16, State 1, Line 3
DBCC command 'SQLPERF' is not supported in this version of SQL Server.

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

DBCC SQLPERF (LOGSPACE);

и получить результат, как на экране 1.

 

Результаты запуска DBCC SQLPERF(LOGSPACE)
Экран 1. Результаты запуска DBCC SQLPERF(LOGSPACE)

Нет, я не использую идентификатор GUID в качестве имен баз данных. Это базовая структура внутри экземпляра SQL Server, на котором размещены мои базы данных. Для нее не существует никакого способа преобразования. На самом деле это следствие выбранного мною уровня служб. Я не принадлежу к уровню Premium, поэтому приходится использовать сервер совместно с другими. Если бы я был на уровне Premium, то базы данных были бы представлены настоящими именами файлов. Если бы требовалось выяснить, какие из этих файлов связаны с моей базой данных, то я мог бы перейти на уровень Premium, а затем вернуться обратно.

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

Кроме того, имеется возможность полноценной проверки согласованности баз данных. Точно так же, как в случае использования другой команды DBCC, SQLPERF, при попытке выполнить CHECKDB выдается сообщение об ошибке. Однако можно применить команду к базе данных версии 12:

DBCC CHECKDB ();

В результате вы получите полную информацию о текущем состоянии базы данных. Впрочем, делать это нет никакой необходимости. Проверки согласованности баз данных SQL Azure — регулярная процедура для модели «платформа как услуга» (PaaS) Microsoft. В любом случае выходные данные должны иметь знакомый вид (см. экран 2).

 

Результат запуска DBCC CHECKDB()
Экран 2. Результат запуска DBCC CHECKDB()

Существуют другие команды DBCC, играющие жизненно важную роль в базе данных. Например, DBCC SHOW_STATISTICS. Вы можете выполнить следующую команду:

DBCC SHOW_STATISTICS (‘Person.Address’,
  ’PK_Address_AddressID’);

Ее результат представлен на экране 3, и это совершенно обычная информация о статистике таблицы.

 

Информация о статистике таблицы
Экран 3. Информация о статистике таблицы

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

Всегда полезно ознакомиться с документированной поддержкой T-SQL (https://msdn.microsoft.com/library/azure/ee336281.aspx?f=255&MSPPError=-2147217396) для базы данных SQL Azure. В списке в основном перечислены не поддерживаемые, а отсутствующие возможности. И есть некоторые возможности, которых вам будет не хватать.

Неподдерживаемые инструкции

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

DBCC DROPCLEANBUFFERS ();

Даже в базе данных SQL Azure версии 12 вы получите следующее сообщение об ошибке:

Msg 40518, Level 16, State 1, Line 13
DBCC command 'DROPCLEANBUFFERS'
   is not supported in this version
   of SQL Server.

На самом деле меня это устраивает. Обычно я не слишком беспокоюсь о времени, необходимом для загрузки данных в кэш или компиляции планов для большинства загрузок данных. Но что произойдет, если при компиляции планов вы имеете дело с неудачным процессом оптимизации плана (parameter sniffing) и решили выполнить довольно обыкновенный запрос:

DBCC FREEPROCCACHE ();

Вы получаете еще одно сообщение об ошибке:

Msg 2571, Level 14, State 9, Line 14
User 'dbo' does not have permission
   to run DBCC freeproccache.

Это сообщение означает, что вы не можете даже совершить правильное действие и выполнить такой запрос:

DECLARE @PlanHandle VARBINARY(64)

SELECT @PlanHandle = deqs.plan_handle
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text
(deqs.sql_handle) AS dest
WHERE dest.text LIKE 'CREATE
PROCEDURE dbo.MergeSalesOrderDetail%'

IF @PlanHandle IS NOT NULL
    BEGIN
        DBCC FREEPROCCACHE
        (@PlanHandle);
    END
GO

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

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