我們真的應該為每個 SQL 實例打開跟踪標誌 1118 嗎?
建議每個 SQL 實例都開啟 TF 1118
Paul 對使用跟踪標誌 1118 的建議是什麼?從 SQL Server 2000 開始,每個人都應該在 SQL Server 的所有實例上打開它。開啟它沒有任何不利之處。 保羅·S·蘭德爾
它記錄在KB 2154845中,雖然它確實會影響所有數據庫,但最大的影響是對 tempdb
這意味著實例上每個數據庫中的每個新分配的對像都會獲得自己的私有 64KB 數據。Tempdb 通常是創建大多數對象的地方,因此它在那裡發揮最大的作用。 肯德拉小
我環顧四周,沒有發現任何人建議不要使用它。那麼,我們是否應該將其作為我們流程的一部分,以便在創建新實例時將其打開,並在出現機會時將其追溯添加到現有 SQL 實例中?
我正在使用 SQL 2000 到 2014 年,還沒有使用任何 2016 年。我們按照說明為每個處理器使用 1 個 tempdb,最多 8 個。
對於 SQL Server 2000 → 2014
我通常同意 Paul Randal 的觀點,這是你可以隨時打開的東西,但我確實有點猶豫說它應該一直打開,無論你觀察到什麼,你都應該讓它保持打開狀態(無論有沒有足夠的測試)。
人們可能對 tempdb 配置設置不當,例如文件不足、文件太小、文件大小不均、增長設置不當、未啟用即時文件初始化以及臨時表未記憶體和重用的不良編碼症狀(請參閱此處和在這裡)。在這種情況下,在完美的風暴工作負載下,可以想像跟踪標誌實際上可能會導致更差的整體性能。考慮一下這些設置不是最佳的情況,並且您有大量使用者都試圖創建自己的臨時表的非記憶體副本,並且他們都在使用自己的專用範圍而不是共享它們。即使我不能隨意產生它,也可能存在某種程度的專用擴展區的成本超過了分配爭用節省的成本。
僅僅因為保羅沒有看到天平在某個門檻值處傾斜的情況並不意味著這是不可能的,只是不太可能/不常見。
您可以通過遵循所有其他最佳實踐來避免這種情況,因為我懷疑這確實需要一場完美的風暴,我只是覺得沒有足夠的力量可以說總是無一例外。
對於 SQL Server 2016
在 SQL Server 2016 中,統一範圍分配是預設行為 - 請參閱Bob Dorr 的“它執行得更快”關於它的文章。除此之外,上述許多相同的事情都是正確的。
您不能為 tempdb 關閉它;因此,實際上,跟踪標誌 1118 在 2016 年始終處於打開狀態,並且是永久性的。因此,我的建議是確保 tempdb 在您目前實例上的 TF 1118 和目前工作負載下有效工作,以避免升級時出現任何意外(此時您將無法再選擇關閉它)。
如果您想在 2016 年為使用者數據庫關閉它,請使用
ALTER DATABASE
:ALTER DATABASE MyDatabase SET MIXED_PAGE_ALLOCATION ON;