程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL Server誤區30日談 第15天 CheckPoint只會將已提交的事務寫入磁盤

SQL Server誤區30日談 第15天 CheckPoint只會將已提交的事務寫入磁盤

編輯:MSSQL

SQL Server誤區30日談 第15天 CheckPoint只會將已提交的事務寫入磁盤。本站提示廣大學習愛好者:(SQL Server誤區30日談 第15天 CheckPoint只會將已提交的事務寫入磁盤)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server誤區30日談 第15天 CheckPoint只會將已提交的事務寫入磁盤正文


誤區 #15:CheckPoint只會將已提交的事務寫入磁盤

毛病

這個誤區是因為太多人對日記和恢復體系缺乏周全的懂得而存在已久。CheckPoint會將自前次CheckPoint以來一切在內存中轉變的頁寫回磁盤(譯者注:也就是髒頁),或是在上一個CheckPoint讀入內存的髒頁寫入磁盤。不管事務能否曾經提交,其所影響的頁都邑在Checkpoint時寫回磁盤。但關於TempDB來講破例,由於TempDB的Checkpoint的事宜周期中其實不包括將髒頁寫回磁盤的步調。

假如你想懂得更多,請浏覽上面文章:
  • Technet 雜志文章:Understanding Logging and Recovery in SQL Server

  • 博文: How do checkpoints work and what gets logged

  • 博文: What does checkpoint do for tempdb?

    你可使用以下兩個跟蹤標志檢查CheckPoint是若何任務的。

  • 3502: 當CheckPoint開端和停止時,將相干信息寫入毛病日記

  • 3504: 將CheckPoint時寫回磁盤的頁的信息寫入毛病日記

    為了應用這個跟蹤標志,你必需針對一切線程開啟,不然你將會在毛病日記中甚麼都看不到。應用DBCC TRACEON (3502, 3504, -1) 針對一切線程開啟這兩個追蹤標志。

    上面的代碼可以證實Checkpoint會將未提交的髒頁寫回磁盤,追隨上面的步調。

CREATE DATABASE CheckpointTest; GO USE CheckpointTest; GO
CREATE TABLE t1 (c1 INT IDENTITY, c2 CHAR (8000) DEFAULT 'a'); CREATE
CLUSTERED INDEX t1c1 on t1 (c1); GO
SET NOCOUNT ON; GO
CHECKPOINT; GO
DBCC TRACEON (3502, 3504, -1); GO



上面誰人事務會發生10MB的髒頁,緊接著停止CheckPoint
[code]
BEGIN TRAN; GO INSERT INTO t1 DEFAULT VALUES; GO 1280
CHECKPOINT; GO
[html]


日記如你所見:

2012-10-17_092031

 我們可以清晰的看出,在事務沒有提交的情形下,髒頁仍然會被寫入磁盤。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved