检查数据库有无问题 : dbcc checkdb 数据库名

--截断事务日志

backup log 数据库名 with no_log

--收缩数据库

dbcc shrinkdatabase (数据库名)

为tempdb添加日志文件:

ALTER DATABASE tempdb ADD LOG FILE

( NAME='templog_1',

FILENAME ='d:\tempdb_log_1.ldf')

增加日志大小:

USE master

GO

ALTER DATABASE tempdb

MODIFY FILE

(NAME ='tempdb_log',

SIZE = 2000MB)

GO

use tempdb

select * from tempdb.dbo.sysfiles

dump transaction tempdb with no_log --清空日志

dbcc shrinkfile ('templog',1)

select * from tempdb.dbo.sysfiles

@重启SQL SERVER服务

清空日志:

DUMP TRANSACTION 库名 WITH NO_LOG

再:企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数后确定

SQL Server在每次重启服务时会重建tempdb数据库

如果系统运行过程中 tempdb因需要自动增长了,SQL Serve不会记住增长后的大小,重启服务后仍然恢复到初始大小,

但如果用户使用了手工调整tempdb的大小,重启服务SQL Server会把tempdb重建为用户指定大小

测试示例

tempdb初始化大小为8MB

1)使tempdb自动增长

select b.* into #t from sysprocesses a,sysobjects b

重启后使用sp_helpdb 'tempdb'

可以看到tempdb又恢复到8MB

2) 用户使用Alter Database调整为100MB,

USE master

GO

ALTER DATABASE tempdb

MODIFY FILE

(NAME = tempdev,SIZE = 100MB)

重启服务后使用查看tempdb大小就为100MB

以下查询可以看到tempdb的变化

select a.filename,a.name,a.size*8.0/1024.0 as originalsize_MB,

f.size*8.0/1024.0 as currentsize_MB

from master..sysaltfiles a join tempdb..sysfiles f on a.fileid=f.fileid

where dbid=db_id('tempdb')

and a.size<>f.size

总结:

当系统自动调整tempdb大小时,对文件的读写将暂时的阻塞

所以如果我们预知tempdb将会增加到某个大小时,可以自行调整,从而避免性能下降

 


申明

非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

博文欢迎转载,但请给出原文连接。