瀏覽代碼

Merge pull request #17 from SQLAdrian/Performance-Baseline-withNoPs1files

Performance baseline withnops1files
Parikshit 8 年之前
父節點
當前提交
b787db4647

+ 3 - 2
SQL-Performance-Baseline/CREATECollectionJob.sql

@@ -40,8 +40,9 @@ EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Get Perf
 		@on_fail_step_id=0, 
 		@retry_attempts=0, 
 		@retry_interval=0, 
-		@os_run_priority=0, @subsystem=N'CmdExec', 
-		@command=N'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe C:\Scripts\Get-SQLPerfCounters.ps1 -S $(ESCAPE_NONE(SRVR))', 
+		@os_run_priority=0, @subsystem=N'TSQL', 
+		@command=N'EXEC spGetPerfCountersFromPowerShell', 
+		@database_name=N'dba_local', 
 		@flags=32
 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
 EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1

+ 47 - 0
SQL-Performance-Baseline/CREATEOBJECTS.sql

@@ -519,3 +519,50 @@ IF  NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[spLoadS
 		END
 GO
 
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[spGetPerfCountersFromPowerShell]') AND type in (N'P', N'PC'))
+              BEGIN
+                     DROP PROCEDURE dbo.[spGetPerfCountersFromPowerShell]
+                     PRINT 'Procedure spGetPerfCountersFromPowerShell exists on server ' + CAST(SERVERPROPERTY('ServerName') AS VARCHAR(100)) + ' dropping procedure'
+              END;
+IF  NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[spGetPerfCountersFromPowerShell]') AND type in (N'P', N'PC'))
+			BEGIN
+				EXEC dbo.sp_executesql @statement = N'
+-- =============================================
+-- Author:		Adrian Sullivan, [email protected]
+-- Create date: 2016/12/12
+-- Description:	Taking away the need for PS1 files and script folder
+-- =============================================
+CREATE PROCEDURE spGetPerfCountersFromPowerShell
+AS
+BEGIN
+
+	DECLARE @syscounters NVARCHAR(4000)
+	SET @syscounters=STUFF((SELECT DISTINCT '''''','''''' +LTRIM([counter_name])
+	FROM [dba_local].[dbo].[PerformanceCounterList]
+	WHERE [is_captured_ind] = 1 FOR XML PATH('''')), 1, 2, '''')+'''''''' 
+
+	DECLARE @cmd NVARCHAR(4000)
+	DECLARE @syscountertable TABLE (id INT IDENTITY(1,1), [output] VARCHAR(500))
+	DECLARE @syscountervaluestable TABLE (id INT IDENTITY(1,1), [value] VARCHAR(500))
+
+	SET @cmd = ''C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe "& get-counter -counter ''+ @syscounters +'' | Select-Object -ExpandProperty Readings"''
+	INSERT @syscountertable
+	EXEC master..xp_cmdshell @cmd; 
+
+	INSERT [dba_local].[dbo].[PerformanceCounter] (CounterName, CounterValue, DateSampled)
+	SELECT  REPLACE(REPLACE(REPLACE(ct.[output],''\\''+@@SERVERNAME+''\'',''''),'' :'',''''),''sqlserver:'','''')[CounterName] , CONVERT(MONEY,ct2.[output]) [CounterValue], GETDATE() [DateSampled]
+	FROM @syscountertable ct
+	LEFT OUTER JOIN (
+	SELECT id - 1 [id], [output]
+	FROM @syscountertable
+	WHERE PATINDEX(''%[0-9]%'', LEFT([output],1)) > 0  
+	) ct2 ON ct.id = ct2.id
+	WHERE  ct.[output] LIKE ''\\%''
+	ORDER BY [CounterName] ASC
+END
+';
+			PRINT 'Procedure spGetPerfCountersFromPowerShell created on server ' + CAST(SERVERPROPERTY('ServerName') AS VARCHAR(100)) + ' '
+		END
+GO
+
+

+ 2 - 3
SQL-Performance-Baseline/README.md

@@ -21,9 +21,8 @@ You can follow the steps mentioned below  to set it up in your environment.
 2.	Run CREATEDATABASE.sql
 3.	Run CREATEOBJECTS.sql
 4.	Run CREATECOLLECTIONJOB.sql
-5.	Copy PS Scripts in the folder C:\Scripts
-6.	Check SQL Agent JOBs History to see if it runs successfully
-7.	Repeat for each SQL Instance you want to monitor
+5.	Check SQL Agent JOBs History to see if it runs successfully
+6.	Repeat for each SQL Instance you want to monitor
 
 ### Setting up & Deploying Reporting