在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SQL Server系統數據庫-Tempdb維護

哲想軟件 ? 來源:哲想軟件 ? 2023-04-03 10:55 ? 次閱讀

在我之前關于SQLServer 系統數據庫的文章中,我們了解了作為SQLServer 安裝一部分的每個系統數據庫。當前文章將重點介紹圍繞tempdb數據庫經常遇到的問題以及如何正確解決這些問題。

SQLServer 臨時數據庫

正如該系統數據庫的名稱所示,tempdb保存由SQLServer 創建的臨時對象。它們與多個操作相關,并充當連接到SQLServer 實例的所有用戶的全局工作區。

當用戶執行操作時,Tempdb數據庫將保存以下對象類型:

臨時對象是由用戶明確創建的。它們可以是本地或全局臨時表和索引、表變量、表值函數中使用的表和游標。

由數據庫引擎創建的內部對象,如

存儲假脫機、游標、排序和臨時大對象(LOB)的中間結果的工作表。

執行哈希聯接或哈希聚合操作時的工作文件。

如果SORT_IN_TEMPDB設置為ON,以及其他操作(如GROUPBY、ORDERBY 或SQLUNION查詢),則創建或重建索引時的中間排序結果。

支持行版本控制功能的版本存儲,通用版本存儲或在線索引構建版本存儲使用tempdb數據庫文件。

每次SQLServer 服務啟動時都會創建Tempdb數據庫。因此,可以將tempdb數據庫創建時間視為SQLServer 服務啟動時間的近似值。我們可以使用下面顯示的查詢從sys.databasesDMV 中識別它:

9a3575fc-d1bb-11ed-bfe3-dac502259ad0.png

9a5046f2-d1bb-11ed-bfe3-dac502259ad0.png

但是,SQLServer Service的實際啟動涉及以特定順序啟動所有系統數據庫。它可能發生得比tempdb創建時間早一點。我們可以通過在sys.dm_os_sys_infoDMV上執行以下查詢,使用sys.databasesDMV獲取值。

9a779586-d1bb-11ed-bfe3-dac502259ad0.png

9a900ecc-d1bb-11ed-bfe3-dac502259ad0.png

該ms_ticks列指定自從計算機或服務器啟動的毫秒數。sqlserver_start_time_ms_ticks列指定自SQLServer服務啟動時ms_ticks數字以來的毫秒數。

我們可以在SQLServer 錯誤日志中找到有關啟動SQLServer 服務時啟動的數據庫順序的更多信息

在SSMS中,展開Management> SQL Server Error Logs > 打開當前錯誤日志。應用Starting updatabase過濾器并單擊Date 以升序對其進行排序:

9aad07a2-d1bb-11ed-bfe3-dac502259ad0.png

我們可以看到,在啟動SQLServer 服務時,master數據庫已經先啟動了。然后是所有用戶數據庫和所有其他系統數據庫。最后,tempdb啟動。您還可以通過執行xp_readerrorlog系統過程以編程方式獲取此信息:

9ae4f18a-d1bb-11ed-bfe3-dac502259ad0.png

注意:如果SQLServer 服務最近沒有重新啟動,并且SQLServer錯誤日志被回收,這可能會將較舊的錯誤日志推送到較舊的文件,則上述兩種方法可能都不會顯示必要的信息。在這種情況下,我們可能需要掃描存檔的SQLServer 錯誤日志文件中的數據。

SQLTempDB 數據庫中的常見問題

由于tempdb為所有用戶會話或活動提供了一個全局工作區,如果不仔細配置,它可能成為用戶操作的性能瓶頸。在我之前的文章中,我們討論了在tempdb數據庫中實施的推薦最佳實踐。但是,即使在實施它們之后,我們也可能經常遇到問題:

跨tempdb數據文件的文件增長不均。

Tempdb數據文件正在增長到一個巨大的價值,需要縮小Tempdb。

