Skip to content

Commit 40e46f6

Browse files
committed
BrentOzarULTD#1175 sp_BlitzFirst add LogMessage functionality
Closes BrentOzarULTD#1175.
1 parent 86bfe1f commit 40e46f6

File tree

2 files changed

+40
-37
lines changed

2 files changed

+40
-37
lines changed

Documentation/sp_BlitzFirst Checks by Priority.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ If you want to change anything about a check - the priority, finding, URL, or ID
1010
|----------|---------------------------------|---------------------------------------|-------------------------------------------------|----------|
1111
| 0 | Outdated sp_BlitzFirst | sp_BlitzFirst is Over 6 Months Old | http://FirstResponderKit.org/ | 27 |
1212
| 0 | Outdated or Missing sp_BlitzCache | Update Your sp_BlitzCache | http://FirstResponderKit.org/ | 36 |
13+
| 1 | Logged Message | Logged from sp_BlitzFirst | http://FirstResponderKit.org | 38 |
1314
| 1 | Maintenance Tasks Running | Backup Running | https://BrentOzar.com/askbrent/backups | 1 |
1415
| 1 | Maintenance Tasks Running | DBCC CHECK* Running | https://BrentOzar.com/askbrent/dbcc | 2 |
1516
| 1 | Maintenance Tasks Running | Restore Running | https://BrentOzar.com/askbrent/backups | 3 |

sp_BlitzFirst.sql

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ GO
44

55

66
ALTER 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

141175
IF @SinceStartup = 1
142176
SELECT @Seconds = 0, @ExpertMode = 1;
@@ -178,7 +212,7 @@ BEGIN
178212

179213

180214
END /* 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' */
182216
BEGIN
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 */
33383340
END /* ELSE IF @OutputType = 'SCHEMA' */
33393341

33403342
SET NOCOUNT OFF;

0 commit comments

Comments
 (0)