sql文件的分配方式及文件空间检查方法

 

(1)文件的分配方式及文件空间检查方法

--------------------sp_spaceused------------------------------

-- 不加任何参数,sp_spaceused返回当前数据库的空间使用情况

sp_spaceused

-- 使用表名作为参数,sp_spaceused返回指定表的空间使用情况

sp_spaceused "Person.Address"

go

 

 

(2)数据文件分配

--------------------dbcc page------------------------------

--语法:DBCC Page(<db_id>, <file_id>, <page_id>, <format_id>)

 

-- db_id的获得

-- 返回所有数据库的ID信息

sp_helpdb

-- 返回当前数据库的ID

select DB_ID()

-- 返回指定名称数据库的ID

select DB_ID('AdventureWorks')

 

 

-- file_id的获得

sp_helpfile

-- 返回指定名称表的ID

select file_id('AdventureWorks_Data')

 

-- 查看某个page的信息

 

-- 先打开dbcc开关

dbcc traceon(3604)

 

-- 查看指定页面的信息

-- Metadata+SLOT+Memory dump

dbcc page(11,1,100,1) with TableResults

-- Metadata+Memory dump

dbcc page(11,1,100,2) with TableResults

-- Metadata+IAM

dbcc page(11,1,100,3) with TableResults

(3)数据文件空间使用计算方法

 

-- 按照区得到数据库文件大小

dbcc showfilestats

 

-- 得到当前数据库所有表的数据页的情况

SELECT o.name ,

SUM (p.reserved_page_count) as reserved_page_count,

SUM (p.used_page_count) as used_page_count,

SUM (

CASE

WHEN (p.index_id < 2) THEN (p.in_row_data_page_count + p.lob_used_page_count + p.row_overflow_used_page_count)

ELSE p.lob_used_page_count + p.row_overflow_used_page_count

END

) as DataPages,

SUM (

CASE

WHEN (p.index_id < 2) THEN row_count

ELSE 0

END

) as rowCounts

FROM sys.dm_db_partition_stats p 

inner join sys.objects o on p.object_id = o.object_id

group by o.name

(4)日志文件

 

-- 查看日志使用情况

dbcc sqlperf(logspace)

(5)通过脚本监视tempdb空间使用
 
(6)比较存储结构对空间使用影响
 
(7)Delete和truncate之间的区别
 
(8)为什么DBCC Shrinkfile会不起作用
 
面对这种情况怎么办呢?如果这个表有一个clustered index,那么我们可以通过重建索引的方式把页面重排一次。现在的这个表没有clustered index,那么我们为它建一个,也能达到同样的效果。
create clustered index show_I 
on show_extent (a)
go
dbcc showcontig('show_extent')
go
--这时候我们再去shrinkfile就有效果了。
dbcc shrinkfile (1, 40)
--我们还是以刚才的test_shrink数据库为例, 当我们删除掉出了5以外的其他数据以后,运行下面查询。
use test_shrink 
go 
drop table extentinfo
go
create table extentinfo 
( [file_id] smallint, 
page_id int, 
pg_alloc int, 
ext_size int, 
obj_id int, 
index_id int, 
partition_number int,
partition_id bigint,
iam_chain_type varchar(50),
pfs_bytes varbinary(10) ) 
go 
drop proc import_extentinfo
go
create procedure import_extentinfo 
as dbcc extentinfo('test_shrink') 
go 
insert extentinfo 
exec import_extentinfo 
go 
select [file_id],obj_id, index_id, partition_id, ext_size, 
'actual extent count'=count(*), 'actual page count'=sum(pg_alloc), 
'possible extent count'=ceiling(sum(pg_alloc)*1.0/ext_size), 
'possible extents / actual extents' = (ceiling(sum(pg_alloc)*1.00/ext_size)*100.00) / count(*) 
from extentinfo 
group by [file_id],obj_id, index_id,partition_id, ext_size 
having count(*)-ceiling(sum(pg_alloc)*1.0/ext_size) > 0 
order by partition_id, obj_id, index_id, [file_id]

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值