zoukankan      html  css  js  c++  java
  • SQL SERVER读书笔记:TempDB

    每次SQL SERVER启动的时候,会重新创建。


    用于

    0、临时表

    1、排序

    2、连接(merge join,hash join)

    3、行版本控制


    临时表与表变量的区别:

    1)表变量是存储在内存中的,当用户在访问表变量的时候,SQL Server是不产生日志的,而在临时表中是产生日志的; 

      2)在表变量中,是不允许有非聚集索引的; 

      3)表变量是不允许有DEFAULT默认值,也不允许有约束; 

      4)临时表上的统计信息是健全而可靠的,但是表变量上的统计信息是不可靠的; 

      5)临时表中是有锁的机制,而表变量中就没有锁的机制。

    用临时表还是表变量?

    1)使用表变量主要需要考虑的就是应用程序对内存的压力,如果代码的运行实例很多,就要特别注意内存变量对内存的消耗。我们对于较小的数据或者是通过计算出来的推荐使用表变量。如果数据的结果比较大,在代码中用于临时计算,在选取的时候没有什么分组的聚合,就可以考虑使用表变量。 

    2)一般对于大的数据结果,或者因为统计出来的数据为了便于更好的优化,我们就推荐使用临时表,同时还可以创建索引,由于临时表是存放在Tempdb中,一般默认分配的空间很少,需要对tempdb进行调优,增大其存储的空间。 


    优化TEMPDB:

    1、使tempdb数据库得以按需自动扩展。这确保在执行完成前不终止查询,该查询所生成的存储在tempdb数据库内的中间结果集比预期大得多。   
    2、将tempdb数据库文件的初始大小设置为合理的大小,以避免当需要更多空间时文件自动扩展。如果tempdb数据库扩展得过于频繁,性能会受不良影响。   
    3、将文件增长增量百分比设置为合理的大小,以避免tempdb数据库文件按太小的值增长。如果文件增长幅度与写入tempdb数据库的数据量相比太小,则tempdb数据库可能需要始终扩展,因而将妨害性能。   


    TEMPDB满了怎么办?

    收集数据库状态信息,看看数据库都进行了什么操作,为什么会产生如此大的临时数据?以采取相应之道。可以收缩日志,甚至重启SQL SERVER。

    参考文章:

    http://support.microsoft.com/kb/307487/zh-cn

    http://technet.microsoft.com/zh-cn/library/ms176029(v=sql.105).aspx

    http://blog.csdn.net/champaignwolf/article/details/3723025


  • 相关阅读:
    appdata文件夹有什么用途?C盘appdata可以删除吗?
    白话讲MyIsam和InnoDB的区别
    MVC&&MVP
    计算机程序的思维逻辑- 函数调用的基本原理
    猫狗收养所
    博客学习分类
    Android之操作SQLite
    总结---20160508
    对栈元素排序
    集合栈
  • 原文地址:https://www.cnblogs.com/leftfist/p/4258002.html
Copyright © 2011-2022 走看看