SQL Profiler работает с LocalDB?
Можно ли использовать SQL Profiler для наблюдения запросов, запрашиваемых у экземпляра LocalDB?
6 ответов
Это то, что я использовал в SQL Server Express 2012 (примечание: не "LocalDB* - я никогда не использовал LocalDB, так что, возможно, это отличается от" обычного " SQL Server Express).
Шаг 1: Настройте трассировку
Это в основном "тяжелая работа". Сначала необходимо выяснить, где находится каталог журналов по умолчанию для SQL Server. Вам нужно это имя каталога, чтобы указать файл трассировки.
Затем создайте трассировку, выполнив что-то вроде этого:
DECLARE @TraceID int
DECLARE @tracefile nvarchar(255)
DECLARE @endDate datetime
DECLARE @size bigint
-- no file extension!
SET @tracefile = 'C:\Data\sqlserver\MSSQL11.SQLEXPRESS\MSSQL\Log\mydb_trace'
-- tracing stops when either the max size of the file is reached
-- or the enddate (whichever occurs first)
-- size is in MB
SET @size = 250
SET @enddate = DateAdd(DAY, 15, GetDate())
EXEC @rc = sp_trace_create @TraceID output, 2, @tracefile, @size, @enddate
Теперь для каждого события, которое должно быть отслежено, вам нужно позвонить sp_trace_setevent
несколько раз, чтобы определить, какой столбец для этого события должен быть возвращен:
Полный список событий и столбцов см. По адресу: http://msdn.microsoft.com/en-US/library/ms186265%28v=sql.90%29.aspx
-- Enable Event: 45 = SP:StmtCompleted
EXEC sp_trace_setevent @TraceID, 45, 27, @on -- 27: EventClass
EXEC sp_trace_setevent @TraceID, 45, 12, @on -- 12: SPID
EXEC sp_trace_setevent @TraceID, 45, 35, @on -- 35: DatabaseName
EXEC sp_trace_setevent @TraceID, 45, 11, @on -- 11: SQLSecurityLoginName
EXEC sp_trace_setevent @TraceID, 45, 6, @on -- 6: NTUserName
EXEC sp_trace_setevent @TraceID, 45, 8, @on -- 8: ClientHostName
EXEC sp_trace_setevent @TraceID, 45, 10, @on -- 10: ApplicationName
EXEC sp_trace_setevent @TraceID, 45, 1, @on -- 1: TextData
EXEC sp_trace_setevent @TraceID, 45, 13, @on -- 13: Duration
EXEC sp_trace_setevent @TraceID, 45, 14, @on -- 14: StartTime
EXEC sp_trace_setevent @TraceID, 45, 15, @on -- 15: EndTime
EXEC sp_trace_setevent @TraceID, 45, 18, @on -- 18: CPU
EXEC sp_trace_setevent @TraceID, 45, 29, @on -- 29: Nesting Level
Все вышеперечисленные вызовы должны выполняться для каждого события, которое вы хотите отследить!
Я нахожу события 12 = SQL:BatchCompleted
, 42 = SP:Starting
, 43 = SP:Completed
, 45 = SP:StmtCompleted
, 50 = SQL Transaction
самые интересные.
При желании вы можете настроить фильтр, я обычно отфильтровываю системные события и показываю только события для конкретной базы данных:
-- Exclude system events (so only user events are shown)
-- 60: IsSystem Column
-- 0: logical Operator: AND (only)
-- 1: comparison operator: not equal
-- 1: value
EXEC sp_trace_setfilter @TraceID, 60, 0, 1, 1
-- only mydb database
EXEC sp_trace_setfilter @TraceID, 35, 0, 6, N'mydb'
Как только трассировка настроена, она должна быть активирована:
EXEC sp_trace_setstatus @TraceID, 1
(Обратите внимание, что вышеперечисленное должно выполняться как один пакет из-за использования переменной).
Чтобы увидеть, как была определена трассировка, вы можете использовать следующий оператор:
select traceid,
case property
when 1 then 'Trace Options'
when 2 then 'Trace file'
when 3 then 'Max. file size'
when 4 then 'Stop time'
when 5 then 'Status'
end as property_name,
case
when property = 5 then
case convert(nvarchar(max), value)
when '1' then 'Active'
else 'Inactive'
end
else convert(nvarchar(max), value)
end as value
from ::fn_trace_getinfo(null)
where property in (2,3,5)
Теперь запустите ваше приложение или все, что выдает операторы в базу данных, которую вы хотите отследить.
Шаг 2: Получить информацию о трассировке
Для этого вам нужно знать полный путь к фактическому файлу трассировки (из шага 1). Обратите внимание, что для fn_trace_gettable
вам нужно указать файл, включая расширение файла.
SELECT ApplicationName,
LoginName,
HostName,
SPID,
Duration,
StartTime,
EndTime,
DatabaseName,
reads,
writes,
RowCounts,
cpu,
EventClass,
case EventClass
when 10 then 'RPC:Completed'
when 11 then 'RPC:Starting'
when 12 then 'SQL:BatchCompleted'
when 13 then 'SQL:BatchStarting'
when 40 then 'SQL:StmtStarting'
when 41 then 'SQL:StmtCompleted'
when 42 then 'SP:Starting'
when 43 then 'SP:Completed'
when 44 then 'SP:StmtStarting'
when 45 then 'SP:StmtCompleted'
when 50 then 'SQL Transaction'
when 67 then 'Execution Warnings'
when 71 then 'Prepare SQL'
when 72 then 'Exec Prepared SQL'
when 73 then 'Unprepare SQL'
end as Event,
LineNumber,
TextData
FROM ::fn_trace_gettable('C:\Data\sqlserver\MSSQL11.SQLEXPRESS\MSSQL\Log\mydb_trace.log', default)
order by StartTime;
Отрегулируйте выше, чтобы вернуть интересующую вас информацию.
Когда у вас есть нужная информация, вы должны отключить трассировку:
Шаг 3: отключить трассировку
Для этого вам нужно знать Trace-ID (например, запустив оператор info из шага 1). Для этого идентификатора вам сначала нужно остановить трассировку, а затем удалить ее:
-- stop the trace
EXEC sp_trace_setstatus @TraceID, 0
-- delete the trace
EXEC sp_trace_setstatus @TraceID, 2
Вы можете использовать SQL Profiler так же, как и со всеми другими выпусками SQL, если вы знаете правильное имя сервера. Вы можете найти имя сервера с помощью утилиты SqlLocalDb.
Чтобы найти его, используйте sqllocaldb info YourInstanceName
найти Instance Pipe Name
, Имеет форму np:\\.\pipe\LOCALDB#12345\tsql\query
Используйте это как имя сервера для подключения к серверу и запуска профилирования
С http://expressprofiler.codeplex.com/
ExpressProfiler (он же SqlExpress Profiler) - это простая, но достаточно хорошая замена SQL Server Profiler с базовым графическим интерфейсом.
Нет требований, нет установки.
Может использоваться как с Express, так и без Express выпусками SQL Server 2005/2008/2008r2/2012 (включая LocalDB)
Это так же просто, как установить сервер в (LocalDB) \ v11.0
Microsoft SQL Server 2012 Express LocalDB - это режим выполнения SQL Server Express, предназначенный для разработчиков программ.
Sql Profiler не поставляется с SQL Server Express.
Таким образом, вы не можете использовать Sql profiler для вашей LocalDB.
Тем не менее, вы можете пройти альтернативные пути.
У меня была такая же проблема, и следующее решение сработало для меня. Откройте профилировщик SQL и подключитесь к серверу sql. В новой трассе выберите вкладку выбора событий. Затем установите флажок «Показать все события». После этого из списка установите флажки под названием базы данных. Теперь используйте фильтр столбцов, затем выберите имя базы данных. Выберите «Нравится» и введите %localDB%. затем запустите трассировку. Он будет захватывать все в этой базе данных.