激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - SQL Server Parameter Sniffing及其改進方法

SQL Server Parameter Sniffing及其改進方法

2020-05-20 15:44mrr Sql Server

這篇文章主要介紹了SQL Server Parameter Sniffing及其改進方法,需要的朋友可以參考下

SQL Server 在處理存儲過程的時候,為了節省編譯時間,是一次編譯,多次重用。當第一次運行時代入值產生的執行計劃,不適用后續代入的參數時,就產生了parameter sniffing問題。 create procedure Sniff1(@i int) as SELECT count(b.SalesOrderID),sum(p.weight) from [Sale
SQL Server 在處理存儲過程的時候,為了節省編譯時間,是一次編譯,多次重用。當第一次運行時代入值產生的執行計劃,不適用后續代入的參數時,就產生了parameter sniffing問題。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
create procedure Sniff1(@i int) as
SELECT count(b.SalesOrderID),sum(p.weight) from
[Sales].[SalesOrderHeader] a
inner join [Sales].[SalesOrderDetail] b
on a.SalesOrderID = b.SalesOrderID
inner join Production.Product p
on b.ProductID = p.ProductID
where a.SalesOrderID =@i;
go
DBCC FREEPROCCACHE
exec Sniff1 50000;
exec Sniff1 75124;
go

SQL Server Parameter Sniffing及其改進方法

Parameter Sniffing問題發生不頻繁,只會發生在數據分布不均勻或者代入參數值不均勻的情況下?,F在,我們就來探討下如何解決這類問題。

1. 使用Exec() 方式運行動態SQL

?
1
2
3
4
5
6
7
8
9
10
11
create procedure Nosniff1(@i int) as
declare @cmd varchar(1000);
set @cmd = 'SELECT count(b.SalesOrderID),sum(p.weight) from
[Sales].[SalesOrderHeader] a
inner join [Sales].[SalesOrderDetail] b
on a.SalesOrderID = b.SalesOrderID
inner join Production.Product p
on b.ProductID = p.ProductID
where a.SalesOrderID =';
 exec(@cmd+@i);
go

SQL Server Parameter Sniffing及其改進方法

exec Nosniff1 50000;

SQL Server Parameter Sniffing及其改進方法

exec Nosniff1 75124;

從上述trace中可以看到,在執行查詢語句之前,都有SP: CacheInsert事件,SQL Server做了動態編譯,根據變量的值,都正確的預估了結果集,給出了不同的執行計劃。

2. 使用本地變量

?
1
2
3
4
5
6
7
8
9
10
11
create procedure Nosniff2(@i int) as
declare @iin int;
set @iin=@i
SELECT count(b.SalesOrderID),sum(p.weight) from
[Sales].[SalesOrderHeader] a
inner join [Sales].[SalesOrderDetail] b
on a.SalesOrderID = b.SalesOrderID
inner join Production.Product p
on b.ProductID = p.ProductID
where a.SalesOrderID =@iin;
go

exec Nosniff2 50000;

SQL Server Parameter Sniffing及其改進方法

SQL Server Parameter Sniffing及其改進方法

exec Nosniff2 75124;

SQL Server Parameter Sniffing及其改進方法

SQL Server Parameter Sniffing及其改進方法

如上一篇文章所述,使用本地變量,參數值在存儲過程語句執行過程中得到,SQL Server在運行時不知道變量的值,會根據一個預估值進行編譯,給出一個折中的執行計劃。

3. 使用Query Hint,指定執行計劃

在 SELECT、DELETE、UPDATE 和 MERGE 語句最后加上OPTION ( [ ,...n ] ),對執行計劃進行指導。當數據庫管理員知道問題所在時,可以通過hint引導SQL Server生成一個對所有變量都不太差的執行計劃。

以上所述是小編給大家介紹的SQL Server Parameter Sniffing及其改進方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 媚药按摩痉挛w中文字幕 | 亚洲网在线 | 久久久国产精品成人免费 | 久久久久久久国产a∨ | 欧美第1页| 亚洲第一成人在线视频 | 成人爽a毛片免费啪啪红桃视频 | av在线免费网 | 黑人一级片视频 | 国产欧美日韩一区二区三区四区 | 在线a亚洲视频播放在线观看 | 欧美韩国日本在线 | 久久91精品 | 羞羞的视频在线 | 久久亚洲激情 | 国产精品成人久久 | 91久久极品少妇韩国 | 国产一区国产二区在线观看 | av中文字幕免费在线观看 | 久综合色 | 一区二区三区四区国产精品视频 | 国内久久久久 | 久久国产精品二国产精品中国洋人 | 在线天堂中文字幕 | 91专区在线观看 | 久久草在线视频免费 | 久草在线资源观看 | 日本高清在线免费 | 亚洲精品在线观看免费 | 国产一级毛片高清视频完整版 | av免费提供 | 粉嫩粉嫩一区二区三区在线播放 | 97久久精品一区二区三区观看 | 欧美粗暴analvideos | 欧美成人一区免费视频 | 国产久草视频在线 | 久久久久北条麻妃免费看 | 99久久久国产 | 久久视频精品 | 一区二区国产在线 | 亚洲综合中文 |