1  /  1  页   1 跳转 查看:1844

求助-tempdb

求助-tempdb

SQL2005 std 64x SP3+WIN2003 std 64x
小弟發現該tempdb.mdf成長驚人
兩個禮拜就成長了150G(30G->180G)
導致硬碟空間不足  SQL效能緩慢
想請問各位大大  是否有相關TSQL語法或DMV
可以查看那些應用程式所造成
在tempdb上的規劃考量可否給小弟一些建議或方向
感謝
 

回复:求助-tempdb

给你提供一段SQL代码,可以用来查询tempdb空间用得最大的前10个会话:

select top 10
t1.session_id,
t1.request_id,
t1.task_alloc,
    t1.task_dealloc, 
    (SELECT SUBSTRING(text, t2.statement_start_offset/2 + 1,
          (CASE WHEN statement_end_offset = -1
              THEN LEN(CONVERT(nvarchar(max),text)) * 2
                  ELSE statement_end_offset
              END - t2.statement_start_offset)/2)
    FROM sys.dm_exec_sql_text(sql_handle)) AS query_text,
(SELECT query_plan from sys.dm_exec_query_plan(t2.plan_handle)) as query_plan

from      (Select session_id, request_id,
sum(internal_objects_alloc_page_count +  user_objects_alloc_page_count) as task_alloc,
sum (internal_objects_dealloc_page_count + user_objects_dealloc_page_count) as task_dealloc
      from sys.dm_db_task_space_usage
      group by session_id, request_id) as t1,
      sys.dm_exec_requests as t2
where t1.session_id = t2.session_id and
(t1.request_id = t2.request_id) and
      t1.session_id > 50
order by t1.task_alloc DESC
最后编辑时习之 最后编辑于 2009-07-16 20:59:23
 

回复:求助-tempdb

以前我们公司也碰过这样的情况,后来发现一是很多存储过程用了临时表没删除,造成tempdb表增大,另外就是有一个存储过程有bug,有一处地方有死循环,一直往临时表里插入数据。
 

回复:求助-tempdb

感謝各位大大的回答
小弟在是看看
 

回复:求助-tempdb

前段时间也遇到过这样的情况,你试试以下操作:

1:截断事务日志:
BACKUP LOG 数据库名 WITH NO_LOG

2:清空日志
DUMP TRANSACTION 库名 WITH NO_LOG

再:
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了


3: 删除LOG
1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库
2:删除LOG文件
3:附加数据库 企业管理器->服务器->数据库->右键->附加数据库
此法生成新的LOG,大小只有500多K
再将此数据库设置自动收缩
或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。

EXEC sp_detach_db @dbname = 'pubs'
EXEC sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'


4: 如果想以后不让它增长
企业管理器--服务器--右键数据库--属性--事务日志--将文件增长限制为xM(x是你允许的最大数据文件大小)

--SQL语句的设置方式:
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)

5.设置为自动收缩
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"

运行查询分析器,执行以下SQL语句:

use tempdb

select * from tempdb.dbo.sysfiles

dump transaction tempdb with no_log

dbcc shrinkfile ('templog',1)

select * from tempdb.dbo.sysfiles
 
1  /  1  页   1 跳转

版权所有 微软BI开拓者 

Powered by Discuz!NT 2.1.202    Copyright © 2001-2012 Comsenz Inc.
Processed in 0.0625024 second(s) , 3 queries.
返顶部