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(转载)的更多相关文章

  1. SqlServer 一个查询语句以致tempdb增大55G (转载)

    SqlServer 一个查询语句导致tempdb增大55G 今天操作着服务器,突然右下角提示“C盘空间不足”! 吓一跳!~ 看看C盘,还有7M!!!这么大的C盘空间怎么会没了呢?搞不好等下服务器会动不 ...

  2. mybatis中union可以用if判断连接,但是<select>中第一个select语句不能被if判断,因此可以从dual表中查询null来凑齐。union如果使用order by排序,那么只能放在最后一个查询语句的位置,并且不能带表名。

    <!-- 一址多证纳税人分析表 --> <select id="yzdznsrlistPage" parameterType="page" r ...

  3. SqlServer ----- 根据查询语句创建视图

    我们都知道视图的本质就是查询语句,那么就可以根据查询语句创建视图, 前提 知道视图的组成,已经写好的sql 语句,多表或单表的查询语句,将查询语句变成视图. 所以视图可以由单表,多表或视图加表构成. ...

  4. Oracle查询语句导致CPU使用率过高问题处理

    解决此问题的关键在于如何找到造成CPU使用率过高的SQL语句.步骤如下: 1.使用Process Explorer工具查看到Oracle进程,双击Oracle进程,在弹出的属性窗口的Threads选项 ...

  5. SQLServer 统计查询语句消耗时间

    --方法1[set statistic ]: set statistics time on go --执行语句 xxxx go set statistics time off --方法2[getDat ...

  6. sqlserver数据库查询语句

    --数据库所有表select * from sysobjects where type='u'; --指定表的所有列select name from syscolumns where id=(sele ...

  7. SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划

    我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...

  8. ElasticSearch 论坛搜索查询语句

    概述 研究论坛搜索如何综合时间和TF/IDF权重. 自定义权重计算的效率问题 数据结构 假设有一个论坛的搜索 字段包括: subject:标题 message:内容 dateline:发布时间 tag ...

  9. 转载《mysql 一》:mysql的select查询语句内在逻辑执行顺序

    原文:http://www.jellythink.com/archives/924 我的抱怨 我一个搞应用开发的,非要会数据库,这不是专门的数据库开发人员干的事么?话说,小公司也没有数 据库开发人员这 ...

随机推荐

  1. editplus tag

    #T=HTML<!DOCTYPE html><html lang="zh-CN"><head><meta content="te ...

  2. What does -> do in clojure?

    https://stackoverflow.com/questions/4579226/what-does-do-in-clojure

  3. 26-hadoop-hbase简介

    hadoop的生态系统 1, hbase简介 –HBase–HadoopDatabase,是一个高可靠性.高性能.面向列.可伸缩.实时读写的分布式数据库 –利用HadoopHDFS作为其文件存储系统, ...

  4. psql工具使用(二)

    所有psql命令都以   \   开头 一.使用psql -l查看有哪些数据库: -bash-4.2$ psql -l List of databases Name | Owner | Encodin ...

  5. [Python学习笔记-003] 使用PyOTP获取基于OTOP算法的动态口令

    建立安全的VPN连接,不仅需要输入用户名和密码,还需要输入动态口令(token).作为一个懒人,我更喜欢什么手工输入都不需要,既不需要输入password,也不需要输入token.也就是说,只需一个命 ...

  6. LVS专题-(1)LVS基本介绍

    LVS官方网站:http://www.linuxvirtualserver.org/zh/lvs1.html

  7. Log4j和Log4j2的区别

    Log4j是Apache的一个开源项目,我们不去考究它的起源时间,但是据我了解,log4j 1已经不再更新了. 下面我就以列举的方式来浅谈log4j和log4j 2的不同之处. 一.配置文件类型 lo ...

  8. Code First, Database First, Same Time区别

    Code First, Database First, Same Time是我理解的asp.net mvc中用到的三种model与数据库对应的方式,肯定是不全面的,理解也有些狭隘,今后随着自己的理解加 ...

  9. 小程序获取地址授权的修改 wx.openSetting需点击

    开发者可以通过 wx.openSetting 接口来打开小程序设置界面并返回用户的设置结果.在原来的 wx.openSetting 接口中,我们允许开发者直接调用此接口,但目前我们发现有不少开发者滥用 ...

  10. Ubuntu16.04安装mac主题之图标居中(百度经验)

    ubuntu14.04怎么把桌面任务栏调到下方,像Mac那样的 50 匿名 | 浏览 22789 次 我有更好的答案 2015-11-30 16:58 最佳答案   先看图片,感兴趣往下看.按照步骤一 ...