zoukankan      html  css  js  c++  java
  • tempdb过大事故记录-sqlserver

    今天收到预警消息,提示磁盘空间已经满了,感觉很奇怪.刚装的新机器怎么可能会磁盘空间不足.登陆看了看

    可以看的到tempdb已经65G的了,而且显示是百分百可用.这个就很奇怪了,为什么会出现这种情况呢.考虑到磁盘会爆满,立即重启了sqlserver,修改tempdb的初始值大小为10G,然后回收调可用的空间给OS,看样子是告一段落了.事实上并不是这样,我的tempdb第二天暴增了.这是怎么回事?我这台机器现在跑的程序基本没有,只是作为复制的订阅端.怎么会出现这种情况呢.然后就登陆看了看数据库统计信息:

    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

    查看数据库的会话占用的tempdb的空间大小,然后根据SPID查看详细信息,然后查处会话的具体信息

    根据信息我查到有一个会话占用特别多的临时空间,仔细查看了一下会话的详细信息.select 语句如下:

    select 1

    很奇怪对不对,有两个问题考虑一下:

    1:为什么要一直不停执行这个语句

    2:这个语句是用来做什么的

    根据以上统计信息我们可以查出来登陆名和程序所在的程序名,初步确认了是那个程序造成的,然后根据上面两个疑问去查询

    发现有以下代码:

    红线内是原来没有的,一个数据库链接链接以后没有释放.所以才会一致链接数据库不释放整个会话和会话资源.然后加上以后重新启动程序.继续监控,发现问题已经解决了.

    热衷于学习讨论MySQL和SQL Server,NoSQL等数据库技术,欢迎加入SQL优化群:659336691
  • 相关阅读:
    Mac 下的 Homebrew 简介及安装
    配置Mac打开ntfs的外设磁盘硬盘的原生读写/Mac OS上使用不同格式的磁盘
    ztree使用 (一) 递归后台的数据
    springboot整合redis 配置文件及配置类(二)
    springboot整合redis 配置文件及配置类(一)
    java登录拦截器
    获取小程序二维码
    java合成图片
    微信 获取手机号
    js+html5点击赋值到剪贴板
  • 原文地址:https://www.cnblogs.com/shengdimaya/p/5378014.html
Copyright © 2011-2022 走看看