深刻的教訓——SQL Server關於TempDB的使用

Wentasy發表於2014-04-19

場景現象

 

中午查詢了流水,因未與業務人員溝通好,忘了刪選條件,導致TempDB不能分配空間,SQL Server高負載執行。

 

錯誤分析

 

我們來看看錯誤日誌:




再來看看TempDB自增長記錄:


事件

邏輯檔名

啟動時間

持續時間(毫秒)

大小變化(MB)

資料檔案自動增長

tempdev_1

2014/4/17 13:01:51

23

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 13:01:27

30

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 13:01:03

10

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 13:00:42

40

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 13:00:18

20

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:59:55

6

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:59:32

10

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:59:09

10

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:58:47

33

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:58:24

10

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:58:00

10

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:57:36

30

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:57:12

26

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:56:48

10

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:56:24

13

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:56:01

10

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:55:36

6

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:55:12

10

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:54:49

30

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:54:24

10

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:53:59

6

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:53:37

6

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:53:14

10

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:52:53

10

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:52:30

10

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:52:05

10

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:51:43

13

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:51:21

6

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:50:59

10

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:50:36

6

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:50:13

13

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:49:50

6

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:49:26

10

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:49:04

10

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:48:42

10

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:48:19

10

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:47:56

10

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:47:33

10

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:47:11

6

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:46:49

10

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:46:26

6

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:46:02

10

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:45:40

60

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:45:16

6

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:44:54

16

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:44:32

13

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:44:09

13

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:43:47

10

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:43:25

6

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:43:03

6

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:42:41

3

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:42:20

10

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:41:56

10

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:41:35

6

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:41:11

6

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:40:50

10

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:40:29

40

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:40:09

30

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:39:45

23

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:39:23

26

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:39:02

6

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:38:39

6

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:38:17

10

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:37:54

13

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:37:32

16

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:37:10

6

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:36:49

6

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:36:27

10

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:36:05

10

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:35:44

10

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:35:22

10

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:34:59

43

1,024.00

資料檔案自動增長

tempdev_1

2014/4/17 12:34:37

50

1,024.00

資料檔案自動增長

tempdev_2

2014/4/17 12:34:08

23

1,024.00

資料檔案自動增長

tempdev_0

2014/4/17 12:33:35

20

1,024.00


導致原因


查詢語句未指定刪選條件,語句如下:


--得到流水,因資料敏感問題,已將欄位使用’xx’代替。
IF EXISTS (SELECT *
           FROM   tempdb..sysobjects
           WHERE  id = Object_id(N'tempdb..#t_scfw')
                  AND type = 'U')
  DROP TABLE #t_scfw;

IF NOT EXISTS (SELECT *
               FROM   tempdb..sysobjects
               WHERE  id = Object_id(N'tempdb..#t_scfw')
                      AND type = 'U')
  SELECT tsvr.*,
         bsl.xx AS xxx,
         bsl.xx,
         bsl.xx
  INTO   #t_scfw
  FROM   #t1 AS tsvr
         JOIN t2 AS bsl
           ON tsvr.xx = bsl.xx
              AND tsvr.xx = bsl.xx
              AND tsvr.xx = bsl.xx
              AND tsvr.xx = bsl.xx
              AND bsl.xx > 0; 


總結

 

由於tempdb是儲存在SSD上,且總大小為270G。所以,在顯式使用臨時表時一定要注意資料大小。避免把tempdb空間耗盡,影響整個SQLServer的正常執行。好在設定了tempdb的最大空間,並且最大空間小於SSD硬碟的最大容量,不然伺服器的盤就會掛掉,從而導致伺服器當機,多麼痛的領悟!切忌犯如此低階錯誤,作下此文提醒和鞭策自己,凡事三思而後行

 

Good Luck!


相關文章