zoukankan      html  css  js  c++  java
  • SQL Server TempDB

    TempDB是一个系统数据库,

    只有simple模式,

    每次服务器重启后都会按照Model库的配置重新创建

    TempDB只有一个文件组 Primary

    作用:存放局部临时表 全局临时表 表变量 及一些临时用法(如hash 表)

    主要存储三类对象:用户对象 内部对象 和版本存储

    权限:默认所有用户都具有访问TemDB的权限

    SQL Server2012开始 TempDB已经可以配置在故障转移中

    用户临时对象:

    1. 在TempDB中创建的实体表和上面的索引

    2. 全局临时表及上面的索引,以##开头

    3. 局部临时表及上面的索引,以#开头

    4. 表变量,以@开头

    临时表和表变量:       

    1. 统计信息:临时表和表变量的主要区别在于统计信息,表变量不会创建统计信息,或者说,统计信息要么为0,要么为1。优化器永远会把表变量当作里面只有1条数据或者没有数据的表对待。可以通过查看执行计划中的预估函数

    2. 索引:很多人误以为表变量不能创建索引,其实不然,由于它是变量,所以需要定义,也正因为如此,索引也需要预先定义,在定义了表变量以后,再使用就不能添加索引了。另外表变量只能创建主键或者唯一约束。但是即使有主键或者约束,也不会因此具有统计信息

    3. 架构修改:临时表可以修改,但是架构修改不会出现在表变量上面

    4. 存放的地方:都存放在TempDB 中,可以通过sys.dm_db_session_space_usage的DMV来查看TempDB的空间使用情况

    内部临时对象:

                    用于在查询过程中存储临时数据的对象,如Sorts 假脱机 Hash 关联和游标。

                    可以使用sys.dm_db_seesion_space_usage中internal_object_alloc_page_count列来查看,其中比较常见的是Worktable

    版本存储:

                    从sql Server 2005开始,出现的乐观并发模式,这类模式会借用TempDB来存放修改前的数据。 每一行数据被修改前,都会在TempDB中创建一个相同的行

     TempDB上的常见问题及监控

    参考书籍:

    SQL Server性能优化与管理的艺术

  • 相关阅读:
    UML 2.5版本与UML分类概述
    Android 使用MySQL直接访问数据库
    带你体验Android自定义圆形刻度罗盘 仪表盘 实现指针动态改变
    升级到Android Studio3.x遇到的问题及解决方案
    [摩斯密码表]摩斯密码对照表
    【Eclipse】eclipse中格式化代码配置方法
    Java中AWT、Swing与SWT三大GUI技术的原理与效率差异
    Mysql 5.5 replication 多数据库主从备份Master-Slave配置总结
    期望-pku-oj-1055:Tree
    MFC——从实现角度分析微云界面
  • 原文地址:https://www.cnblogs.com/qianlixing/p/6695032.html
Copyright © 2011-2022 走看看