如何限制tempdb的数据库增长

SQL Server会自动创建一个名为tempdb的数据库作为工作空间使用,当您在存储过程中创建一个临时表格时,比如(CREATE TABLE #MyTemp),无论您正在使用哪个数据库,SQL数据库引擎都会将这个表格创建在tempdb数据库中。

而且,当您对大型的结果集进行排序,比如使用ORDER BY或GROUP BY或UNION或执行一个嵌套的SELECT时,如果数据量超过了系统内存容量,SQL数据库引擎就会在tempdb中创建工作表格。在您运行DBCC REINDEX或者向现有的表格中添加集群序列时, SQL数据库引擎同样会使用tempdb。实际上,任何针对大型表格的ALTER TABLE命令都会在tempdb中吃掉大量的磁盘空间。

在理想状态下,SQL会在完成指定操作后自动清理,并销毁这些临时表格,但是,很多问题都会导致错误。比如,您的代码创建了一个事务,但是却没能执行或重新运行,那么这些孤儿对象将遗留在tempdb中。而且,对大型数据库运行DBCC CHECK时,它还会消耗掉大量的空间,您往往会发现tempdb比设想的要大很多,甚至还会收到SQL即将用完磁盘空间的出错信息。

您有很多方法可以来修正这一情况,但从长远看来,您需要执行其它的步骤来保证正常使用。

为tempdb“减肥”最简单的办法就是关闭SQL数据库引擎然后重新启动,但是在重要的任务中,这样做可能难度很大;另一方面,如果您已经处于无法承受的状态,那么我的建议就是将这个坏消息告知您的上司,然后开始操作。

如果您幸运拥有另外一块磁盘可以用来放置tempdb,可以进行如下的操作:

USE master
             GO
             ALTER DATABASE tempdb modify file (name = tempdev, filename ='NewDrive:Pathtempdb.mdf')
             GO
             ALTER DATABASE tempdb modify file (name = templog, filename ='NewDrive:Pathtemplog.ldf')
             GO

还有三项关于tempdb的属性应该检查:自动增长标记,初始大小和恢复模式,以下是关于这些属性的小窍门:

自动增长标记:记住将这个标记设为True。

初始大小:tempdb的初始大小要根据常用的工作负载来设定,如果有很多用户在使用GROUP BY、ORDER BY或者对大型表格进行聚合操作,那么您的常用工作负载会相当大。如果服务器脱机时,您可能需要检查日志文件与数据文件是否位于同一磁盘,如果这样的话,应当将需要将它们转移到新的磁盘上,您只需指明相应的数据库并使用相同的命令即可。

恢复模式:将恢复模式设定为True意味着让SQL自动截去tempdb的日志文件(在使用了每个表格之后),要找出tempdb所使用的恢复模式,可以使用如下命令:

SELECT DATABASEPROPERTYEX('tempdb','recovery')

恢复模式有三种选择:简单、完整或大量记录(bulk-logged),如要改变设置,可以使用以下命令:

ALTER DATABASE tempdb SET RECOVERY SIMPLE

这些步骤可以优化您系统中使用的tempdb,除了解决磁盘空间问题外,您还会发现SQL Server系统性能的提升。tempdb的数据库

-------------

查看数据库使用空间存储过程:sp_spaceused

----------------

优化 tempdb 性能


对 tempdb 数据库的物理位置和数据库选项设置的一般建议包括:
使 tempdb 数据库得以按需自动扩展。这确保在执行完成前不终止查询,该查询所生成的存储在 tempdb 数据库内的中间结果集比预期大得多。

将 tempdb 数据库文件的初始大小设置为合理的大小,以避免当需要更多空间时文件自动扩展。如果 tempdb 数据库扩展得过于频繁,性能会受不良影响。

将文件增长增量百分比设置为合理的大小,以避免 tempdb 数据库文件按太小的值增长。如果文件增长幅度与写入 tempdb 数据库的数据量相比太小,则 tempdb 数据库可能需要始终扩展,因而将妨害性能。

将 tempdb 数据库放在快速 I/O 子系统上以确保好的性能。在多个磁盘上条带化 tempdb 数据库以获得更好的性能。将 tempdb 数据库放在除用户数据库所使用的磁盘之外的磁盘上。有关更多信息,请参见扩充数据库。

4.优化服务器:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
乐山师范学院数据库编程期末答疑,卷子讲解,SQL server相关 如下是一个简化的员工考勤应用E-R图,请在SQL Server中创建名为YQKG的数据库,包括两个数据文件,一个日志文件,文件名按SQL Server对象命名规范定义,数据文件按10%的比例增长数据库定义完成后输入如下样本数据。完成后请将新定义的对象及数据生成到脚本文件3_1.sql,并分离数据库。(数据表标识说明:BMXX 部门信息,QQLX 考勤类型, JBXX 基本信息,各字段定义请根据实际语义自行定义)。 2. 运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,完成如下安全定义。每小题2分,共6分。 (1) 创建名为L+考生学号的登录名,密码为考生学号。完成后请将定义程序代码保存到脚本文件3_2_1.sql。 (2) 为tempdb数据库创建名为U+考生学号的带登录名的用户名,使用本题(1)中创建的登录名。完成后请将定义程序代码保存到脚本文件3_2_2.sql。 (3) 为学生表Student、课程表Course、教师表Teacher分配只读权限,成绩表分配读写权限。完成后请将程序代码保存到脚本文件3_2_3.sql。 3.运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,完成如下完整性定义。每小题4分,共12分 (1) 在SC与Teacher之间定义参照完整性,外码名为FK_SC_Teacher_Tno,并定义违约处理规则:修改规则为 Cascade,删除规则为 No Action。完成后请将本操作的程序保存到脚本文件3_3_1.sql。 (2) 学生表Student中学生姓名不允许重复,将此规则保存为UQ_Sname。完成后请将本操作的程序保存到脚本文件3_3_2.sql。 (3) 在学生表上规定学生的性别只能是“男”、“女”,将此规则保存为CK_Student_Ssex。完成后请将本操作的程序保存到脚本文件3_3_3.sql。 4. 运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,在SSMS中查询分析器中设计并调试如下查询,把SQL脚本代码分别保存到指定的SQL程序文件中。每小题3分,共15分 (1) 新增一位同学:200215129,王大鹏,男,23,CS,新增该生一条选课数据:该生选了数据库课程,该课主教教师未知,还未考试。完成后请将查询代码保存到脚本文件3_4_1.sql。 (2) 修改少数民族学生李勇所有选修课成绩,都加5分。完成后请将查询代码保存到脚本文件3_4_2.sql。 (3) 因为考试事故,删除计科系的所有选课信息。完成后请将查询代码保存到脚本文件3_4_3.sql。 (4) 查询与“刘晨”同一个院系的其他同学的所有信息。完成后请将查询代码保存到脚本文件3_4_4.sql。 (5) 生成选修课为达标的学生的信息,包括学号、姓名、院系、总学分,达标条件:选修课门数达到6门。完成后请将查询代码保存到脚本文件3_4_5.sql。 5. 运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,为计科系生成如下选修课综合信息视图(仅包括计科系学生的选课信息,未选课的计科系学生也包括在视图的数据集中,如果未选课则课程等相关字段记为NULL,选了课但未考试则成绩等相关字段记为NULL,如果考试成绩未及格学分记为0,否则得到课程学分)。完成后请将本视图定义的程序保存到脚本文件3_5.sql。7分 6. SQL 程序设计:运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,完成如下对象定义,把相应的SQL程序分别保存到指定的SQL文件中。每小题7分,共21分 (1) 为教师表定义一个名为Tr_Insert_Or_Update_Sal触发器,实现如下完整性规则:“教授的工资不得低于4000元,如果低于4000元,自动改为4000元”。请完成触发体设计,完成后请将本定义的程序保存到脚本文件3_6_1.sql。 Create Trigger Insert_Or_Update_Sal On Teacher After INSERT, UPDATE AS (2) 利用ROW_NUMBER() OVER设计一分页查询存储过程DividePage,每次调用返回指定数据表中指定页大小及页码的满足条件的记录结果集,其参数设计如下,请完成过程体设计,完成后请将本定义的程序保存到脚本文件3_6_2.sql。 Create Procedure DividePage ( @tblName varchar(255), -- 表

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值