集腋成裘-11-sql性能優化


SQL Nexus是一個用於將SQL Trace數據、性能監視日志及T-SQL輸出整合進一個單獨的SQL Server數據庫的工具。

先決條件

開始使用SQL Nexus之前,注意下面要做的事項:

  • 安裝Microsoft Report Viewer for SQL Server 2016 MSI控件,以便使用工具自帶的客戶端報表查看整合的報告;
  • 安裝Microsoft RML Utilities for SQL Server,以便SQL Nexus導入SQL Traces;
  • 安裝Microsoft System CLR Types for SQL Server 2016;
  • 核實安裝.NET Framework 4.7

一:問題定位

1:通過SQLserver自帶的工具SQL Server Profiler

2:選擇要監控的事件

 

3:導出執行的腳本,將任務置於后台執行,提高效率

4:執行導出的腳本,目的是開啟監控

/****************************************************/
/* Created by: SQL Server 2012  Profiler          */
/* Date: 2019/01/16  21:18:17         */
/****************************************************/


-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
set @maxfilesize = 5 

-- Please replace the text InsertFileNameHere, with an appropriate
-- filename prefixed by a path, e.g., c:\MyFolder\MyTrace. The .trc extension
-- will be appended to the filename automatically. If you are writing from
-- remote server to local drive, please use UNC path and make sure server has
-- write access to your network share

exec @rc = sp_trace_create @TraceID output, 0, N'd:\a\logTrace', @maxfilesize, NULL 
if (@rc != 0) goto error

-- Client side File and Table cannot be scripted

-- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 10, 9, @on
exec sp_trace_setevent @TraceID, 10, 2, @on
exec sp_trace_setevent @TraceID, 10, 10, @on
exec sp_trace_setevent @TraceID, 10, 6, @on
exec sp_trace_setevent @TraceID, 10, 11, @on
exec sp_trace_setevent @TraceID, 10, 12, @on
exec sp_trace_setevent @TraceID, 10, 13, @on
exec sp_trace_setevent @TraceID, 10, 14, @on
exec sp_trace_setevent @TraceID, 10, 15, @on
exec sp_trace_setevent @TraceID, 10, 16, @on
exec sp_trace_setevent @TraceID, 10, 17, @on
exec sp_trace_setevent @TraceID, 10, 18, @on
exec sp_trace_setevent @TraceID, 12, 1, @on
exec sp_trace_setevent @TraceID, 12, 9, @on
exec sp_trace_setevent @TraceID, 12, 11, @on
exec sp_trace_setevent @TraceID, 12, 6, @on
exec sp_trace_setevent @TraceID, 12, 10, @on
exec sp_trace_setevent @TraceID, 12, 12, @on
exec sp_trace_setevent @TraceID, 12, 13, @on
exec sp_trace_setevent @TraceID, 12, 14, @on
exec sp_trace_setevent @TraceID, 12, 15, @on
exec sp_trace_setevent @TraceID, 12, 16, @on
exec sp_trace_setevent @TraceID, 12, 17, @on
exec sp_trace_setevent @TraceID, 12, 18, @on
exec sp_trace_setevent @TraceID, 13, 1, @on
exec sp_trace_setevent @TraceID, 13, 9, @on
exec sp_trace_setevent @TraceID, 13, 11, @on
exec sp_trace_setevent @TraceID, 13, 6, @on
exec sp_trace_setevent @TraceID, 13, 10, @on
exec sp_trace_setevent @TraceID, 13, 12, @on
exec sp_trace_setevent @TraceID, 13, 14, @on


-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint

exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - 45caddf4-8520-4a3a-88c9-1afd4251fc0b'
-- Set the trace status to start
exec sp_trace_setstatus @TraceID, 1

-- display trace id for future references
select TraceID=@TraceID
goto finish

error: 
select ErrorCode=@rc

finish: 
go
開啟監控(Trace)的腳本

5:檢查步驟4執行的效果。

--查看所有的trace
select * from sys.traces
--設置trace的狀態 0代表停止,1代表開啟,2代表刪除,第一個參數代表traceid
--sp_trace_setstatus 2,0
--go
--sp_trace_setstatus 2,1
--go
--sp_trace_setstatus 2,2
View Code

 二、使用sqlnexus統計數據

1:連接服務器,為了方便把一中5的日志記錄創建到該服務器的數據庫

 2:導入文本

3:主要看以下幾個指標

 三、提取並且優化sql

(1)sql語句參數化,或將其修改為存儲過程。

 理由1:未參數化的sql除非每次執行的語句完全一致否則每一次執行都將會先去執行編譯,下面將展示此過程

 --步驟1:在Manage studio當中打開統計功能
SET STATISTICS IO ON --展示IO讀寫
SET STATISTICS TIME ON --展示執行時間
GO
--步驟2:執行sql語句
declare @P0001 nvarchar(124)
set @P0001 = N'select  top 1 ID,UserId,IosToken,AndroidToken from IOS_UserToken  where AndroidToken=@AndroidToken or IosToken=@AndroidToken'
declare @P0002 nvarchar(26)
set @P0002 = N'@AndroidToken varchar(100)'
declare @P0003 varchar(100)
set @P0003 = 'f02b23dd0c59a143e979616b1023411f6f350cb814be7c30989e8987aadcd9c4'
exec sp_executesql @P0001, @P0002, @AndroidToken = @P0003
View Code

 四、臨時緊急處理

熔斷:服務調用的一種雪崩現象,通過截斷對依賴服務的調用來保證調用端的可用性。

(1) 控制資源申請:控制cpu的消耗,既單個腳本占用cpu的核數,防止某一個長時間操作占用大量cpu。設置標准:qps高的情況下將cpu執行數往低設置,當qps低的情況下將cpu並行數據往高處設置,最高不要超過8。

限流:通過限制對服務的調用訪問來保證服務端的可用性。

 

降級:通過放棄對非核心服務的調用,來保證核心服務的可用性。

擴容:通過增加服務的數量來保證服務的可用性。

 

五、查看數據庫死鎖問題(模板換一下)

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com