TempDB數據文件中的文件增長不均

從SQLServer 2000 開始,默認建議是根據服務器中可用的邏輯核心數擁有多個數據文件。

當我們有多個數據文件時,例如下圖中的4個tempdb數據文件,tempdb數據文件的自動增長將以循環方式發生64MB,從tempdev> temp2 > temp3 > temp4 > tempdev >等開始在。

如果其中一個文件大小由于某種原因無法自動增長,則會導致某些文件與其他文件相比變得非常大。這會導致對大文件造成額外過載,并對tempdb數據庫產生負面性能影響。

我們需要手動確保所有tempdb數據文件在任何時間點手動均勻大小以避免爭用或性能問題,直到SQLServer 2014。從SQLServer 2016開始及之后的版本,Microsoft通過實現一些功能改變了這種行為,這些將在本文后面討論。

9b0fef2a-d1bb-11ed-bfe3-dac502259ad0.png

為了克服上述性能問題,SQLServer 引入了2個名為1117和1118的跟蹤標志以避免圍繞tempdb的爭用問題。

跟蹤標志1117– 啟用單個文件組中所有文件的自動增長

跟蹤標志1118– 為tempdb啟用UNIFORMFULL EXTENTS

跟蹤標志1117

如果沒有啟用跟蹤標志1117,每當tempdb配置有多個均勻大小的數據文件并且數據文件需要自動增長時,默認情況下SQLServer 將嘗試以循環方式增加文件大小(如果所有文件)。如果數據文件的大小不均勻,則SQLServer 將嘗試增加tempdb的最大數據文件的大小,并將使用這個較大的文件進行大多數用戶操作,從而導致tempdb爭用問題。

為了解決這個問題,SQLServer 引入了TraceFlag 1117。一旦啟用,如果文件組中的一個文件需要自動增長,它將自動增長該文件組中的所有文件。它解決了tempdb爭用問題。但是,問題是一旦啟用了跟蹤標志1117,就會為所有用戶數據庫配置自動增長。

跟蹤標志1118

跟蹤標志1118用于啟用UNIFORMFULL EXTENTS。讓我們退一步來了解SQLServer 如何存儲基本數據。

頁是SQLServer 中的基本存儲單位,大小為8千字節(KB)。

Extent是一組8個物理上連續的頁面,大小為64KB(8*8KB)。根據Extent中存儲數據的對象或所有者的數量,Extent可以分為:

UniformExtents是由單個對象或所有者使用或訪問的8個連續頁面;

MixedExtents – 8 個連續頁面被最少2個和最多8個對象或所有者使用或訪問

啟用跟蹤標志1118將允許tempdb具有統一的范圍,從而獲得更好的性能。

如何啟用跟蹤標志1117和1118

可以通過多種方法啟用跟蹤標志。您可以從以下選項中定義合適的方式:

SQLServer 服務啟動參數

即使在SQL服務重新啟動后也永久可用。推薦的方法是通過SQLServer 服務啟動參數啟用TraceFlags 1117 和1118。

打開SQLServer Configuration Manager并單擊SQLServer Services以列出該服務器中的可用服務:

9b3577cc-d1bb-11ed-bfe3-dac502259ad0.png

右鍵單擊SQLServer (MSSQLSERVER)>Properties>StartupParameters

在空白字段中鍵入–T以指示TraceFlag。

提供值1117和1118,如下所示。

單擊Add將跟蹤標志添加為啟動參數。

9b5402e6-d1bb-11ed-bfe3-dac502259ad0.png

然后單擊 OK為SQLServer 的此實例永久添加跟蹤標志。重新啟動SQLServer Service以反映更改。

DBCCTRACEON (, -1)

全局啟用跟蹤標志。SQLServer 服務將在服務重新啟動時丟失跟蹤標志。要全局啟用跟蹤標志,請在新的查詢窗口中執行以下腳本:

