SqlServer 一个查询语句导致tempdb增大55G(转载)
SqlServer 一个查询语句导致tempdb增大55G
今天操作着服务器,突然右下角提示“C盘空间不足”!
吓一跳!~
看看C盘,还有7M!!!这么大的C盘空间怎么会没了呢?搞不好等下服务器会动不了!
第一反应就想可能是日志问题,很可能是数据库日志问题
于是查看日志,都不大,正常。
dbcc sqlperf(logspace)
看看系统报错:



是tempdb问题,但是刚才看日志才几M,根据提示查看日志状态:
select name,log_reuse_wait_desc from sys.databases

数据库日记现在没什么操作,可能是执行完了。
活动的虚拟日志也不多,10个左右:
dbcc loginfo
查看当前tempdb情况,吓一跳啊,tempdb数据文件55G! 看上面的图,也就是突然增长的。

于是马上收缩日志,收缩数据文件,收缩出1G左右。
还是不行,继续不断地更改大小不断收缩,只要小于55G都改数据进行收缩,竟然还能收缩了9G!
DBCC SHRINKFILE (N'tempdev' , 1024)--单位为MB
DBCC SHRINKDATABASE (tempdb, 1024);--单位为MB
暂时缓解了,看来是收缩不了了。都说得重启服务器才行,当前连接较多,没有重启.所以先查查什么原因引起的。
查看当前的各种游标,SQL ,堵塞等,没发现什么,事务应该执行完了。
查看tempdb记录的分配情况:
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

有四个关键信息:
session_id :稍等可以查询该session的相关信息
internal_objects_alloc_page_count :分配给session内部对象的数据页
internal_objects_dealloc_page_count :已经释放的数据页
login_name : 该session的登录名
从internal_objects_alloc_page_count 和internal_objects_dealloc_page_count可以看出,给session分配了7236696页,计算一下:
select 7236696*8/1024/1024 as [size_GB]
竟然为55G,几乎和tempdb增长的大小一致,可以断定就是这个session引起的。internal_objects_dealloc_page_count 可以看到已经释放了,暂用tempdb的数据已经释放了。
通过登录名,已经知道谁在操作了。(这就是给每个相关人员自己登录名的好处之一,可以很快追踪使用者,是内部人员操作)
现在看看这session_id的用处:
select p.*,s.text
from master.dbo.sysprocesses p
cross apply sys.dm_exec_sql_text(p.sql_handle) s
where spid = 1589
看到最后有一条语句:

拷贝出来,几乎是数据库中最大的 8个表做inner join 连接 查询!!
代码就不贴出来了。
目前已经查出什么原因导致了tempdb增大的问题。tempdb从55285MB收缩为47765MB,但大小问题得晚点重启服务在看看了。

后来因升级重启过服务器,SQLserver服务页就重新启动了,顺便把tempdb的数据文件大小改了。
USE [master]
GO ALTER DATABASE [tempdb] MODIFY FILE ( NAME = N'tempdev', SIZE = 524288KB )
GO
SqlServer 一个查询语句导致tempdb增大55G(转载)的更多相关文章
- SqlServer 一个查询语句以致tempdb增大55G (转载)
SqlServer 一个查询语句导致tempdb增大55G 今天操作着服务器,突然右下角提示“C盘空间不足”! 吓一跳!~ 看看C盘,还有7M!!!这么大的C盘空间怎么会没了呢?搞不好等下服务器会动不 ...
- mybatis中union可以用if判断连接,但是<select>中第一个select语句不能被if判断,因此可以从dual表中查询null来凑齐。union如果使用order by排序,那么只能放在最后一个查询语句的位置,并且不能带表名。
<!-- 一址多证纳税人分析表 --> <select id="yzdznsrlistPage" parameterType="page" r ...
- SqlServer ----- 根据查询语句创建视图
我们都知道视图的本质就是查询语句,那么就可以根据查询语句创建视图, 前提 知道视图的组成,已经写好的sql 语句,多表或单表的查询语句,将查询语句变成视图. 所以视图可以由单表,多表或视图加表构成. ...
- Oracle查询语句导致CPU使用率过高问题处理
解决此问题的关键在于如何找到造成CPU使用率过高的SQL语句.步骤如下: 1.使用Process Explorer工具查看到Oracle进程,双击Oracle进程,在弹出的属性窗口的Threads选项 ...
- SQLServer 统计查询语句消耗时间
--方法1[set statistic ]: set statistics time on go --执行语句 xxxx go set statistics time off --方法2[getDat ...
- sqlserver数据库查询语句
--数据库所有表select * from sysobjects where type='u'; --指定表的所有列select name from syscolumns where id=(sele ...
- SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划
我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...
- ElasticSearch 论坛搜索查询语句
概述 研究论坛搜索如何综合时间和TF/IDF权重. 自定义权重计算的效率问题 数据结构 假设有一个论坛的搜索 字段包括: subject:标题 message:内容 dateline:发布时间 tag ...
- 转载《mysql 一》:mysql的select查询语句内在逻辑执行顺序
原文:http://www.jellythink.com/archives/924 我的抱怨 我一个搞应用开发的,非要会数据库,这不是专门的数据库开发人员干的事么?话说,小公司也没有数 据库开发人员这 ...
随机推荐
- [原] ubuntu 13.10 安装 winqq2013
安装及下载地址:http://www.longene.org/forum/viewtopic.php?t=4700 ubuntu 13.10 64位系统安装后无法启动qq,因为缺少程序包.解决方案: ...
- 记一次使用mybatis进行like 模糊查询遇到的问题
"bdate like '#{date}%' and ..." 最开始这样写的· 将传入的参数和%用单引号包起来,但是这会报错 java.sql.SQLException: Par ...
- POJ2418 Hardwood Species—二叉查找树应用
1. Hardwood Species原题描述 Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 14326 Acce ...
- 从Java进程里dump出类的字节码文件
想要查看一些被增强过的类的字节码,或者一些AOP框架的生成类,就需要dump出运行时的Java进程里的字节码. 从运行的java进程里dump出运行中的类的class文件的方法: 用agent att ...
- Python web 框架之 Django 基础搭建服务
1. 需要安装 Python 和 Django 环境,Python 环境的安装我就不在多说了 2. 安装框架 Django Django 安装,推荐先装个 pip吧,easyinstall也可以,然后 ...
- JVM学习记录-线程安全与锁优化(二)
前言 高效并发是程序员们写代码时一直所追求的,HotSpot虚拟机开发团队也为此付出了很多努力,为了在线程之间更高效地共享数据,以及解决竞争问题,HotSpot开发团队做出了各种锁的优化技术常见的有: ...
- C编程基础
1. Hello World! 依照惯例首先Hello World镇楼: 1 #include<stdio.h> 2 3 int main(void) { 4 printf("H ...
- JS DOM操作(五) Window.docunment对象——操作元素
定位: var a = document.getElementByIt( "id" ) 同辈元素 var b = a.nextSibling; -- 找 a ...
- (转)mssql sp_addextendedproperty 用法,作用
sp_addextendedproperty [ @name = ] { 'property_name' } [ , [ @value = ] { 'value' } [ , [ @level0typ ...
- 使用spring security 2.0 和extjs 3.0实现web登录
使用spring security 2.0 和extjs 3.0实现web登录 1开发环境说明 本例使用MyEclipse 6.5作为开发工具,jdk1.5作为编译工具,tomcat6.0作为web运 ...