44
55
66ALTER PROCEDURE [dbo].[sp_BlitzFirst]
7- @Question NVARCHAR (MAX ) = NULL ,
7+ @LogMessage NVARCHAR (4000 ) = NULL ,
88 @Help TINYINT = 0 ,
99 @AsOf DATETIMEOFFSET = NULL ,
1010 @ExpertMode TINYINT = 0 ,
@@ -24,6 +24,12 @@ ALTER PROCEDURE [dbo].[sp_BlitzFirst]
2424 @FileLatencyThresholdMS INT = 100 ,
2525 @SinceStartup TINYINT = 0 ,
2626 @ShowSleepingSPIDs TINYINT = 0 ,
27+ @LogMessageCheckID INT = 38 ,
28+ @LogMessagePriority TINYINT = 1 ,
29+ @LogMessageFindingsGroup VARCHAR (50 ) = ' Logged Message' ,
30+ @LogMessageFinding VARCHAR (200 ) = ' Logged from sp_BlitzFirst' ,
31+ @LogMessageURL VARCHAR (200 ) = ' ' ,
32+ @LogMessageCheckDate DATETIMEOFFSET = NULL ,
2733 @Debug BIT = 0 ,
2834 @VersionDate DATETIME = NULL OUTPUT
2935 WITH EXECUTE AS CALLER , RECOMPILE
@@ -137,6 +143,34 @@ SELECT
137143 @FinishSampleTimeWaitFor = DATEADD (ss, @Seconds, GETDATE ()),
138144 @OurSessionID = @@SPID ;
139145
146+ IF @LogMessage IS NOT NULL
147+ BEGIN
148+ IF @OutputDatabaseName IS NULL OR @OutputSchemaName IS NULL OR @OutputTableName IS NULL
149+ OR NOT EXISTS ( SELECT *
150+ FROM sys .databases
151+ WHERE QUOTENAME ([name]) = @OutputDatabaseName)
152+ BEGIN
153+ RAISERROR (' We have a hard time logging a message without a valid @OutputDatabaseName, @OutputSchemaName, and @OutputTableName to log it to.' , 0 , 1 ) WITH NOWAIT ;
154+ RETURN ;
155+ END
156+ IF @LogMessageCheckDate IS NULL
157+ SET @LogMessageCheckDate = SYSDATETIMEOFFSET ();
158+ SET @StringToExecute = N ' IF EXISTS(SELECT * FROM '
159+ + @OutputDatabaseName
160+ + ' .INFORMATION_SCHEMA.SCHEMATA WHERE QUOTENAME(SCHEMA_NAME) = '' '
161+ + @OutputSchemaName + ' '' ) INSERT '
162+ + @OutputDatabaseName + ' .'
163+ + @OutputSchemaName + ' .'
164+ + @OutputTableName
165+ + ' (ServerName, CheckDate, CheckID, Priority, FindingsGroup, Finding, Details, URL) VALUES( '' '
166+ + CAST (SERVERPROPERTY (' ServerName' ) AS NVARCHAR (128 ))
167+ + ' '' , '' ' + CONVERT (NVARCHAR (100 ), @LogMessageCheckDate, 121 ) + ' '' , @LogMessageCheckID, @LogMessagePriority, @LogMessageFindingsGroup, @LogMessageFinding, @LogMessage, @LogMessageURL)'
168+ 169+ EXECUTE sp_executesql @StringToExecute,
170+ N ' @LogMessageCheckID INT, @LogMessagePriority TINYINT, @LogMessageFindingsGroup VARCHAR(50), @LogMessageFinding VARCHAR(200), @LogMessage NVARCHAR(4000), @LogMessageCheckDate DATETIMEOFFSET, @LogMessageURL VARCHAR(200)' ,
171+ @LogMessageCheckID, @LogMessagePriority, @LogMessageFindingsGroup, @LogMessageFinding, @LogMessage, @LogMessageCheckDate, @LogMessageURL;
172+ RETURN ;
173+ END
140174
141175IF @SinceStartup = 1
142176 SELECT @Seconds = 0 , @ExpertMode = 1 ;
@@ -178,7 +212,7 @@ BEGIN
178212
179213
180214END /* IF @AsOf IS NOT NULL AND @OutputDatabaseName IS NOT NULL AND @OutputSchemaName IS NOT NULL AND @OutputTableName IS NOT NULL */
181- ELSE IF @Question IS NULL /* IF @OutputType = 'SCHEMA' */
215+ ELSE IF @LogMessage IS NULL /* IF @OutputType = 'SCHEMA' */
182216BEGIN
183217 /* What's running right now? This is the first and last result set. */
184218 IF @SinceStartup = 0 AND @Seconds > 0 AND @ExpertMode = 1
@@ -2413,14 +2447,14 @@ BEGIN
24132447 INNER JOIN sys .parameters pCDO ON o .object_id = pCDO .object_id AND pCDO .name = ' @CheckDateOverride'
24142448 WHERE o .name = ' sp_BlitzCache' )
24152449 BEGIN
2416- /* Get the most recent sp_BlitzFirst execution before this one */
2450+ /* Get the most recent sp_BlitzCache execution before this one - don't use sp_BlitzFirst because user logs are added in there at any time */
24172451 SET @StringToExecute = N ' IF EXISTS(SELECT * FROM '
24182452 + @OutputDatabaseName
24192453 + ' .INFORMATION_SCHEMA.SCHEMATA WHERE QUOTENAME(SCHEMA_NAME) = '' '
24202454 + @OutputSchemaName + ' '' ) SELECT TOP 1 @BlitzCacheMinutesBack = DATEDIFF(MI,CheckDate,SYSDATETIMEOFFSET()) FROM '
24212455 + @OutputDatabaseName + ' .'
24222456 + @OutputSchemaName + ' .'
2423- + @OutputTableName
2457+ + @OutputTableNameBlitzCache
24242458 + ' WHERE ServerName = '' ' + CAST (SERVERPROPERTY (' ServerName' ) AS NVARCHAR (128 )) + ' '' ORDER BY CheckDate DESC;' ;
24252459 EXEC sp_executesql @StringToExecute, N ' @BlitzCacheMinutesBack INT OUTPUT' , @BlitzCacheMinutesBack OUTPUT ;
24262460
@@ -3302,39 +3336,7 @@ IF @SinceStartup = 0 AND @Seconds > 0 AND @ExpertMode = 1
33023336 END
33033337 END /* IF @SinceStartup = 0 AND @Seconds > 0 AND @ExpertMode = 1 - What's running right now? This is the first and last result set. */
33043338
3305- END /* IF @Question IS NULL */
3306- ELSE IF @Question IS NOT NULL
3307- 3308- /* We're playing Magic SQL 8 Ball, so give them an answer. */
3309- BEGIN
3310- IF OBJECT_ID (' tempdb..#BlitzFirstAnswers' ) IS NOT NULL
3311- DROP TABLE #BlitzFirstAnswers;
3312- CREATE TABLE #BlitzFirstAnswers(Answer VARCHAR (200 ) NOT NULL );
3313- INSERT INTO #BlitzFirstAnswers VALUES (' It sounds like a SAN problem.' );
3314- INSERT INTO #BlitzFirstAnswers VALUES (' You know what you need? Bacon.' );
3315- INSERT INTO #BlitzFirstAnswers VALUES (' Talk to the developers about that.' );
3316- INSERT INTO #BlitzFirstAnswers VALUES (' Let'' s post that on StackOverflow.com and find out.' );
3317- INSERT INTO #BlitzFirstAnswers VALUES (' Have you tried adding an index?' );
3318- INSERT INTO #BlitzFirstAnswers VALUES (' Have you tried dropping an index?' );
3319- INSERT INTO #BlitzFirstAnswers VALUES (' You can'' t prove anything.' );
3320- INSERT INTO #BlitzFirstAnswers VALUES (' Please phrase the question in the form of an answer.' );
3321- INSERT INTO #BlitzFirstAnswers VALUES (' Outlook not so good. Access even worse.' );
3322- INSERT INTO #BlitzFirstAnswers VALUES (' Did you try asking the rubber duck? http://www.codinghorror.com/blog/2012/03/rubber-duck-problem-solving.html' );
3323- INSERT INTO #BlitzFirstAnswers VALUES (' Oooo, I read about that once.' );
3324- INSERT INTO #BlitzFirstAnswers VALUES (' I feel your pain.' );
3325- INSERT INTO #BlitzFirstAnswers VALUES (' http://LMGTFY.com' );
3326- INSERT INTO #BlitzFirstAnswers VALUES (' No comprende Ingles, senor.' );
3327- INSERT INTO #BlitzFirstAnswers VALUES (' I don'' t have that problem on my Mac.' );
3328- INSERT INTO #BlitzFirstAnswers VALUES (' Is Priority Boost on?' );
3329- INSERT INTO #BlitzFirstAnswers VALUES (' Have you tried rebooting your machine?' );
3330- INSERT INTO #BlitzFirstAnswers VALUES (' Try defragging your cursors.' );
3331- INSERT INTO #BlitzFirstAnswers VALUES (' Why are you wearing that? Do you have a job interview later or something?' );
3332- INSERT INTO #BlitzFirstAnswers VALUES (' I'' m ashamed that you don'' t know the answer to that question.' );
3333- INSERT INTO #BlitzFirstAnswers VALUES (' Duh, Debra.' );
3334- INSERT INTO #BlitzFirstAnswers VALUES (' Have you tried restoring TempDB?' );
3335- SELECT TOP 1 Answer FROM #BlitzFirstAnswers ORDER BY NEWID ();
3336- END
3337- 3339+ END /* IF @LogMessage IS NULL */
33383340END /* ELSE IF @OutputType = 'SCHEMA' */
33393341
33403342SET NOCOUNT OFF ;
0 commit comments