Вы можете создать процесс из сценария ниже, который может быть выполнен по заданию. Более или менее это шаблон и может быть изменен, как вы считаете нужным.
EDIT: добавлены дополнительные комментарии ниже.
--Create temp table for sysprocesses records
IF OBJECT_ID('tempdb.dbo.#SYSPROC') IS NOT NULL
DROP TABLE #SYSPROC;
BEGIN
CREATE TABLE #SYSPROC
(
spid smallint NOT NULL,
dbid smallint NOT NULL,
blocked smallint NOT NULL,
lastwaittype nchar(32) NOT NULL,
cpu int NOT NULL,
physical_io int NOT NULL,
memusage int NOT NULL,
login_time datetime NOT NULL,
Last_batch datetime NOT NULL,
status nchar(30) NOT NULL,
cmd nchar(16) NOT NULL,
loginame nchar(128) NOT NULL,
sql_handle binary(20) NOT NULL,
sh_text text NULL,
snapshot_dt datetime NULL
)
END;
--Insert sysprocesses records into temp #SYSPROC
INSERT INTO #SYSPROC
(
spid,
dbid,
blocked,
lastwaittype,
cpu,
physical_io,
memusage,
login_time,
Last_batch,
status,
cmd,
loginame,
sql_handle,
snapshot_dt
)
SELECT
sp.spid,
sp.dbid,
sp.blocked,
sp.lastwaittype,
sp.cpu,
sp.physical_io,
sp.memusage,
sp.login_time,
sp.Last_batch,
sp.status,
sp.cmd,
sp.loginame,
sp.sql_handle,
GETDATE()
FROM master.dbo.sysprocesses sp
WHERE sp.spid > 50;
/*
Update temp #SYSPROC with sql text. Since CROSS APPLY is not
available in SQL Server 2000, a loop is required to interate
through each record.
*/
DECLARE @min_spid smallint = (SELECT MIN(spid) FROM #SYSPROC);
DECLARE @max_spid smallint = (SELECT MAX(spid) FROM #SYSPROC);
DECLARE @sql_handle binary(20);
DECLARE @sql_text varchar(max);
WHILE @min_spid <= @max_spid
BEGIN
--Set @sql_handle variable to be evaluated by the fn_get_sql function
SELECT
@sql_handle = S.sql_handle
FROM #SYSPROC S
WHERE spid = @min_spid
--Identify the sql_text for the session by passing the @sql_handle variablet through fn_get_sql
SELECT
@sql_text = H.text
FROM fn_get_sql(@sql_handle) H
--Update #SYSPROC with the sql_text.
UPDATE S
SET sh_text = @sql_text
FROM #SYSPROC S
WHERE spid = @min_spid
SET @min_spid = @min_spid + 1
END;
INSERT INTO <SOMETABLE YOU CREATE>
(
spid,
dbid,
blocked,
lastwaittype,
cpu,
physical_io,
memusage,
login_time,
Last_batch,
status,
cmd,
loginame,
sql_handle,
snapshot_dt
)
SELECT
spid,
dbid,
blocked,
lastwaittype,
cpu,
physical_io,
memusage,
login_time,
Last_batch,
status,
cmd,
loginame,
sql_handle,
snapshot_dt
FROM #SYSPROC
Надеюсь, это поможет!
Вы можете скопировать базу данных в тестовую среду с достаточным пространством и запустить там профайлер? Кроме того, почему вы не хотите использовать профилировщик sql-сервера? – user1666620
Нет, это невозможно сделать, поскольку в среде много баз данных и нет тестового сервера. –
aНа другую возможную вещь, которая может быть выполнена. Что такое sqltext? –