Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Статистика выполнения хп через event session  [new]
RIBor
Member

Откуда:
Сообщений: 40
Приветствую уважаемое сообщество!
Появилась задача отследить использование хп.
Есть сервер:
Microsoft SQL Server 2008 R2 (SP3) - 10.50.6220.0 (X64)
Mar 19 2015 12:32:14
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)

Создал event session
create event session statsp on server 
add event sqlserver.sp_statement_completed (
	action (
		sqlserver.client_app_name, 
		sqlserver.client_hostname,
		sqlserver.database_id,
		sqlserver.session_id,
		sqlserver.username)
	where 
		object_type = 8272 
		and source_database_id = 11
		and sqlserver.is_system = 0
) 
add target package0.asynchronous_file_target (
  set filename = N'j:\DBA_Audit\statsp.xel',
  metadatafile = N'j:\DBA_Audit\statsp.xem'
  );

Запустил. Параллельно работал профайлер.
За пару минут конечный файл вырос до 40Мб. Это мне показалось неправильным. Остановил, загрузил данные в таблицу.
Оказалось, что для каждой процедуры в файл пишется огромное количество "строк", например, для одной записалось более 27000 "строк".
Отсюда и вопрос: это в порядке вещей или я где-то накосячил?
22 май 18, 11:35    [21428209]     Ответить | Цитировать Сообщить модератору
 Re: Статистика выполнения хп через event session  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
RIBor
sp_statement_completed
Это отслеживание выполнения инструкций в ХП, а не вызова ХП.
22 май 18, 11:42    [21428240]     Ответить | Цитировать Сообщить модератору
 Re: Статистика выполнения хп через event session  [new]
RIBor
Member

Откуда:
Сообщений: 40
invm
RIBor
sp_statement_completed
Это отслеживание выполнения инструкций в ХП, а не вызова ХП.


Правильно будет использовать "rpc_completed"?
22 май 18, 11:48    [21428264]     Ответить | Цитировать Сообщить модератору
 Re: Статистика выполнения хп через event session  [new]
aleksrov
Member

Откуда:
Сообщений: 948
RIBor,

module_end

https://www.sqlskills.com/blogs/jonathan/an-xevent-a-day-20-of-31-mapping-extended-events-to-sql-trace/
22 май 18, 11:54    [21428274]     Ответить | Цитировать Сообщить модератору
 Re: Статистика выполнения хп через event session  [new]
RIBor
Member

Откуда:
Сообщений: 40
aleksrov,
Спасибо!
22 май 18, 11:57    [21428285]     Ответить | Цитировать Сообщить модератору
 Re: Статистика выполнения хп через event session  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
CREATE EVENT SESSION [EXEC_SP] ON SERVER 
ADD EVENT sqlserver.sp_statement_completed(SET collect_object_name=(1), 
     collect_statement=(0)
    ACTION(sqlserver.client_app_name, 
     sqlserver.client_hostname,
     sqlserver.database_id,
     sqlserver.database_name,
     sqlserver.username)
    WHERE (([object_type]=(8272)) 
     AND ([source_database_id]=(ВАША БД)))) 

GO
22 май 18, 11:58    [21428287]     Ответить | Цитировать Сообщить модератору
 Re: Статистика выполнения хп через event session  [new]
RIBor
Member

Откуда:
Сообщений: 40
TaPaK,

в 2008 нет такого

collect_object_name=(1), collect_statement=(0)
22 май 18, 12:00    [21428294]     Ответить | Цитировать Сообщить модератору
 Re: Статистика выполнения хп через event session  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
для расшифровки

[object_type]=(8272)
https://docs.microsoft.com/en-us/sql/relational-databases/event-classes/objecttype-trace-event-column?view=sql-server-2017
22 май 18, 12:00    [21428295]     Ответить | Цитировать Сообщить модератору
 Re: Статистика выполнения хп через event session  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
RIBor
TaPaK,

в 2008 нет такого

collect_object_name=(1), collect_statement=(0)

ну уберите :)
22 май 18, 12:03    [21428308]     Ответить | Цитировать Сообщить модератору
 Re: Статистика выполнения хп через event session  [new]
RIBor
Member

Откуда:
Сообщений: 40
TaPaK,
тогда возвращаемся к исходной точке - тысячи записей для одной хп.

Переписал команду под "module_end"
create event session statsp on server 
add event sqlserver.module_end  (
	action (
		sqlserver.client_app_name, 
		sqlserver.client_hostname,
		sqlserver.session_id,
		sqlserver.username)
	where 
		--object_type = 'FN'
		--[object_name] = 'procСвоиПартнеры'and 
		source_database_id = 11
		and sqlserver.is_system = 0
) 
add target package0.asynchronous_file_target (
  set filename = N'j:\DBA_Audit\statsp.xel',
  metadatafile = N'j:\DBA_Audit\statsp.xem'  )

Как оказалось "object_type" для события "module_end" имеет тип "ansi_string".
Для начала проверил, что в этом поле вообще приходит: "P " - для хп, "FN" - для функций (похоже, что аналог type из sys.objects.
<event name="module_end" package="sqlserver" id="117" version="1" timestamp="2018-05-22T09:41:11.926Z">
  <data name="source_database_id">
    <value>11</value>
    <text />
  </data>
  <data name="object_id">
    <value>974626515</value>
    <text />
  </data>
  <data name="duration">
    <value>4877</value>
    <text />
  </data>
  <data name="row_count">
    <value>24</value>
    <text />
  </data>
  <data name="object_type">
    <value>P </value>
    <text />
  </data>
  <data name="object_name">
    <value>procСвоиПартнеры</value>
    <text />
  </data>
  <action name="client_app_name" package="sqlserver">
    <value>Microsoft Office 2010</value>
    <text />
  </action>
  <action name="client_hostname" package="sqlserver">
    <value>RebusUser</value>
    <text />
  </action>
  <action name="database_id" package="sqlserver">
    <value>11</value>
    <text />
  </action>
  <action name="session_id" package="sqlserver">
    <value>97</value>
    <text />
  </action>
  <action name="username" package="sqlserver">
    <value>DOMEN\user</value>
    <text />
  </action>
</event>

Но почему-то, если в команде поставить соответствующее условие, например,
object_type = 'FN'
,
то вообще ничего не возвращается. При этом условие по имени
[object_name] = 'procСвоиПартнеры'
работает.
22 май 18, 14:22    [21428996]     Ответить | Цитировать Сообщить модератору
 Re: Статистика выполнения хп через event session  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
RIBor,

[sqlserver].[equal_i_sql_ansi_string]([object_type],'FN')
22 май 18, 14:43    [21429098]     Ответить | Цитировать Сообщить модератору
 Re: Статистика выполнения хп через event session  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
RIBor,
а как насчет sys.dm_exec_procedure_stats?
22 май 18, 18:31    [21430198]     Ответить | Цитировать Сообщить модератору
 Re: Статистика выполнения хп через event session  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Владислав Колосов
RIBor,
а как насчет sys.dm_exec_procedure_stats?
А оно что показывает с какими параметрами процедура вызывалась? Или хотя бы кто и когда?
23 май 18, 23:50    [21434342]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить