--查询特定的数据库空间
exec sp_spaceused @updateusage=N'true'
--参数@updateusage 来更新空间的使用信息
--unallocated_space 尚没分配给使用的空间总量
--reserved=data+index_size+unused 配置给数据库空间的总量
--2、
查询所有数据库空间
--声明数据库变量
declare @name sysname
--声明游标变量
declare cur cursor for select name from sys.databases
open cur
fetch next from cur into @name
while(@@fetch_status=0)
begin
--利用TSQL执行sp_spaceused 找出数据库空间
execute (' use '+@name+' exec sp_spaceused @updateusage=N''true'' ')--注意use后面的空格
fetch next from cur into @name
end
close cur
deallocate cur
3、检查所有日志文件的使用空间与百分比
use master
go
dbcc sqlperf(logspace)
--使用DBCC sqlperf 配合数据表变量,查询所有数据库的日志文件
set nocount on
--以下声明变量
declare @t table(dbname sysname,logsize float, logused float, status int)
--将执行结果输入到数据表变量里
insert into @t
execute('dbcc sqlperf(logspace)')
--从数据变量表查询结果,并根据条件排序
select top 3 * from @t order by logsize desc
set nocount off
对于交付DBCC SQLPERF查询结果赋予新增的数据表变量只适于2005.对于2000需要采用实际的取代。
4、查询tempdb 数据库中会话阶段的空间使用情况。
--查询动态管理视图得知tempdb的使用情况
select
sum(user_object_reserved_page_count)*8 as usr_obj_kb,
sum(internal_object_reserved_page_count)*8 as internal_obj_kb,
sum(version_store_reserved_page_count)*8 as version_store_kb,
sum(unallocated_extent_page_count)*8 as freespace_kb,
sum(mixed_extent_page_count)*8 as mixedextent_kb from sys.dm_db_file_space_usage
go
5、根据session查询使用使用最多资源的情况。
--查询每个session使用的tempdb资源排行榜
select top 5 b.host_name,
b.program_name,
b.login_name,
b.session_id
from sys.dm_db_session_space_usage a,
sys.dm_exec_sessions b where a.session_id=b.session_id
order by
(a.user_objects_alloc_page_count +a.internal_objects_alloc_page_count) desc
6、查询数据库最忙碌的数据库I/O
--利用fn_virtualfilestats 函数查询数据库文件的I/O统计信息
select db_name(dbid) '数据库',
(select name from sys.master_files B where B.file_id=A.fileid and B.database_id=A.DBID) '档案',
NumberReads '读取次数',
BytesRead '读取字节数',
NumberWrites '写入次数',
BytesWritten '写入字数数',
BytesOnDisk/(1024) '物理字节数Kb'
from Fn_virtualfilestats(-1,-1) as A
--以上均在SQL 2005中验证通过。希望大家提出更多更好的经验共享。