国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SQL Server 2014里的針對基數估計的新設計(New Design for Cardinality Estimation)

2024-08-31 00:54:14
字體:
來源:轉載
供稿:網友
SQL Server 2014里的針對基數估計的新設計(New Design for Cardinality Estimation)

對于SQL Server數據庫來說,性能一直是一個繞不開的話題。而當我們去分析和研究性能問題時,執行計劃又是一個我們一直關注的重點之一。

我們知道,在進行編譯時,SQL Server會根據當前的數據庫里的統計信息,在一定的時間內,結合本機資源,挑選一個當前最佳的執行計劃去執行該語句。

那么數據庫分析引擎如何使用這些統計信息的呢?數據庫引擎會根據數據庫里的統計信息,去計算每次操作大約返回多少行。這個動作稱之為基數計算(cardinalityestimation)。數據庫分析引擎會基于這些信息判斷選擇邏輯或物理的操作符,操作成本等等,生成一系列執行計劃并最終挑選一個合適的執行計劃。

在SQL Server 2014中,基數計算與之前的版本相比出現了較大的變化,并且這些變化對執行計劃的生成有客觀的促進作用。新的基數計算相對于之前的版本而言并不是增加了一個新的補丁,修復了一些bug,可以說是一次重寫,甚至基于的數學計算模型也發生了變化。

新的基數計算主要適用于DW(數據倉庫)的場景,會給DW系統帶來較大的性能提升。

就效果而言,由于采用的數學模型的一些變化,新的基數計算在對返回行數預估上,較以往往往會更加準確。

以下兩個例子是對新舊基數計算的對比。

1. 獨立性假設

測試語句如下:

1 Select *2 From Cars3 Where Make=‘Honda’ AND Model =‘Civic’

在測試數據庫中運行上述語句,其中表的行數是1000行,Make=’Honda’ 有200行,Model=’Civic’有50行。

在之前般的CE中,會認為這兩個篩選條件之前沒關系,所以預測返回行數是0.05 * 0.2* 1000 = 10, 而在新的版本CE中,會認為這兩者之間應該是有關系的,因此會采用指數退避算法,預測返回值是0.05* sqrt(0.2) * 1000 = 22.36。

實際返回行數50行。

因此新的CE會更加的保守,在這種情況下會更加準確。

2. 連接(join)的變化

當出現等值連接時,會采用下面的計算方法:

  • 選取兩個輸入中distinct值較少的一個
  • 上面步驟取得的值乘以兩邊的平均頻率、

例如

新的基數計算涉及的修改較多,例如還有針對ascending key場景所做的修改,使用統計信息方法的修改等等。但是對傳統的一些內容仍然保持原樣,例如表變量預估為一行,存儲過程中的本地變量會認為是未知值,parametersniffing 問題仍然可能發生等等。

但是總整體而言,新的基數計算給DW場景的工作負載會帶來客觀的性能提升,包括編譯時間和執行時間兩方面。前述中我們提到了統計信息,在SQLServer 2014中,會有一個新的統計信息概念,增量統計信息(Incremental Statistics)。

一般說來,統計信息記錄的是列或者索引中的數據分布,數據密度等等。當用戶打開自動統計信息更新后,假如數據發生了大約20%的變化,那么會觸發統計信息自動更新。

在舊的版本數據庫中,關于統計信息會遇有以下兩個不足之處:1. 對于非常大的表,20%的自動統計信息閾值太大。2.重建統計信息需要重新掃描或者重新取樣掃描整個表,假如能做到只掃描新的數據,那么更佳。

以此為目標,SQL Server 2014 出現了一個新的功能增量統計信息(IncrementalStatistics)。

Incremental Statistics有以下特點:

  1. 它適用于分區表,并且主要的數據更新發生在新的分區
  2. 每個分區都有自己的統計信息對象,全局會將這些統計更新合并
  3. 由于多數數據改變發生的新的分區,因此更新統計信息時,我們只需要更新新區的統計更新,系統會將其在與其他的分區的統計信息更新。這樣會避免去重建其他分區的統計信息。
  4. 分析引擎使用全局統計信息而不是每個分區的統計信息。
  5. 當自動統計信息打開后,對每個分區而言,觸發的閾值為該分區20%的數據更新。對全局而言是平均分區大小的20%。

原文鏈接:http://blogs.msdn.com/b/apgcdsd/archive/2014/12/25/sql-2014-7-new-design-for-cardinality-estimation.aspx


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涟水县| 敖汉旗| 安岳县| 舒城县| 天峨县| 当阳市| 青岛市| 安龙县| 沂南县| 封开县| 奈曼旗| 孟村| 和龙市| 巩留县| 邵阳市| 黄冈市| 双桥区| 盐边县| 汨罗市| 石狮市| 乌兰浩特市| 台前县| 长丰县| 白朗县| 建昌县| 旌德县| 长泰县| 禄丰县| 礼泉县| 麻江县| 龙陵县| 织金县| 合水县| 丰宁| 崇州市| 遂宁市| 临桂县| 互助| 册亨县| 安图县| 江永县|