SQLSERVER tempdb 数据库异常增大解决方法及原因查找

news/2024/7/5 2:30:31

--SQLSERVER tempdb 数据库异常增大,导致服务器卡顿,最简单的方法就是重启系统.tempdb 会自动重新创建恢复到初始大小(比如8M).

--1.tempdb  文件过大,可以通过重新启动系统,tempdb数据文件及Log会释放空间到初始大小(比如8M).

--2.tempdb 在系统默认的C盘,自动扩展过大可能导致系统盘C盘空间问题,需要迁移到数据盘 。

     Use master
     Alter   database tempdb modify file (NAME='TEMPDEV',FILENAME='D:\SQLDATA\TEMPDB.MDF'); GO 

     Alter database tempdb modify file
     (NAME='TEMPLOG',FILENAME='D:\SQLDATA\TEMPLOG.LDF'); GO 

上面命令会将Tempdb库对应的数据文件及Log文件指向新的物理路径下的新文件。 但是需要重新启动后才会生效 。

--3.如何在线缩小tempdb,最好在非生产时间或周末进行。

use tempdb
dbcc shrinkfile('tempdev')
use tempdb
dbcc shrinkfile('templog') 

或者

use tempdb
go
DBCC SHRINKFILE (N’tempdb.mdf’ , 0, TRUNCATEONLY) –释放所有可用空间
go
DBCC SHRINKFILE (N’tempdb.mdf’ , 500) — 收缩datafile到 500MB
go
DBCC SHRINKFILE (N’templog.ldf’ , 10) — 收缩日志到 10MB
go

如果出现无法收缩tempdb的情况,可先使用以下方式处理再收缩。
SQL Server 2005 及后续版本为了增强 tempdb 的性能,会缓存一些 IAM 页,以备将来重新使用这些页面。在这种情况下,必须首先释放 IAM 页,才能释放其对应的页面。
因此,通过 DBCC FREESYSTEMCACHE,从所有缓存中释放所有未使用的缓存条目,然后再收缩 tempdb  

USE tempdb
GO
DBCC FREESYSTEMCACHE (‘ALL’)
GO
DBCC SHRINKFILE (N’tempdb.mdf’ , 500)
GO

如果要查询原因可以按以下方法查找.

0.--获取实例中每个数据库日志文件大小及使用情况
DBCC SQLPERF(LOGSPACE)

--1.查看数据库日志文件大小和使用情况

use tempdb
go
select db_name() as dbname,
name as filename,
size/128.0 as CurrentSizeMB,
size/128.0 - cast(fileproperty(name,'spaceUsed') as int)/128.0 as FreeSpaceMB
from sys.database_files;

--2.查看数据库中有无长时间运行的事务
dbcc opentran(tempdb);

--3.由于数据库开启了快照,可通过快照信息查找耗时的查询:

SELECT * FROM sys.dm_tran_active_snapshot_database_transactions order by elapsed_time_seconds desc

--4.#查出最大的spid(session_id)

use tempdb
go
SELECT top 10 t1.session_id,
t1.internal_objects_alloc_page_count, t1.user_objects_alloc_page_count,
t1.internal_objects_dealloc_page_count , t1.user_objects_dealloc_page_count,
t3.login_name,t3.status,t3.total_elapsed_time
from sys.dm_db_session_space_usage t1
inner join sys.dm_exec_sessions as t3
on t1.session_id = t3.session_id
where (t1.internal_objects_alloc_page_count>0
or t1.user_objects_alloc_page_count >0
or t1.internal_objects_dealloc_page_count>0
or t1.user_objects_dealloc_page_count>0)
order by t1.internal_objects_alloc_page_count desc

--5.#看是哪条sql导致的比如查到的session_id 55

select s.text,p.*
from master.dbo.sysprocesses p
cross apply sys.dm_exec_sql_text(p.sql_handle) s
where spid = 55

或者获取该session_id对应的sql查询语句
功能:显示从客户端发送到 Microsoft SQL Server实例的最后一个语句
格式:dbcc inputbuffer(session_id);
如:dbcc inputbuffer(55);

--5.删掉进程
kill 55


http://lihuaxi.xjx100.cn/news/2015024.html

相关文章

Kafka 使用手册

kafka3.0 文章目录 kafka3.01. 什么是kafka?2. kafka基础架构3. kafka集群搭建4. kafka命令行操作主题命令行【topic】生产者命令行【producer】消费者命令行【consumer】 5. kafka生产者生产者消息发送流程Producer 发送原理普通的异步发送带回调函数的异步发送同步…

【Docker】了解Docker Desktop桌面应用程序,TA是如何管理和运行Docker容器(2)

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《Docker容器》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对…

【excel密码】Excel加密的三种方式

Excel中保存着重要的数据,想要保护数据源,我们会想到给Excel文件进行加密,方法有很多,今天分享三种Excel加密方法给大家。 打开密码 设置了打开密码的excel文件,打开文件就会提示输入密码才能打开excel文件&#xff…

如何区分流量控制和拥塞控制?

流量控制属于通信双方协商;拥塞控制涉及通信链路全局。 流量控制需要通信双方各维护一个发送窗、一个接收窗,对任意一方,接收窗大小由自身决定,发送窗大小由接收方响应的TCP报文段中窗口值确定;拥塞控制的拥塞窗口大小…

代码审计-CVE-2023-6654-PHPEMS-加密-解密分析

路由: 入口方法: 鉴权分析: 由此可以得出 鉴权是由session类负责获取参数后,由各个类的魔术方法负责:(在此还有一个方法 全局搜索登录关键词) 1、断点分析: 寻找鉴权点分析&#…

Netty核心原理与基础实战(二)——详解Bootstrap 备份

接上篇:Netty核心原理与基础实战(一) 1 Bootstrap基础概念 Bootstrap类是Netty提供的一个便利的工厂类,可以通过它来完成Netty的客户端或服务端的Netty组件的组装,以及Netty程序的初始化和启动执行。Netty的官方解释是…

环境配置:Ubuntu18.04 ROS Melodic安装

前言 不同版本的Ubuntu与ROS存在对应关系。 ROS作为目前最受欢迎的机器人操作系统,其核心代码采用C编写,并以BSD许可发布。ROS起源于2007年,是由斯坦福大学与机器人技术公司Willow Garage合作的Switchyard项目。2012年,ROS团队从…

文献速递:肿瘤分割---- 优先注意网络,用于医学图像中多病变分割

文献速递:肿瘤分割---- 优先注意网络,用于医学图像中多病变分割 Title 题目 Prior Attention Network for Multi-Lesion Segmentation in Medical Images 优先注意网络,用于医学图像中多病变分割 Abstract 摘要 —The accurate segmen…