国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

SQL Server 2016 查詢存儲性能優(yōu)化小結(jié)

2024-08-31 01:03:38
字體:
供稿:網(wǎng)友
SQL Server 2016已經(jīng)發(fā)布了有半年多,相信還有很多小伙伴還沒有開始使用,今天我們來談談SQL Server 2016 查詢存儲性能優(yōu)化,希望大家能夠喜歡
 

作為一個DBA,排除SQL Server問題是我們的職責之一,每個月都有很多人給我們帶來各種不能解釋卻要解決的性能問題。

我就多次聽到,以前的SQL Server的性能問題都還好且在正常范圍內(nèi),但現(xiàn)在一切已經(jīng)改變,SQL Server開始糟糕, 瘋狂的事情不能解釋。在這個情況下我介入,分析下整個SQL Server的安裝,最后用一些神奇的調(diào)查方法找出性能問題的根源。

但很多時候問題的根源是一樣的:所謂的計劃回歸(Plan Regression),即特定查詢的執(zhí)行計劃已經(jīng)改變。昨天SQL Server已經(jīng)緩存了在計劃緩存里緩存了一個好的執(zhí)行計劃,今天就生成、緩存最后重用了一個糟糕的執(zhí)行計劃——不斷重復。

進入SQL Server 2016后,我就變得有點多余了,以為微軟引進了查詢存儲(Query Store)。這是這個版本最熱門的功能!查詢存儲幫助你很容易找出你的性能問題是不是計劃回歸造成的。如果你找到了計劃回歸,這很容易強制一個特定計劃不使用計劃向?qū)АB犉饋砗苡幸馑迹孔屛覀兺ㄟ^一個特定的場景,向你展示下在SQL Server 2016里,如何使用查詢存儲來找出并最終修正計劃回歸。

查詢存儲(Query Store)——我的對手

在SQL Server 2016里,在你使用查詢存儲功能前,你要對這個數(shù)據(jù)庫啟用它。這是通過ALTER DATABASE語句實現(xiàn),如你所見的下列代碼:

CREATE DATABASE QueryStoreDemoGOUSE QueryStoreDemoGO-- Enable the Query Store for our databaseALTER DATABASE QueryStoreDemoSET QUERY_STORE = ONGO-- Configure the Query StoreALTER DATABASE QueryStoreDemo SET QUERY_STORE( OPERATION_MODE = READ_WRITE,  CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367),  DATA_FLUSH_INTERVAL_SECONDS = 900,  INTERVAL_LENGTH_MINUTES = 1,  MAX_STORAGE_SIZE_MB = 100,  QUERY_CAPTURE_MODE = ALL,  SIZE_BASED_CLEANUP_MODE = OFF)GO

 

在線幫助為你提供了各個選項的詳細信息。接下來我創(chuàng)建一個簡單的表,創(chuàng)建一個非聚集索引,最后插入80000條記錄。

 

-- Create a new tableCREATE TABLE Customers( CustomerID INT NOT NULL PRIMARY KEY CLUSTERED, CustomerName CHAR(10) NOT NULL, CustomerAddress CHAR(10) NOT NULL, Comments CHAR(5) NOT NULL, Value INT NOT NULL)GO-- Create a supporting new Non-Clustered Index.CREATE UNIQUE NONCLUSTERED INDEX idx_Test ON Customers(Value)GO-- Insert 80000 recordsDECLARE @i INT = 1WHILE (@i <= 80000)BEGIN INSERT INTO Customers VALUES (  @i,  CAST(@i AS CHAR(10)),  CAST(@i AS CHAR(10)),  CAST(@i AS CHAR(5)),  @i )  SET @i += 1ENDGO

為了訪問我們的表,我額創(chuàng)建了一個簡單的存儲過程,傳入value值作為過濾謂語。

 

-- Create a simple stored procedure to retrieve the dataCREATE PROCEDURE RetrieveCustomers( @Value INT)ASBEGIN SELECT * FROM Customers WHERE Value < @ValueENDGO

現(xiàn)在我用80000的參數(shù)值來執(zhí)行存儲過程。

-- Execute the stored procedure. -- This generates an execution plan with a Key Lookup (Clustered). EXEC RetrieveCustomers 80000 GO

 

現(xiàn)在當你查看實際的執(zhí)行計劃時,你會看到查詢優(yōu)化器已經(jīng)選擇了有419個邏輯讀的聚集索引掃描運算符。SQL Server并沒有使用非聚集索引,因為這樣沒有意義,由于臨界點。這個查詢結(jié)果并沒有選擇性。

SQL Server 2016 查詢存儲性能優(yōu)化小結(jié)

現(xiàn)在假設SQL Server發(fā)生了些事情(例如重啟,故障轉(zhuǎn)移),SQL Server忽略已經(jīng)緩存的計劃,這里我通過執(zhí)行DBCC FREEPROCCACHE從計劃緩存里抹掉每個緩存的計劃來模擬SQL Server重啟(不要在生產(chǎn)環(huán)境里使用!)。

 -- Get rid of the cached execution plan... DBCC FREEPROCCACHE GO

 

現(xiàn)在有人再次調(diào)用你的存儲過程,這次輸入?yún)?shù)值是1。這次執(zhí)行計劃不一樣,因為現(xiàn)在在執(zhí)行計劃里你會有書簽查找。SQL Server估計行數(shù)是1,在非聚集索引里沒有找到任何行。因此與非聚集索引查找結(jié)合的書簽查找才有意義,因為這個查詢是有選擇性的。

SQL Server 2016 查詢存儲性能優(yōu)化小結(jié)

現(xiàn)在我再執(zhí)行用80000參數(shù)值的查詢。

-- Execute the stored procedureEXEC RetrieveCustomers 1GO-- Execute the stored procedure again-- This introduces now a plan regression, because now we get a Clustered Index Scan-- instead of the Key Lookup (Clustered).EXEC RetrieveCustomers 80000GO

 

當你再次看STATISTICS IO的輸出,你會看到這個查詢現(xiàn)在產(chǎn)生了160139個邏輯讀——剛才的查詢只有419個邏輯讀。這個時候DBA的手機就會響起,性能問題。但今天我們要不同的方式解決——使用剛才啟用的查詢存儲。

當你再次看實際的執(zhí)行計劃,在你面前你會看到有一個計劃回歸,因為SQL Server剛重用了書簽查找的的計劃緩存。剛才你有聚集索引掃描運算符的執(zhí)行計劃。這是SQL Server里參數(shù)嗅探的副作用。

讓我們通過查詢存儲來詳細了解這個問題。在SSMS里的對象資源管理器里,SQL Server 2016提供了一個新的結(jié)點叫查詢存儲,這里你會看到一些報表。

SQL Server 2016 查詢存儲性能優(yōu)化小結(jié)

【前幾個資源使用查詢】向你展示了最昂貴的查詢,基于你選擇的維度。這里切換到【邏輯讀取次數(shù)】。

SQL Server 2016 查詢存儲性能優(yōu)化小結(jié)

這里在你面前有一些查詢。最昂貴的查詢生成了近500000個邏輯讀。這是我們的初始語句。這已經(jīng)是第一個WOW效果的的查詢存儲:SQL Server重啟后,查詢存儲的數(shù)據(jù)還是存在的!第2個是你存儲過程里的SELECT語句。在查詢存儲里每個捕獲的查詢都有一個標示號——這里是7。最后當你看報告的右邊,你會看這個查詢的不同執(zhí)行計劃。

SQL Server 2016 查詢存儲性能優(yōu)化小結(jié)

如你所見,查詢存儲捕獲了2個不同的執(zhí)行計劃,一個ID是7,一個ID是8。當你點擊計劃ID時,SQL Server會在報表的最下面為你顯示估計的執(zhí)行計劃。

SQL Server 2016 查詢存儲性能優(yōu)化小結(jié)

計劃8是聚集索引掃描,計劃7是書簽查找。如你所見,使用查詢存儲分析計劃回歸非常簡單。但你現(xiàn)在還沒結(jié)束。你現(xiàn)在可以對指定的查詢強制執(zhí)行計劃。 現(xiàn)在你知道包含聚集索引掃描的執(zhí)行計劃有更好的性能。因此現(xiàn)在你可以通過點擊【強制執(zhí)行計劃】強制查詢7使用執(zhí)行計劃。

SQL Server 2016 查詢存儲性能優(yōu)化小結(jié)

搞定,我們已經(jīng)解決問題了!

現(xiàn)在當你執(zhí)行存儲過程(用80000的輸入?yún)?shù)值),在執(zhí)行計劃里你可以看到聚集索引掃描,執(zhí)行計劃只生成419個邏輯讀——很簡單,是不是?絕對不是!!!!

微軟告訴我們只給修正SQL Server性能相關(guān)的“新方式”。你只是強制了特定的計劃,一切都還好。這個方法有個大的問題,因為性能問題的根源并沒有解決!這個問題的關(guān)鍵是因為書簽查找計劃沒有穩(wěn)定性。取決于首次執(zhí)行計劃默認的輸入值,執(zhí)行計劃因此就被不斷重用。

通常我會建議調(diào)整下你的索引設計,創(chuàng)建一個覆蓋索引來保證計劃的穩(wěn)定性。但強制特定執(zhí)行計劃只是臨時解決問題——你還是要修正你問題的根源。

小結(jié)

不要誤解我:SQL Server 2016里的查詢存儲功能很棒,可以幫你更容易理解計劃回歸。它也會幫你“臨時”強制特定的執(zhí)行計劃。但性能調(diào)優(yōu)的目標還是一樣:你要找到問題根源,嘗試解決問題——不要在外面晃蕩!



