国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

Sql Server tempdb原理-緩存機制解析實踐

2024-08-31 00:55:26
字體:
來源:轉載
供稿:網友
Sql Server tempdb原理-緩存機制解析實踐

Tempdb就像Sqlserver的臨時倉庫,各式各樣的對象,數據在里面進行頻繁計算,操作.大量的操作使得tempdb可能面臨很大壓力,tempdb中緩存的設計就是為了緩解這些壓力.這次就為大家介紹下tempdb的緩存機制.

在介紹緩存機制前,先簡單了解一下TempDB對象

一般我們把tempdb對象分為兩種類型用戶對象和內部對象.用戶對象指通過顯式T-sql來創造的對象(如臨時表),內部對象指通過隱式T-sql創建的對象(Worktables)

注:在引入版本控制后,也可以此單獨分類(DMV sys.dm_db_file_space_usage中單獨列出)

用戶對象

臨時表

表變量(包含表值函數返回值及表值參數)

臨時存儲過程

用戶自定義對象

用戶在線(Online)創建索引空間

內部對象

Sorts(排序溢出)

Worktables(checkdb,游標,Merge joins,假脫機,并行查詢交換溢出,LOB對象等)

Workfiles(hash join 溢出)

Version store(版本行控制)

查看對象使用情況

當tempdb數據文件很大或者有異常時,我們可以查看相應的使用情況.如何查看,沄劍的Blog中如何查看某個查詢用了多少TempDB空間有詳細腳本.

Tempdb緩存機制

Tempdb中的眾多對象緩存機制不盡相同,其中一些操作(如Sort)采用內部的機制,對用戶是不可控的,這里我們主要介紹常用對象臨時表/表變量(也是經常引發問題)的緩存機制.

臨時表緩存機制(#t)

只有使用存儲過程,觸發器,Functions才能緩存

以plan cache的形式緩存一個IAM頁和一個DatePage頁

禁止Create后使用DDL操作

禁止命名約束

可以看出臨時表的緩存是以PRoc執行計劃緩存的形式實現的.所以batch,動態sql是無法緩存的.值得注意的是既然是執行計劃緩存,我們就不能在proc中加WITH RECOMPILE關鍵字.

注意:緩存對象時局部臨時表,不包括全局臨時表.

我們通過一個簡單的實例來分析下緩存實現.

首先我們來看下一般batch的操作(非緩存)執行兩次,觀察日志情況如圖1-1

batch create code

use tempdbgocheckpointgocreate table #t(id int)insert into #t select 1drop table #tselect Operation,CONTEXT,[Transaction ID],AllocUnitId,AllocUnitName,[Page ID],[Transaction Name],Description from fn_dblog(null,null)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松潘县| 洛隆县| 礼泉县| 德江县| 尚义县| 怀来县| 嘉祥县| 边坝县| 汉中市| 太保市| 巴塘县| 旬阳县| 揭阳市| 隆林| 长宁区| 扎鲁特旗| 依兰县| 陇川县| 三穗县| 如东县| 阜康市| 镶黄旗| 油尖旺区| 格尔木市| 嘉善县| 汤阴县| 吉林省| 临夏市| 玉溪市| 承德县| 寿宁县| 工布江达县| 惠东县| 象山县| 宜宾市| 普宁市| 永定县| 定襄县| 滁州市| 拉萨市| 云梦县|