当前位置: 首页 > 科技观察

了解tempdb对SQLServer数据库性能的影响

时间:2023-03-12 17:38:57 科技观察

本文是一篇关于提高SQLServer数据库性能的讨论。数据库频道为您推荐《SQL Server入门到精通》,让您对SQLServer数据库有更深入的了解。一、SQLServer系统数据库介绍SQLServer有四个重要的系统级数据库:master、model、msdb、tempdb.master:记录了SQLServer系统的所有系统级信息,包括实例级元数据、端点、链接服务器和系统配置设置,还会记录其他数据库是否存在以及这些数据文件的位置等。如果master不可用,数据库将不会启动。模型:在SQLServer实例上创建的所有数据库的模板。因为每次启动SQLServer时都会创建tempdb,所以model数据库必须始终存在于SQLServer系统中。msdb:SQLServer代理使用它来安排警报和作业。tempdb:它是所有连接到SQLServer实例的用户都可以使用的全局资源。它保存了所有的临时表、临时工作表、临时存储过程、大类型的临时存储、中间结果集、表变量和游标等。此外,它还用于满足所有其他临时存储要求。2、tempdb内部运行原理不同于其他SQLServer数据库。当SQLServer停止并重新启动时,Tempdb将自动删除并重新创建。根据model数据库会默认新建一个8MB(mdf文件:8MB;ldf文件:1MB,autogtouth设置为10%)的tempdb数据库,其sizerecoverymodel很简单。tempdb数据库建立后,DBA可以在其他数据库中创建数据对象和临时表,临时存储过程,表变量等都会添加到tempdb中。当tempdb非常活跃时,它可以自动增长。因为是简单的恢复模式,日志记录会被最小化,日志会被不断截断。3、如何合理优化tempdb提高SQLServer的性能如果SQLServer不经常访问tempdb,tempdb不会影响数据库;相反,如果访问频繁,负载会增加,tempdb的性能会对整个DB产生重要影响。优化tempdb的性能非常重要,尤其是对于大型数据库。注意:在优化tempdb之前,请考虑tempdb对SQLServer性能的影响有多大,评估遇到的问题和可行性。3.1尽量减少tempdbSQL的使用服务器中的很多活动都发生在tempdb中,所以在某些情况下,可以减少tempdb的过度使用,从而提高SQLServer的整体性能。使用tempdb的地方有几个:(1)User-createdTemporarytable。如果可以避免使用它,请尽量避免使用它。如果您使用临时表存储大量数据并经常访问它,请考虑添加索引以提高查询效率。(2)安排作业。比如DBCCCHECKDB会占用系统更多的资源,而使用tempdb则更多。最好在SQLServer负载相对较轻时执行此操作。(3)游标。游标会严重影响性能,应尽量避免。(4)CTE(通用表表达式)。它还将在tempdb中执行。(5)SORT_INT_TEMPDB。建立索引后,此选项可用。(6)索引在线重建。(7)临时工作表和中间结果集。在JOIN期间生成。(8)排序结果。(9)之后和INSTEADOF触发器。避免使用tempdb是不可能的。如果tempdb存在瓶颈或问题,就该回过头来考虑这些问题了。3.2重新分配tempdb的空间大小。当SQLServer重新启动时,它会自动创建一个大小为8MB的tempdb。自动增长默认10%。对于小型数据库,8MB就足够了。但对于更大的数据库,8MB远远不能满足SQLServer的频繁活动,所以会增加10%。1GB,需要很长时间,这段时间会严重影响SQLServer的性能。建议在SQLServer启动时设置tempdb的初始化大小(下图设置为MDF:300MB,LDF:50MB),或者通过ALTERDATABASE来实现。这样在SQLServer重启的时候tempdb就会有足够的可用空间,从而提高效率。困难在于找到一个合理的初始化大小,当SQLServer处于活动状态并且tempdb没有增长时,这将是一个合适的大小。Value,此时可以设置为InitialSize;当然会有更多的考虑,这是一个例子。3.3不要收缩tempdb(如果不是必要的话)有时候我们会注意到tempdb占用了很多空间,但是可用空间比较低的时候,就会想到收缩数据库来释放磁盘空间。这时候要小心,可能会影响性能。如上图所示:tempdb分配的空间为879.44MB,45%的空间是空闲的。如果Shrinking可以释放部分空闲磁盘,但如果SQLServer后面有大量操作,tempdb空间不够用,会自动以10%的速度增加。在这种情况下,收缩操作无效。会增加系统的负载。3.4将tempdb文件和其他数据文件分配给未使用的IO。Tempdb对IO要求比较高。最好将它们分配给高IO磁盘,并在未使用的磁盘上与其他数据文件共享。以提高读写效率。tempdb也是分多个文件的,一般是按照CPU来分的,几个CPU分几个tempdb数据文件。多个tempdb文件可以提高读写效率,减少IO活动冲突。tempdb是SQLServer的重要组成部分,以上只是对tempdb的一些认识总结,有待进一步研究……原标题:tempdb对SQLServer性能的影响链接:http://www.cnblogs.com/changbluesky/archive/2010/04/15/1711733.html【编辑推荐】SQLServer使用索引实现数据访问优化SQLServer数据库优化经验总结如何使用SQLServer数据库查询累计值分析Oracle和SqlServerStorageProcedure调试、错误处理几种SQLServer语句和存储过程优化SQLServer数据库查询的50种方法