這裏是一個簡單的演示腳本,開始您的學習有關SQL Server內部的旅程。要查看查詢的單個操作,請轉至Paul Randal's SQLSkills Blog。
此博客上的其他帖子將涵蓋DBCC PAGE這樣的主題,它允許您查看PAGE和DBCC IND的內容,它將向您顯示錶/索引的分配圖。我建議閱讀詳細介紹所有這些主題的Microsoft SQL Server 2008內部件副本。
事務日誌記錄演示腳本
對於兩個選擇失誤被顯示爲物理讀取和預讀,這些都是從磁盤讀入緩衝池。查詢引擎然後使用這些頁面,這是邏輯讀取。因此,對於熱選中的io統計信息,它沒有物理讀取或預讀讀取,因此所有頁面都已經存在於緩衝池中。
/* -- Cleanup Script
USE master
DROP DATABASE ExampleDB
*/
SET NOCOUNT ON
SET STATISTICS IO OFF
GO
CREATE DATABASE ExampleDB
GO
USE ExampleDB
GO
-- Force a CHECKPOINT to CLEAR the Transaction Log
CHECKPOINT
GO
-- Show Empty Transaction Log
SELECT * FROM fn_dblog(NULL,NULL)
GO
-- CREATE SIMPLE TABLE
CREATE TABLE NewTable
(
A int identity NOT NULL PRIMARY KEY,
B char(8000) NOT NULL DEFAULT ('')
)
GO
-- Show Transaction Log With CREATE TABLE records
SELECT * FROM fn_dblog(NULL,NULL)
GO
-- Force a CHECKPOINT to CLEAR the Transaction Log
CHECKPOINT
GO
PRINT 'INSERT Start'
GO
INSERT NewTable
VALUES (DEFAULT)
GO 1000
PRINT 'INSERT End'
GO
-- Show Transaction Log With INSERT records
SELECT * FROM fn_dblog(NULL,NULL)
GO
-- Turn On IO Statistics (these appear in the messages tab)
SET STATISTICS IO ON
GO
-- Force a CHECKPOINT to CLEAR the Transaction Log and modified buffer pages
CHECKPOINT
GO
-- DROP CLEAN BUFFERS to empty cache
DBCC DROPCLEANBUFFERS
GO
PRINT 'SELECT Start Cold Cache'
GO
SELECT * FROM NewTable
GO
PRINT 'SELECT End Cold Cache'
GO
PRINT 'SELECT Start Warm Cache'
GO
SELECT * FROM NewTable
GO
PRINT 'SELECT End Warm Cache'
GO
-- Force a CHECKPOINT to CLEAR the Transaction Log
CHECKPOINT
GO
DROP TABLE NewTable
-- Show Transaction Log With DROP TABLE records
SELECT * FROM fn_dblog(NULL,NULL)
GO
緩衝池的內容的出發點是這樣的DMV
SELECT *
FROM sys.dm_os_buffer_descriptors
關於你的問題點2.2的日誌中尋找,直到PageSplit擴展事件在未來得到改善的最好的地方版。 [這裏的一些示例代碼](http://sqlblog.com/blogs/michael_zilberstein/archive/2011/04/25/35175.aspx) –