資料庫引擎調整顧問
資料庫效能很大程度上取決於表上是否有合適的索引。但是工作負載和資料隨時變化,現有的索引可能不完全合適,可能需要新的索引。
但是決定索引又是非常困難的,因為對某個查詢有提升作用,卻會對其他查詢或者其他操作有負面影響。
SQLServer提供了【資料庫引擎顧問】(DTA)工具來幫助為一個給定的工作負載確認一組最優的索引。而不需要對資料庫和SQLServer結構深入瞭解。它還能為一小部分問題查詢提供建議調整選項。
資料庫引擎調整顧問機制
在開啟引擎並登入以後:
首先,要做的就是新建一個會話。可以為會話新增一個用於歸檔的標註。
然後,必須選擇一個工作負載(檔案或一個表)
第三步,選擇Tuning Options(調整選項/優化選項)選項卡。
選擇Limit Tuning Time(限制調整事件),定義希望DTA執行的時間。然後定義停止的日期和時間。因為DTA執行時間越長,建議越好。可以選擇選項卡里的選項。增加建議的可靠性。
也可以點選“Advanced Options(高階選項)”來檢視更多選項。
最後,在定義完後點選(Start Analysis)開始分析。
所有的會話會儲存在對應例項的msdb中。
DTA報告
報告名稱 |
報告描述 |
Column Access(列訪問) |
列出工作負載中引用的列和表 |
Database Access(資料庫訪問) |
列出工作負載中引用的每個資料庫和每個資料庫工作負載語句的百分比 |
Event Frequency(事件頻率) |
按照發生頻率列出工作負載中的所有事件 |
Index Detail(Current)(索引細節(當前)) |
定義索引及工作負載引用的屬性 |
Index Detail(Recommended)(索引細節(建議)) |
和索引細節(當前)相同,但顯示資料庫引擎調整顧問所建議的索引資訊。 |
Index Usage(Current)(索引使用(當前)) |
列出索引和工作負載引用的百分比 |
Index Usage(Recommended)(索引使用(建議)) |
和索引使用(當前)報告相同,但是出於建議的索引 |
Statement Cost(語句開銷) |
列出的建議實施的情況下每個語句的效能改進 |
Statement Cost Range(語句開銷範圍) |
將開銷的改進分為百分比,以顯示可以從給定的每組修改中得到多少益處 |
Statement Detail(語句細節) |
列出工作負載中的語句、開銷以及如何建議實施減少的開銷 |
Statement-to-Index Relationship(語句與索引的關係) |
列出單個語句引用的索引。有當前和建議的版本 |
Table Access(表訪問) |
列出工作負載引用的表 |
View-to-Table Relationship(檢視與表的關係) |
列出事物化索引引用的表 |
Workload Analysis(工作負載分析) |
給出工作負載的細節,包括語句數量、開銷降低的語句數量、開銷保持不變的語句數量。 |
資料庫引擎調整顧問例項
下面以例子為說明:
1、 調整一個查詢:
SELECT soh.DueDate,soh.CustomerID
FROM Sales.SalesOrderHeaderAS soh
WHERE DueDateBETWEEN '1/1/2002'AND '1/1/2003' AND Status>4
右鍵→【在資料庫引擎顧問中分析查詢】
配置選項卡如下:
然後執行,執行結果如下:
可以看出,建議中很多沒用的索引建議刪除。這一步其實可以在所有資料庫上執行,保證資料庫索引的有效性。
你可以評估並選擇是否接受建議,也會生成相應的語句
2、 調整一個跟蹤工作負載
可以使用powershell或者sqlProfiler來建立一個跟蹤檔案並進行分析。
資料庫引擎顧問的侷限性
DTA基於輸入工作負載,如果不是實際負載,那麼建議會有可能帶有負面影響。
在生產環境中,應該確保跟蹤包含資料庫工作負載的一個完整表現。通常需要一天的跟蹤時間。還有其他的侷限性和考慮事項:
l 使用SQL:BatchCompleted事件跟蹤輸入:輸入到D他的跟蹤必須包含SQL:BatchCompleted事件,否則該向導不能確定工作負載中的查詢。
l 工作負載中的查詢分佈:在一個工作負載中,查詢可能以相同的引數值執行多次。應該優先對最常用的查詢做改進。
l 索引提示:SQL查詢中的索引提示可能阻止DTA選擇更好的執行計劃。
相關文章
- Oracle - 資料庫的記憶體調整Oracle資料庫記憶體
- 達夢資料庫引數調整方法資料庫
- [提問交流]OT的資料庫引擎可以換成InnoDB資料庫引擎嗎?資料庫
- 為什麼資料庫調整大小如此困難?資料庫
- 資料庫高io問題調查資料庫
- SQL Server資料庫調整表中列的順序操作方法及遇到問題SQLServer資料庫
- 資料庫調優資料庫
- MySQL資料庫環境如何調整磁碟IO排程演算法MySql資料庫演算法
- PostgreSQL技術大講堂 - 第32講:資料庫引數調整SQL資料庫
- 2021年資料庫回顧 - OtterTune資料庫
- 一個通過rms寫成的小型資料庫引擎,簡單的資料庫引擎資料庫
- 國產資料庫調研之——AntDB資料庫資料庫
- MySQL資料庫操作、儲存引擎MySql資料庫儲存引擎
- oracle資料庫調優描述Oracle資料庫
- LSM設計一個資料庫引擎資料庫
- MySQL資料庫儲存引擎簡介MySql資料庫儲存引擎
- 如何調整畫布內容並獲得調整大小(壓縮)的影像Base64資料?
- HBase資料庫效能調優OW資料庫
- 資料庫沒有完美的儲存引擎資料庫儲存引擎
- 資料庫表設計之儲存引擎資料庫儲存引擎
- (三) MdbCluster分散式記憶體資料庫——節點狀態變化及分片調整分散式記憶體資料庫
- 分散式資料庫技術論壇回顧分散式資料庫
- 資料庫調優和資料遷移是如何影響資料庫的RY資料庫
- 人人都在強調資料安全而不顧資料開放效率,怎麼破?
- JDBC資料庫訪問JDBC資料庫
- 萬里GreatDB資料庫的學習之路--GreatDB引數調整與系統檢視(3)資料庫
- 資料庫索引、事務及儲存引擎 (續資料庫索引儲存引擎
- 資料庫租戶能力大調研資料庫
- 掌握Oracle資料庫效能調優方法Oracle資料庫
- 共築資料庫未來 | 2021 OceanBase 原生分散式資料庫論壇回顧資料庫分散式
- Gamma調整GAM
- dg庫日誌應用慢引數調整
- 自動同步整個 MySQL/Oracle 資料庫以進行資料分析MySqlOracle資料庫
- 調整分割槽後分割槽不見的資料找到方法
- MySQL資料庫快問快答MySql資料庫
- 資料庫常見問題資料庫
- openGauss資料庫分析問題資料庫
- MySQL資料庫引擎、事務隔離級別、鎖MySql資料庫
- 資料庫系列:MySQL引擎MyISAM和InnoDB的比較資料庫MySql