Использование поставщика PowerShell для расширенных событий
Область применения: SQL Server База данных SQL Azure
Вы можете управлять расширенными событиями 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
Средства расширенных событий