2018年9月1日 星期六

[SQL Server]TempDB的基本調教

TempDB可以想像是SQL Server放在硬碟的暫存檔一樣,
除了在記憶體不足時將會使用TempDB來做運算之外,
在其它SQL Server會使用到TempDB的情況如下:
1.在下SQL Query時使用Group by, Order by,Union,distinct,sort等。
2.最常見的是Query中使用暫存表(#table_name or ##table_name)來做運算,切記使用後記得要drop暫存表以免TempDB愈長愈大
3.rebuild index,DBCC checkDB以及使用cursor時。

如何觀察TempDB是否引起IO latch?

有時侯在查看活動監視器時會發現CPU Loading會拉高到80%以上並持續一段時間,
此時可以輸入以下SQL Query來看是不是太多DB在等待使用TempDB,因而導致CPU在等待IO回應。
Select session_id, wait_type, wait_duration_ms, resource_description From sys.dm_os_waiting_tasks Where (wait_type like 'pagelatch_%' or wait_type like 'pageiolatch_%') and resource_description like '2:%'
那麼該如何減少多個DB去搶TempDB的資源的情況發生呢?
依照微軟的建議的作法,需要依照該台主機的CPU總Core數/2的數量來建立TempDB資料檔案,
例如總共有8 Core/2則要建立4個TempDB資料檔案,其建立的Script如下:
USE [master] GO ALTER DATABASE [tempdb] ADD FILE ( NAME = N'temp2',  FILENAME = N'E:\Program Files\Microsoft SQL Server 2016\MSSQL13.MSSQL2K16\MSSQL\DATA\temp2.ndf'SIZE = 8192KB , FILEGROWTH = 65536KB ) GO ALTER DATABASE [tempdb] ADD FILE ( NAME = N'temp3',  FILENAME = N'E:\Program Files\Microsoft SQL Server 2016\MSSQL13.MSSQL2K16\MSSQL\DATA\temp3.ndf'SIZE = 8192KB , FILEGROWTH = 65536KB ) GO --⋯⋯⋯⋯⋯⋯以此類推下去
TempDB如果要加強讀寫速度,建議可以規劃將檔案分散建立在不同的硬碟。

沒有留言:

張貼留言

[SQL Server]主動通知SQL Server發生錯誤的機制

當SQL Server有特定錯誤發生時,管理人員也沒有時間經常去查看SQL Server錯誤檔, 於是有時特定錯誤可能很重要時,但卻沒有人被通知到,現在小弟實作一個主動通知的機制。 首先先新增警示,在這裡選擇想要被通知的錯誤訊息的等級或其它設定 接著在回應頁籤中,勾選執...