注:相關(guān)教程知識閱讀請移步到MSSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
av亚洲男人天堂| 999精品网| 日本不卡视频一区二区| www.综合网.com| 国产永久在线观看| 国产亚洲精品午夜高清影院| 国产小视频在线观看| 国产成人精品自线拍| 精品国内自产拍在线视频| 亚洲欧美久久婷婷爱综合一区天堂 | 九九视频精品在线| 国产69久久| 国产高清视频免费最新在线| 日本视频一二三区中文字幕| 国产精选在线观看| 色综合久久五月天| 国产精品久久久久永久免费看| 精品国内自产拍在线视频| 国产毛片毛片毛片| 99热国产在线| 国产精品视频流白浆免费视频| 一本大道香蕉久久| 中文字幕中文字幕在线中高清免费版| 国产激情视频在线| 天堂在线中文资源| av在线电影观看| √天堂中文在线| 欧美日韩一区二区三区在线播放| 国产超碰精品在线观看| 好吊日视频在线观看| av在线官网| av在线播放国产| 99re在线视频播放| 91www在线观看| 国产网红在线| 最近中文字幕mv2018在线高清| 欧美日韩一区二区三区在线播放| 国产精品白浆流出视频| 天天av综合网| 国产字幕在线看| 开心婷婷激情| 日本在线免费中文字幕| jizz亚洲大全| 欧美日韩视频精品一区二区| 亚洲成a人v欧美综合天堂麻豆| 免费看av大片| 四虎国产精品永久地址998| av福利在线| av大片在线播放| 日本a级黄色| 丁香视频五月| 国产日韩精品在线看| 国产成a人亚洲精v品| 亚洲综合在线不卡| 美女网站在线观看| 88av在线| 国产精品自拍在线观看| 国产色在线 com| 在线免费看黄网站| 国产在线免费观看| 国产精品视频二区三区| 在线国产一级| 国产免费av高清在线| 国产黄色大片在线观看| 亚洲人av在线| 国产乱视频在线观看| 精品全国在线一区二区| 任你操在线观看| 国产日本在线| 久久一本精品| 精品欧美日韩一区二区| 一本久中文高清| 国产免费黄色| 91最新在线| 成年人在线观看| 精品视频在线一区二区| 成人亚洲一区二区三区| 一级二级在线观看| 国产亚洲精品久久久久久青梅 | 国产蜜臀在线| 日本欧洲一区| 91中文字幕| 国产天堂素人系列在线视频| 日本卡一卡2卡3卡4精品卡网站| 成年网在线观看免费观看网址| 91欧美在线视频| 国产网红女主播精品视频| 美女av在线播放| av在线播放网| 香蕉视频在线观看www| 国产精品伦理一区二区三区 | **三级三级97片毛片| 天天干天天操天天爽| 精品亚洲综合| 18av在线播放| 国产精品视频白浆合集| 国产免费视频| 久青青在线观看视频国产| 亚洲高清在线免费| 在线中文字幕视频观看| 国产黄在线观看| 国产精美视频| 在线观看精品视频一区二区三区| 18 激情视频在线| 在线一二三区| 青草在线视频在线观看| а天堂8中文最新版在线官网| av中文资源在线| 欧美xxxxx性| 成人免费一区二区三区牛牛| 91超碰在线免费| 国产高清在线| 在线视频婷婷| 男人天堂99| 国产视频精品久久| av人人综合网| 高清av在线| 99热免费在线观看| 超碰在线免费播放| 国产视频三区| www.色婷婷| √天堂资源地址在线官网| 9999在线视频| 九色视频网站| 99中文字幕一区| 成视频年人免费看黄网站| 国产高清在线看| 天天插天天干| 国产精品久久久久久久牛牛| 亚洲欧美日韩一区成人| 国产在线观看网站| 在线观看wwww| 国产极品美女到高潮| 青青九九免费视频在线| 国产黄在线播放| 国产女人在线视频| 亚洲午夜久久久久中文字幕| 丁香婷婷激情| www.av在线| 精品极品三级久久久久| 日韩av成人| 青青青青在线| 精品国产二区三区| 中文字幕在线播放网址| 黄污在线观看| 日本免费视频www| 依依成人在线| 在线观看wwww| 亚洲伊人网在线观看| 国产偷激情在线| 成人精品一区二区三区免费| 夜夜操com| 在线免费看黄av| 在线一二三区| 精精国产xxxx视频在线中文版 | 国产黄色免费网站| 高潮毛片在线观看| 久久久久久五月天久久久久久久久| 一本久久精品| 四虎国产精品永久| www.三区| 黄色av电影在线播放| 好吊日视频在线观看| 另类专区欧美| 国产中文字幕在线观看| 欧美精品久久久久久久小说| av在线中文| free性亚洲| 开心婷婷激情| 国产一级性片| 精精国产xxxx视频在线| eeuss影院www在线播放| 就爱干草视频| 国产污污在线观看| 在线视频观看国产| 欧美婷婷久久五月精品三区| 国产免费av网站| 国产黄色片在线观看| av三级在线观看| 丁香综合在线| 精品一区二区三区在线观看l| 亚洲欧美综合乱码精品成人网| 在线观看的网站你懂的| 日本电影全部在线观看网站视频| 国产尤物一区二区三区| 国产精品区一区二| 免费a在线观看| 96久久久久久| 老司机精品视频一区二区| 国产精品黄页网站在线播放免费| 伊人国产在线看一| 国产精品一卡二卡三卡| 97影院秋霞午夜在线观看| 国产在线视频网站| 亚洲国产精品区| 国产亚洲精品拍拍拍拍拍| gogogo影视剧免费观看在线观看| 午夜免费视频在线国产| 精品美女调教视频| 国产精品一区在线看|