為什麼估計記憶具有三相形狀?
另一個問題的圖表是針對 100 萬行的表。當為 10,000 行繪製時,該圖具有相當不同且更有趣的形狀。
當列長度介於 524 和 903 之間時,存在一個平台期。
這種形狀出現在我的工作和家用筆記型電腦上。(分別是 SQL Server 2017 CU27 和 2017 CU22、2019 CU8。兩個盒子都有 16GB RAM。)
這讓我認為它是經過調整的真正設計選擇,而不是人工製品。
為 SQL Server 2019 設置 BATCH_MODE_ON_ROWSTORE = OFF 幾乎沒有任何區別。除 t800 為 6688kB 關閉和 6656kB 開啟外,所需記憶體在所有大小上都相同。
這張圖怎麼會有這樣的形狀?哪些考慮因素意味著三區域解決方案在中等行數(10,000 行)而不是較大行數(100 萬行)時是最佳的?
我知道 SQL Sever 開發團隊之外的任何人都無法最終說明這個特定圖表是這種形狀的原因。但總的來說,從學術和行業經驗來看,如果我開始為假設的 DBMS 編寫記憶體管理模組,什麼樣的考慮會導致這種結果?
記憶體授予是基於預期基數和平均行大小以及由於實現細節而產生的成本的估計。
由於總撥款較少,人們可以在估計數周圍有更多的“迴旋餘地”(比如 1.4 倍)。對於較大的贈款,人們可能會選擇較低的軟糖係數(例如 1.25)。
當排序超出授予的記憶體並需要溢出到磁碟時,還可能存在與所需額外記憶體相關的固定成本。溢出數據的有效處理可能需要某種“大輸出緩衝區”。可以選擇是否使用 7470 之類的跟踪標誌來滿足這一需求。
對於一系列常見的中等大小的記憶體授權,使用固定的額外授權(比如 6MB)可能是有意義的,而不是搞亂不太可能完全正確的小而詳細的計算。這將在所需的任何固定記憶體大小(例如 512KB)之上,作為排序所需的記憶體中的絕對最小大小。
在這種排列方式中,您會看到直線的一部分傾斜度約為 1.25,另一部分傾斜度約為 1.4,中間有一個平坦的位,其中選擇了固定的附加授權。