tempdb日志满了,如何解决?

--创建作业,自动清理tempdb数据库日志  
   
  --创建作业  
  exec   msdb..sp_add_job   @job_name='tempdb日志清理'  
   
  --创建作业步骤  
  declare   @sql   varchar(800),@dbname   varchar(250)  
  select   @sql='DUMP     TRANSACTION     tempdb     WITH     NO_LOG  
  BACKUP   LOG   tempdb   WITH   NO_LOG'     --数据处理的命令  
  ,@dbname=db_name() --执行数据处理的数据库名  
   
  exec   msdb..sp_add_jobstep   @job_name='tempdb日志清理',  
  @step_name   =   '数据处理',  
  @subsystem   =   'TSQL',  
  @database_name=@dbname,  
  @command   =   @sql,  
  @retry_attempts   =   5,   --重试次数  
  @retry_interval   =   5     --重试间隔  
   
  --创建调度  
  EXEC   msdb..sp_add_jobschedule   @job_name   =   'tempdb日志清理',    
  @name   =   '时间安排',  
  @freq_type=4,   --4   每天,8   每周,16   每月  
  @freq_interval=1, --作业执行的天数  
  @freq_subday_type=0, --是否重复执行,0x1   在指定的时间,   0x4   分钟,   0x8   小时    
  @freq_subday_interval=1,   --重复周期  
  @freq_recurrence_factor=0, --重复执行,则设置为1,否则设置为0  
  @active_start_time   =   00000 --0点开始执行  
   
  --   添加目标服务器  
  EXEC   msdb.dbo.sp_add_jobserver    
  @job_name   =   'tempdb日志清理'   ,  
  @server_name   =   N'(local)'

 

建议优化   tempdb   性能  
   
   
  对   tempdb   数据库的物理位置和数据库选项设置的一般建议包括:    
   
  使   tempdb   数据库得以按需自动扩展。这确保在执行完成前不终止查询,该查询所生成的存储在   tempdb   数据库内的中间结果集比预期大得多。  
   
   
  将   tempdb   数据库文件的初始大小设置为合理的大小,以避免当需要更多空间时文件自动扩展。如果   tempdb   数据库扩展得过于频繁,性能会受不良影响。  
   
   
  将文件增长增量百分比设置为合理的大小,以避免   tempdb   数据库文件按太小的值增长。如果文件增长幅度与写入   tempdb   数据库的数据量相比太小,则   tempdb   数据库可能需要始终扩展,因而将妨害性能。  
   
   
  将   tempdb   数据库放在快速   I/O   子系统上以确保好的性能。在多个磁盘上条带化   tempdb   数据库以获得更好的性能。将   tempdb   数据库放在除用户数据库所使用的磁盘之外的磁盘上。有关更多信息,请参见扩充数据库。    

### SQL Server tempdb 过大 解决方案 和最佳实践 #### 了解 tempdb 的作用 SQL Server 使用 `tempdb` 数据库来存储用户对象、内部对象以及版本存储[^1]。当 `tempdb` 变得过大时,可能会影响数据库性能。 #### 清理 tempdb 中的对象 为了减少 `tempdb` 的大小,可以考虑定期清理不再使用的临时表和其他对象。可以通过编写 T-SQL 脚本来实现这一点: ```sql -- 删除所有用户创建的临时表 DECLARE @TableName NVARCHAR(256) WHILE EXISTS (SELECT * FROM sys.tables WHERE name LIKE '#%') BEGIN SELECT TOP 1 @TableName = QUOTENAME(name) FROM sys.tables WHERE name LIKE '#%' EXEC ('DROP TABLE ' + @TableName); END; ``` #### 配置 tempdb 文件设置 适当配置 `tempdb` 文件的数量和初始大小有助于防止文件增长过多。建议根据 CPU 核心数量配置多个数据文件,并确保这些文件具有相同的初始大小和增长率: ```sql ALTER DATABASE tempdb MODIFY FILE ( NAME = N'tempdev', SIZE = 10GB, MAXSIZE = UNLIMITED, FILEGROWTH = 512MB ); -- 添加额外的数据文件以提高并发性 ALTER DATABASE tempdb ADD FILE ( NAME = N'tempdev2', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\tempdb2.ndf', SIZE = 10GB, MAXSIZE = UNLIMITED, FILEGROWTH = 512MB ); ``` #### 减少不必要的事务日志记录 对于某些操作,可以选择禁用完全的日志记录模式,从而降低对 `tempdb` 的压力。例如,在批量导入期间可暂时切换到简单恢复模式: ```sql USE master; GO ALTER DATABASE YourDatabase SET RECOVERY SIMPLE; -- 执行大量插入或其他批处理操作... ALTER DATABASE YourDatabase SET RECOVERY FULL; GO ``` #### 审查查询计划缓存 有时频繁重建查询计划也会占用较多空间于 `tempdb` 内部结构中。通过分析查询统计信息找出那些经常重新编译且耗时较长的语句加以优化。 #### 监控与诊断工具的应用 利用 DMV(动态管理视图)监控 `tempdb` 的使用状况,及时发现潜在问题所在之处。比如查看哪些会话正在消耗最多的磁盘 I/O 或者内存资源等。 ```sql SELECT session_id, request_id, SUM(internal_objects_alloc_page_count) AS alloc_pages FROM sys.dm_db_task_space_usage WITH(NOLOCK) WHERE session_id <> @@SPID AND session_id > 50 -- 排除系统进程 GROUP BY session_id, request_id ORDER BY alloc_pages DESC; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值