none
sql2005让c盘彻底爆掉了 RRS feed

  • 问题

  • 服务器上的c盘空间100G,装的软件也不多,昨天上去一看,竟然报警,空间不足,仅2.47M了,我的天,赶紧搜索大文件,慢慢定位到了sql2005的tempdb,这一看吓一跳,大小为81G,开发我们就是用的这个sql2005,写过程啊,都会用到临时表,但最后都会drop掉,这个增长的也太离谱了吧
    2013年7月1日 11:32

答案

  • 可以先收缩一下。 另外查一下数据库哪里占用的空间大。

    Select

        SUM(user_object_reserved_page_count)*8 asuser_objects_kb,

        SUM(internal_object_reserved_page_count)*8 asinternal_objects_kb,

        SUM(version_store_reserved_page_count)*as version_store_kb,

        SUM(unallocated_extent_page_count)*8 as freespace_kb

    From sys.dm_db_file_space_usage

    Where database_id = 2


    Please Mark As Answer if it is helpful.

    2013年7月1日 12:30
  • 给LZ一个脚本,可以监视tempdb的使用情况

    --监视tempdb的脚本
    USE tempdb
    --每隔一秒运行一次,直到用户手工终止脚本运行
    WHILE 1 = 1
        BEGIN
            SELECT  GETDATE()
    --从文件级别看tempdb使用情况
            DBCC showfilestats
    
    --query1
    --返回所有做过空间申请的会话信息
            SELECT  'tempdb' AS db ,
                    GETDATE() AS TIME ,
                    SUM(USER_object_reserved_page_count) * 8 AS user_object_kb ,
                    SUM(internal_object_reserved_page_count) * 8 AS internal_object_kb ,
                    SUM(version_store_reserved_page_count) * 8 AS version_store_kb ,
                    SUM(unallocated_extent_page_count) * 8 AS freespace_kb
            FROM    sys.dm_db_file_space_usage
            WHERE   database_id = 2
    
    --query2
    --这个管理视图能够反映当时tempdb空间的总体分配
            SELECT  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.*
            FROM    sys.dm_db_session_space_usage AS t1 ,
    --反映每个会话累计空间的申请
                    sys.dm_exec_sessions AS t3
    --每个会话的信息
            WHERE   t1.session_id = t3.session_id
                    AND ( 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
                        )
    
    
    --query3
    --返回正在运行并且做过空间申请的会话正在运行的语句
    --cross apply的应用http://hi.baidu.com/ken_site/item/fc99e9d016bba8e2b3f77791
            SELECT  t1.session_id ,
                    st.text
            FROM    sys.dm_db_session_space_usage AS t1 ,
                    sys.dm_exec_requests AS t4
                    CROSS APPLY sys.dm_exec_sql_text(t4.sql_handle) AS st
            WHERE   t1.session_id = t4.session_id
                    AND t1.session_id > 50
                    AND ( 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
                        )
            WAITFOR DELAY '0:0:1'
        END

    2013年7月1日 13:54
  • If you can't shrink tempdb, just restart sql that'll recreate tempdb with default size.
    2013年7月1日 14:06
  • 开发代码修改是个比较漫长的事情,虽然是治本(通常能治本),临时解决就是把TEMPDB移到其他够空间的分区去


    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com

    2013年7月2日 1:08

全部回复

  • 可以先收缩一下。 另外查一下数据库哪里占用的空间大。

    Select

        SUM(user_object_reserved_page_count)*8 asuser_objects_kb,

        SUM(internal_object_reserved_page_count)*8 asinternal_objects_kb,

        SUM(version_store_reserved_page_count)*as version_store_kb,

        SUM(unallocated_extent_page_count)*8 as freespace_kb

    From sys.dm_db_file_space_usage

    Where database_id = 2


    Please Mark As Answer if it is helpful.

    2013年7月1日 12:30
  • 给LZ一个脚本,可以监视tempdb的使用情况

    --监视tempdb的脚本
    USE tempdb
    --每隔一秒运行一次,直到用户手工终止脚本运行
    WHILE 1 = 1
        BEGIN
            SELECT  GETDATE()
    --从文件级别看tempdb使用情况
            DBCC showfilestats
    
    --query1
    --返回所有做过空间申请的会话信息
            SELECT  'tempdb' AS db ,
                    GETDATE() AS TIME ,
                    SUM(USER_object_reserved_page_count) * 8 AS user_object_kb ,
                    SUM(internal_object_reserved_page_count) * 8 AS internal_object_kb ,
                    SUM(version_store_reserved_page_count) * 8 AS version_store_kb ,
                    SUM(unallocated_extent_page_count) * 8 AS freespace_kb
            FROM    sys.dm_db_file_space_usage
            WHERE   database_id = 2
    
    --query2
    --这个管理视图能够反映当时tempdb空间的总体分配
            SELECT  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.*
            FROM    sys.dm_db_session_space_usage AS t1 ,
    --反映每个会话累计空间的申请
                    sys.dm_exec_sessions AS t3
    --每个会话的信息
            WHERE   t1.session_id = t3.session_id
                    AND ( 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
                        )
    
    
    --query3
    --返回正在运行并且做过空间申请的会话正在运行的语句
    --cross apply的应用http://hi.baidu.com/ken_site/item/fc99e9d016bba8e2b3f77791
            SELECT  t1.session_id ,
                    st.text
            FROM    sys.dm_db_session_space_usage AS t1 ,
                    sys.dm_exec_requests AS t4
                    CROSS APPLY sys.dm_exec_sql_text(t4.sql_handle) AS st
            WHERE   t1.session_id = t4.session_id
                    AND t1.session_id > 50
                    AND ( 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
                        )
            WAITFOR DELAY '0:0:1'
        END

    2013年7月1日 13:54
  • If you can't shrink tempdb, just restart sql that'll recreate tempdb with default size.
    2013年7月1日 14:06
  • If you can't shrink tempdb, just restart sql that'll recreate tempdb with default size.
    重启当然可以,关键是要找到问题所在
    2013年7月1日 14:25
  • KevinLiu328 covered that part already, no need for me to repeat again.

    2013年7月1日 15:14
  • 开发代码修改是个比较漫长的事情,虽然是治本(通常能治本),临时解决就是把TEMPDB移到其他够空间的分区去


    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com

    2013年7月2日 1:08