9b77703c-d1bb-11ed-bfe3-dac502259ad0.png

DBCCTRACEON ()

在會話級別啟用跟蹤標志。它僅適用于用戶創建的當前會話。要在會話級別啟用跟蹤標志,請在新查詢窗口中執行以下腳本:

9b972134-d1bb-11ed-bfe3-dac502259ad0.png

要查看在SQLServer 實例中啟用的跟蹤標志列表,我們可以使用DBCCTRACESTATUS命令:

9bba54f6-d1bb-11ed-bfe3-dac502259ad0.png

正如我們所見,跟蹤標志1117和1118在我的實例中與Session一起全局啟用。

要關閉跟蹤標志,我們可以使用DBCCTRACEOFF 命令,例如:

9bdc9444-d1bb-11ed-bfe3-dac502259ad0.png

SQLServer 2016 TempDB 增強功能

在從SQLServer 2000 到SQLServer 2014 的SQLServer 版本中,我們必須啟用跟蹤標志1117和1118以及對tempdb的完整監控以避免tempdb爭用問題。從SQLServer 2016 及更高版本開始,默認實現跟蹤標志1117和1118。

但是,根據我的個人經驗,最好將tempdb預先增長到一個巨大的大小,以避免多次自動增長的需要,并消除不均勻的文件大小或SQLServer 廣泛使用的單個文件。

我們可以驗證TraceFlag 1117 和1118在SQLServer 2016 中是如何實現的:

設置文件組內所有文件的自動增長的跟蹤標志1117現在是文件組的屬性。我們可以在創建新文件組或修改現有文件組時對其進行配置。

要驗證Filegroup的自動增長屬性,請從sys.filegroupsDMV執行以下腳本:

9bf0d67a-d1bb-11ed-bfe3-dac502259ad0.png

要修改AdventureWorks數據庫的主文件組的自動增長屬性,我們使用AUTOGROW_ALL_FILES執行以下腳本以平均自動增長所有文件或使用AUTOGROW_SINGLE_FILE僅允許自動增長單個數據文件。

9c1bebee-d1bb-11ed-bfe3-dac502259ad0.png

默認情況下,為tempdb和從SQLServer 2016 開始的所有用戶數據庫啟用設置數據文件的統一范圍屬性的跟蹤標志1118。我們無法更改tempdb的屬性,因為它現在僅支持UniformExtent 選項。

對于用戶數據庫,我們可以修改這個參數。默認情況下,系統數據庫master、model和msdb支持混合范圍,并且也不能更改。

要修改用戶數據庫的混合頁面分配屬性值,請使用以下腳本:

9c3195d4-d1bb-11ed-bfe3-dac502259ad0.png

為了驗證混合頁分配屬性,我們可以從sys.databasesDMV查詢is_mixed_page_allocation_on列,值為0,表示統一范圍頁分配,1表示混合范圍頁分配。

9c452a36-d1bb-11ed-bfe3-dac502259ad0.png

9c60914a-d1bb-11ed-bfe3-dac502259ad0.png

TempDB數據文件變大,需要壓縮TempDB

在SQLServer2014或更早的版本中,如果沒有將跟蹤標志1117和1118與tempdb數據庫創建的多個數據文件正確配置,其中一些文件將不可避免地變大。如果發生這種情況,DBA通常會嘗試縮小tempdb數據文件。但這是一個處理這種情況不恰當的方法。

還有其他選項可用于縮小tempdb。

讓我們考慮可用于Shrinktempdb 的DBCC命令以及執行這些操作的影響。

DBCC收縮數據庫

該DBCCSHRINKDATABASE控制臺命令是通過縮小數據日志文件的末尾。

要成功收縮數據庫,該命令需要文件末尾的可用空間。如果文件末尾有任何活動事務,則無法縮小數據庫文件。

