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
  • 相关阅读:
    mysql 启动不了,报错InnoDB相关
    vue 根据屏幕大小重新加载 echarts
    echarts 图例样式
    canvas 创建的图表,在移动端时,手指触碰,无法上下滑动页面
    uni-app 左上角返回按钮消失
    uni-app 缓存无法读取问题
    hbuider 运行 uni-app PC使用安卓模拟器接口请求错误
    wbstrom 使用git提交代码
    后端路由正常,但页面空白
    算法——RSA算法原理(转)
  • 原文地址:https://www.cnblogs.com/shengdimaya/p/5378014.html
Copyright © 2011-2022 走看看