iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 3
0
自我挑戰組

IT人員面面觀系列 第 3

[SQL Server]TempDB的基本調教

TempDB可以想像是SQL Server放在硬碟的暫存檔一樣,

除了在記憶體不足時將會使用TempDB來做運算之外,

在其它SQL Server會使用到TempDB的情況如下:

  • 在下SQL Query時使用Group by, Order by,Union,distinct,sort等。
  • 最常見的是Query中使用暫存表(#table_name or ##table_name)來做運算,切記使用後記得要drop暫存表以免TempDB愈長愈大。
  • 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如果要加強讀寫速度,建議可以規劃將資料檔案分散建立在不同的硬碟
,用意是在存取資料時有機會能使用到多個磁碟讀寫頭同時進行讀取和寫入。

參考資源:https://technet.microsoft.com/zh-tw/library/ms175527(v=sql.105).aspx

本文將同步發表於https://shareitnote.blogspot.com/


上一篇
[SQL Server]把找到的資料轉成HTML格式
下一篇
[SQL Server]在單一主機上實作資料庫鏡像機制
系列文
IT人員面面觀28

尚未有邦友留言

立即登入留言