執行DBCCSHRINKDATABASE的影響是它會嘗試清除每個數據文件或日志文件末尾的可用空間,這些空間可能已為表數據的未來增長保留。因此,運行此命令可能會導致文件大小不均勻,從而導致tempdb爭用問題。

縮小用戶數據庫(例如Adventureworks數據庫)的語法是

9c89c9d4-d1bb-11ed-bfe3-dac502259ad0.png

DBCC收縮文件

該DBCCSHRINKFILE控制臺命令的工作原理類似DBCCSHRINKDATABASE,但它縮小了指定的數據庫數據或日志文件。

如果您發現某個特定的tempdb數據文件很大,我們可以嘗試使用DBCCSHRINKFILE 縮小該特定項目,如下所示。

在tempdb上使用此命令時要小心,因為如果文件收縮到低于或高于其他數據文件的值,則該特定數據文件將無法有效使用。或者,它會被更頻繁地使用,從而導致tempdb爭用問題。

在AdventureWorks數據文件上執行DBCCSHRINKFILE 操作到1GB(1024 MB) 的語法為:

9c9efd2c-d1bb-11ed-bfe3-dac502259ad0.png

DBCCDROPCLEANBUFFERS

DBCCDROPCLEANBUFFERS控制臺命令用于清除Buffer池中的所有干凈緩沖區,以及columnstore對象池中的columnstore對象。

只需執行以下命令:

9cb20228-d1bb-11ed-bfe3-dac502259ad0.png

DBCCFREEPROCCACHE

該DBCCFREEPROCCACHE命令清除所有的存儲過程的執行計劃緩存。

SQLServer 使用過程執行計劃緩存來更快地執行相同的過程調用。執行DBCCFREEPROCCACHE 后,PlanCache 被清除。因此,當在實例中執行存儲過程時,SQLServer 必須再次創建該緩存。在生產數據庫實例中執行時會留下嚴重的負面影響。

不建議在生產數據庫實例上執行DBCCFREEPROCCACHE!

執行DBCCFREEPROCCACHE 的語法如下:

9ccbecf6-d1bb-11ed-bfe3-dac502259ad0.png

DBCCFREESESSIONCACHE

該DBCCFREESESSIONCACHE命令將清除SQLServer實例的分布查詢連接緩存。當在特定SQLServer 實例上執行許多分布式查詢時,這將很有幫助。

執行DBCCFREESESSIONCACHE 的語法是:

9ce12422-d1bb-11ed-bfe3-dac502259ad0.png

DBCCFREESYSTEMCACHE

該DBCCFREESYSTEMCACHE命令清除所有緩存中的所有未使用的緩存條目。默認情況下,SQLServer 這樣做是為了讓更多內存可用于新操作。但是,我們可以使用以下命令手動執行它:

9cf83748-d1bb-11ed-bfe3-dac502259ad0.png

.眾所周知,tempdb存儲所有臨時用戶對象或內部對象,包括執行計劃緩存、緩沖池數據、會話緩存和系統緩存。因此,執行上述6條DBCC命令將有助于清除阻止正常收縮過程的tempdb數據文件。

盡管我們已經通過各種方法完成了如何縮小tempdb的步驟,但下面列出了處理tempdb數據庫的推薦最佳實踐:

A.如果可能,重新啟動SQLServer 服務以均勻地重新創建tempdb數據文件。潛在的影響是,我們將丟失上面討論的所有執行計劃和其他緩存信息。

B.將tempdb數據文件預增長到保存tempdb數據文件的驅動器中可用的巨大文件大小。這將防止SQLServer 在SQLServer 2014 及更早版本中不均勻地增加文件大小。

如果由于RTO或RPO導致SQLServer 服務無法重新啟動,請在清楚了解影響后嘗試上述DBCC命令。

D.收縮tempdb數據庫或數據文件不是推薦的方法,因此永遠不要在您的生產環境中這樣做,除非沒有其他選擇。

結論

