У меня было требование, когда все запросы должны были быть менее 1 секунды. Не сложная задача, учитывая сложность.
В любом случае, это резко урезанная версия. Ключевым моментом здесь является то, что я сохраняю запрос и параметры как XML. Вы можете расширять или сжимать при необходимости столбцы и / или часть XML.
Взгляните на dbFiddle
Структура таблицы журнала
CREATE TABLE [dbo].[uniLog](
[LogNr] [int] IDENTITY(1,1) NOT NULL,
[LogUTC] [datetime] NULL,
[LogMS] [int] NULL,
[LogRows] [int] NULL,
[LogParam] [xml] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Процедура хранения фиктивных файлов
Обратите внимание на @TimeBeg
в верхней части процедуры и INSERT
после END
CREATE PROCEDURE [dbo].[prcDummyProcedure] (
@SomeStr varchar(50),
@SomeInt int,
@AnotherInt int,
@FromDate date
)
As
Begin
Set NoCount On
Declare @TimeBeg datetime = getutcdate()
-- My Super Awsome Query
Select Top 5000 *,N=Row_Number() Over (Order By (Select NULL)) From master..spt_values n1, master..spt_values n2
Declare @Rows int = @@RowCount
End
Insert Into [dbo].[uniLog] (LogUTC,LogMS,LogRows,LogParam)
values ( GetUTCDate()
,DateDiff(MILLISECOND,@TimeBeg,getutcdate())
,@Rows
,(Select ProcName = '[dbo].[prcDummyProcedure]'
,SomeStr = @SomeStr
,SomeInt = @SomeInt
,AnotherInt = @AnotherInt
,FromDate = @FromDate
For XML Raw )
)
А теперь тест
Exec [dbo].[prcDummyProcedure] 'SomeString',100,200,'2020-01-31'
Select * from [dbo].[uniLog]
Результаты
[Результаты будут что нужно сделать для SP]
Таблица журнала была обновлена с
LogNr LogUTC LogMS LogRows LogParam
6 2020-03-10 19:55:35.423 13 1000 <row ProcName="[dbo].[prcDummyProcedure]" SomeStr="SomeString" SomeInt="100" AnotherInt="200" FromDate="2020-01-31" />