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

Управлять расширенными событиями 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 sessions, нажать клавишу ВВОД, ввести dir и затем нажать клавишу ВВОД, то можно просмотреть список сеансов, хранящихся в этом экземпляре. Также можно проверить, выполняется ли сеанс в данный момент (и если выполняется, то в течение какого периода), а также задан ли запуск сеанса вместе с запуском экземпляра.

Для просмотра событий, их предикатов и целей, связанных с сеансом, можно изменить имена каталогов на имя сеанса и затем просматривать либо папку событий, либо папку целей. Например, чтобы просмотреть события и их предикаты, связанные с сеансом отслеживания исправности системы по умолчанию, в папке PS SQLSERVER:\XEvent\ServerName\InstanceName\Sessions> введите команду 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

Средства расширенных событий