我們已經了解了有關tempdb工作原理的更多信息,以便我們可以配置tempdb以獲得更好的性能,從而避免tempdb上的爭用問題。我們還討論了tempdb中經常遇到的問題、SQLServer 中跨各種版本的可用措施以及如何有效地處理它。除此之外,我們還研究了為什么在處理tempdb數據庫時不推薦使用收縮tempdb數據庫或數據文件的方法。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • SQL
    SQL
    +關注

    關注

    1

    文章

    771

    瀏覽量

    44192
  • 數據庫
    +關注

    關注

    7

    文章

    3841

    瀏覽量

    64545

原文標題:SQL Server 系統數據庫- Tempdb 維護

文章出處:【微信號:哲想軟件,微信公眾號:哲想軟件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    dbForge Studio For SQL Server:用于有效開發的最佳SQL Server集成開發環境

    管理 單元測試 數據庫文檔 測試數據生成 數據導出和導入 為什么dbForge Studio For SQL Server是一個好的選擇 更
    的頭像 發表于 01-16 10:36 ?43次閱讀

    SqlServer數據恢復—SqlServer數據庫數據恢復案例

    一塊硬盤上存放的SqlServer數據庫,windows server操作系統+NTFS文件系統。由于誤操作導致分區損壞,需要恢復硬盤里的SqlServer
    的頭像 發表于 01-09 11:15 ?67次閱讀
    SqlServer<b class='flag-5'>數據</b>恢復—SqlServer<b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復案例

    不用編程不用電腦,快速實現多臺Modbus協議的PLC、智能儀表對接SQL數據庫

    的參數按照任務組自動生成SQL命令語句,實現多設備SQL命令與數據庫軟件對接,支持MySQL、SQLServer、PostgreSQL、Oracle等。
    的頭像 發表于 12-09 10:53 ?299次閱讀
    不用編程不用電腦,快速實現多臺Modbus協議的PLC、智能儀表對接<b class='flag-5'>SQL</b><b class='flag-5'>數據庫</b>

    SQL數據庫設計的基本原則

    SQL數據庫設計的基本原則 1. 理解需求 在設計數據庫之前,首先要與業務團隊緊密合作,了解業務需求。這包括數據的類型、數據的使用方式、
    的頭像 發表于 11-19 10:23 ?267次閱讀

    SQL與NoSQL的區別

    在信息技術領域,數據庫是存儲和管理數據的核心組件。隨著互聯網的發展和大數據時代的到來,對數據庫的需求也在不斷變化。SQL和NoSQL作為兩種
    的頭像 發表于 11-19 10:15 ?205次閱讀

    數據庫數據恢復—SQL Server數據庫出現823錯誤的數據恢復案例

    SQL Server數據庫故障: SQL Server附加數據庫出現錯誤823,附加
    的頭像 發表于 09-20 11:46 ?382次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—<b class='flag-5'>SQL</b> <b class='flag-5'>Server</b><b class='flag-5'>數據庫</b>出現823錯誤的<b class='flag-5'>數據</b>恢復案例

    干貨分享 如何采集OPC DA數據并存儲到SQL Server數據庫

    在工業自動化系統中,將OPC DA數據采集并存儲到SQL Server數據庫具有顯著的應用價值。本文手把手教您完成這一操作,實現
    的頭像 發表于 08-09 10:46 ?669次閱讀
    干貨分享  如何采集OPC DA<b class='flag-5'>數據</b>并存儲到<b class='flag-5'>SQL</b> <b class='flag-5'>Server</b><b class='flag-5'>數據庫</b>?

    數據庫數據恢復—SqlServer數據庫底層File Record被截斷為0的數據恢復案例

    SQL Server數據庫數據無法被讀取。 經過數據庫數據恢復工程師的初步檢測,發現
    的頭像 發表于 07-26 11:27 ?420次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—SqlServer<b class='flag-5'>數據庫</b>底層File Record被截斷為0的<b class='flag-5'>數據</b>恢復案例

    恒訊科技分析:sql數據庫怎么用?

    SQL數據庫的使用通常包括以下幾個基本步驟: 1、選擇數據庫系統: 選擇適合您需求的SQL數據庫系統,如MySQL、PostgreSQL、M
    的頭像 發表于 07-15 14:40 ?388次閱讀

    數據庫數據恢復—SQL Server數據庫所在分區空間不足報錯的數據恢復案例

    SQL Server數據庫數據恢復環境: 某品牌服務器存儲中有兩組raid5磁盤陣列。操作系統層面跑著
    的頭像 發表于 07-10 13:54 ?538次閱讀

    數據庫數據恢復—數據庫所在分區空間不足導致sqlserver故障的數據恢復案例

    數據。服務器上部署sql server數據庫數據庫存放在C盤。 數據庫故障: 工作人員
    的頭像 發表于 05-22 13:16 ?501次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—<b class='flag-5'>數據庫</b>所在分區空間不足導致sqlserver故障的<b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復—raid5陣列上層Sql Server數據庫數據恢復案例

    數據庫數據恢復環境: 5塊硬盤組建一組RAID5陣列,劃分LUN供windows系統服務器使用。windows系統服務器內運行了Sql
    的頭像 發表于 05-08 11:43 ?536次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—raid5陣列上層<b class='flag-5'>Sql</b> <b class='flag-5'>Server</b><b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復—ndf文件大小變為0KB的數據恢復案例

    存儲設備損壞導致存儲中SQL Server數據庫崩潰。對數據庫文件進行恢復后,用戶發現有4個ndf文件的大小變為0KB。該SQL
    的頭像 發表于 05-07 11:19 ?439次閱讀

    數據庫數據恢復—Sql Server數據庫文件丟失的數據恢復案例

    服務器數據恢復環境: 一臺安裝windows server操作系統的服務器。一組由8塊硬盤組建的RAID5,劃分LUN供這臺服務器使用。 在windows服務器內裝有SqlServer數據
    的頭像 發表于 04-11 15:38 ?935次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—<b class='flag-5'>Sql</b> <b class='flag-5'>Server</b><b class='flag-5'>數據庫</b>文件丟失的<b class='flag-5'>數據</b>恢復案例

    為什么需要監控SQL服務器?

    如今,大多數桌面、移動、云、物聯網和其他應用程序都嚴重依賴數據庫。為了支持這些,SQL Server部署、容量和工作負載不斷增長。當這種情況發生時,企業需要確保數據
    的頭像 發表于 02-19 17:19 ?499次閱讀
    主站蜘蛛池模板: 美女流白浆网站| 在线观看视频在线观看| 成人国产日本亚洲精品| 日本在线观看www| 日本特级视频| 男女爱爱爽爽福利免费视频| 久青草视频免费视频播放线路1| 特黄特色大片免费播放器9| 亚洲视频一二三| 操久久| 1024亚洲视频| 国产在线观看www鲁啊鲁免费| 国产精品福利久久2020| 欧美成人午夜片一一在线观看| 9984四虎永久免费网站| 国产女人18毛片水真多18精品| 欧美高清性色生活| 色批| 色偷偷免费视频| 美女一级一级毛片| 国产精品免费观看网站| 午夜看一级特黄a大片| 久青草国产手机视频免费观看| 久久综合久色欧美婷婷| 超黄视频网站| 在线女同免费观看网站| freesexvideo性欧美2| 97菊爱网| 美女黄色毛片| 国产呦系列呦交| 国产成人啪精品午夜在线观看| 狠狠干狠狠色| 色尼玛亚洲综合| 丁香婷婷社区| 夜夜精品视频一区二区| 久久天天躁狠狠躁夜夜免费观看 | 一区二区三区四区在线免费观看| 好紧好爽太大了h视频| 高h办公室| 日本黄a| 99久久99久久久99精品齐|