Использование поставщика PowerShell для расширенных событий

Область применения:SQL ServerAzure SQL Database

Вы можете управлять расширенными событиями SQL Server с помощью поставщика SQL Server PowerShell. Вложенная папка XEvent находится на диске SQLSERVER. Получить доступ к папке можно одним из следующих способов.

  • В командной строке введите команду sqlpsи нажмите клавишу ВВОД. Введите cd xeventи нажмите клавишу ВВОД. Из этого расположения с помощью команд cd и dir (или командлетов Set-Location и Get-Childitem ) можно перейти к нужному серверу и экземпляру по его имени.

  • В обозревателе объектов разверните узел имени экземпляра, разверните узел Управление, щелкните правой кнопкой мыши Расширенные событияи выберите команду Запустить PowerShell. Оболочка PowerShell будет запущена в следующем пути:

    PS SQLSERVER:\XEvent\ServerName InstanceName\>

    Заметка

    Запустить PowerShell можно из любого узла в категории Расширенные события. Например, можно щелкнуть правой кнопкой мыши Сеансы, а затем выбрать команду Запустить PowerShell. При этом оболочка PowerShell будет запущена на один уровень ниже, в папке «Сеансы».

В дереве папки XEvent можно просматривать существующие сеансы расширенных событий и связанные с ними события, цели и предикаты. Например, в пути PS SQLSERVER:\XEvent\ServerName InstanceName\>, если вы вводите сеансы cd, нажмите клавишу ВВОД, введите dir и нажмите клавишу ВВОД, можно просмотреть список сеансов, хранящихся в этом экземпляре. Также можно проверить, выполняется ли сеанс в данный момент (и если выполняется, то в течение какого периода), а также задан ли запуск сеанса вместе с запуском экземпляра.

Для просмотра событий, их предикатов и целей, связанных с сеансом, можно изменить имена каталогов на имя сеанса и затем просматривать либо папку событий, либо папку целей. Например, чтобы просмотреть события и их предикаты, связанные с сеансом работоспособности системы по умолчанию, из PS SQLSERVER:\XEvent\ServerName InstanceName\\Session> path, введите cd system_health\events, нажмите клавишу ВВОД, введите dir и нажмите клавишу ВВОД.

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

Примеры

В приведенных далее примерах обратите внимание на следующие моменты.

  • Скрипты должны выполняться из командной строки PS SQLSERVER:\> (доступно путем ввода sqlps в командной строке).

  • Скрипты используют экземпляр SQL Server по умолчанию.

  • Скрипты должны сохраняться с расширением PS1.

  • Политика выполнения PowerShell должна разрешать выполнения скриптов. Чтобы задать политику выполнения, воспользуйтесь командлетом Set-Executionpolicy . (Для получения дополнительных сведений введите get-help set-executionpolicy -detailedи нажмите клавишу ВВОД.)

Следующий скрипт создает новый сеанс с именем «TestSession».

#Script for creating a session.  
cd XEvent  
$h = hostname  
cd $h  
  
#Use the default instance.  
$store = dir | where {$_.DisplayName -ieq 'default'}  
$session = new-object Microsoft.SqlServer.Management.XEvent.Session -argumentlist $store, "TestSession"  
$event = $session.AddEvent("sqlserver.file_written")  
$event.AddAction("package0.callstack")  
$session.Create()  

Следующий скрипт добавляет цель «Кольцевой буфер» в сеанс, созданный в предыдущем примере. (В этом примере показано использование Метод alter . Помните, что вы можете добавить целевой объект при первом создании сеанса.)

#Script to alter a session.  
cd XEvent  
$h = hostname  
cd $h  
cd DEFAULT\Sessions  
  
#Used to find the specified session.  
$session = dir|where {$_.Name -eq 'TestSession'}  
  
#Add the ring buffer target and call the Alter method.  
$session.AddTarget("package0.ring_buffer")  
$session.Alter()  

Следующий скрипт создает новый сеанс, в котором используется выражение предиката. В данном случае сеанс собирает сведения о времени записи в файл c:\temp.log (с помощью события sqlserver.file_written).

#Script for creating a session.  
cd XEvent  
$h = hostname  
cd $h  
  
#Use the default instance.  
$store = dir | where {$_.DisplayName -ieq 'default'}  
$session = new-object Microsoft.SqlServer.Management.XEvent.Session -argumentlist $store, "TestSession2"  
$event = $session.AddEvent("sqlserver.file_written")  
  
#Construct a predicate "equal_i_unicode_string(path, N'c:\temp.log')".  
$column = $store.SqlServerPackage.EventInfoSet["file_written"].DataEventColumnInfoSet["path"]  
$operand = new-object Microsoft.SqlServer.Management.XEvent.PredOperand -argumentlist $column  
$value = new-object Microsoft.SqlServer.Management.XEvent.PredValue -argumentlist "c:\temp.log"  
$compare = $store.Package0Package.PredCompareInfoSet["equal_i_unicode_string"]  
$predicate = new-object Microsoft.SqlServer.Management.XEvent.PredFunctionExpr -argumentlist $compare, $operand, $value  
$event.SetPredicate($predicate)  
$session.Create()  

Безопасность

Чтобы создать, изменить или удалить сеанс расширенных событий, требуется разрешение ALTER ANY EVENT SESSION.

См. также

SQL Server PowerShell
Использование сеанса system_health
Средства расширенных событий