本文参考
ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_1devconc/html/ce4053fb-e37a-4851-b711-8e504059a780.htm(联机帮助)
http://www.cnblogs.com/gaizai/p/3516905.html
SQLServer2012管理高级教程
tempdb功能集
查询
触发器
快照隔离和读提交的快照
多个活动结果集( MARS)
索引、联机索引
临时表、表变量、表值函数、用户自定义函数
DBCC Check
Large Objects参数
游标
ServiceBroker和事件通知
XML和Large Objects变量
查询通知
数据库邮件
tempdb限制(不能对 tempdb 数据库执行以下操作)
添加文件组。
备份或还原数据库。
更改排序规则。默认排序规则为服务器排序规则。
更改数据库所有者。 tempdb 的所有者是 dbo。
创建数据库快照。
删除数据库。
从数据库中删除 guest 用户。
启用变更数据捕获。
参与数据库镜像。
删除主文件组、主数据文件或日志文件。
重命名数据库或主文件组。
运行 DBCC CHECKALLOC。
运行 DBCC CHECKCATALOG。
将数据库设置为 OFFLINE。
将数据库或主文件组设置为 READ_ONLY。
tempdb配置最佳实践
根据测试或者预估,为tempdb预先分配大小,同时启动自动增长
在每个cpu或者处理器内核上,为tempdb创建数据文件,且每个大小相同,不超过8个文件。
确保恢复模型为简单模型
将自从增长设置为固定大小(按M增长,约为数据库初始大小的10%)
将tempdb放在告诉的IO系统上
使用即时数据库文件初始化(即时文件初始化功能仅在向 SQL Server (MSSQLSERVER) 服务帐户授予了 SE_MANAGE_VOLUME_NAME 之后才
可用。 Windows Administrator 组的成员拥有此权限,并可以通过将其他用户添加到【执行卷维护任务】安全策略中来为其授予此权限。可参考
http://www.cnblogs.com/gaizai/p/3516905.html)
tempdb常用监控脚本
--查询正在最大限度使用用户对象及内部对象的会话信息
SELECT TOP 5
*
FROM sys.dm_db_session_space_usage
ORDER BY user_objects_alloc_page_count + internal_objects_alloc_page_count DESC
go
--查询各种对象使用的空间情况
SELECT SUM(user_object_reserved_page_count) * 8 AS user_objects_kb ,
SUM(internal_object_reserved_page_count) * 8 AS internal_ojects_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
--tempdb 中所有文件使用的磁盘空间总量
SELECT SUM(size) * 1.0 / 128 AS [size in MB]
FROM tempdb.sys.database_files
--批处理级信息
--返回tempdb 中当前运行的所有任务中的内部对象使用的总空间量
SELECT session_id ,
SUM(internal_objects_alloc_page_count) AS task_internal_objects_alloc_page_count ,
SUM(internal_objects_dealloc_page_count) AS task_internal_objects_dealloc_page_count
FROM sys.dm_db_task_space_usage
GROUP BY session_id;
--返回tempdb 中正在运行的任务和已完成任务中的所有内部对象使用的空间
;
WITH all_task_usage
AS ( SELECT session_id ,
SUM(internal_objects_alloc_page_count) AS task_internal_objects_alloc_page_count ,
SUM(internal_objects_dealloc_page_count) AS task_internal_objects_dealloc_page_count
FROM sys.dm_db_task_space_usage
GROUP BY session_id
)
SELECT R1.session_id ,
R1.internal_objects_alloc_page_count
+ R2.task_internal_objects_alloc_page_count AS session_internal_objects_alloc_page_count ,
R1.internal_objects_dealloc_page_count
+ R2.task_internal_objects_dealloc_page_count AS session_internal_objects_dealloc_page_count
FROM sys.dm_db_session_space_usage AS R1
INNER JOIN all_task_usage AS R2 ON R1.session_id = R2.session_id;
--查看每个session 运行的批处理
DECLARE @max INT;
DECLARE @i INT;
SELECT @max = MAX(session_id)
FROM sys.dm_exec_sessions
SET @i = 51
WHILE @i <= @max
BEGIN
IF EXISTS ( SELECT session_id
FROM sys.dm_exec_sessions
WHERE session_id = @i )
DBCC INPUTBUFFER (@i)
SET @i = @i + 1
END;
--查询级信息
--返回每个请求的sql_handle、 statement_start_offset、 statement_end_offset 和plan_handle等信息
;
WITH all_request_usage
AS ( SELECT session_id ,
request_id ,
SUM(internal_objects_alloc_page_count