2011-08-15 20 views
6

In a previous question @Morawski被认为“与1000列,44个000行这是约330 MB的表;这是一个浏览器使用了多少只是几个打开的标签” 。如何测量表的大小在GB中的表中的SQL

表格应该有多少列和行来说明其大小是> 10 GB (表格只有双值)。

@Morawski如何得出结论:1,000列和44,000是330MB

是否有任何脚本,可以在SQL讲这个?

+3

在上一个问题中,所有列都是双打。这对计算非常重要。 –

回答

7
-- Measures tables size (in kilobytes) 
-- Tested in MS SQL Server 2008 R2 

declare @t table (
name nvarchar(100), [rows] int, [reserved] nvarchar(100), [data] nvarchar(100), [index_size] nvarchar(100), [unused] nvarchar(100) 
) 
declare @name nvarchar(100) 

declare tt cursor for 
Select name from sys.tables 
open tt 

fetch next from tt into @name 
while @@FETCH_STATUS = 0 
begin 
    insert into @t 
    exec sp_spaceused @name 
    fetch next from tt into @name 
end 

close tt 
deallocate tt 

select name as table_name, [rows] as rows_count, data + [index] as total_size, data as data_size, [index] as index_size 
from (select name, 
[rows], 
cast (LEFT(data, LEN(data)-3) as int) data, 
cast (LEFT(index_size, LEN(index_size)-3) as int) [index] 
from @t 
) x 
order by 3 desc, 1 
+0

为了获得更好的性能,请将光标指定为STATIC:'DECLARE tt CURSOR STATIC FOR ...' –

11

有注释sp_spaceused一个存储过程调用。不知道这是否是@Morawski用什么,但作为一个开发分贝一个例子,我不得不派上用场:

exec sp_spaceused 'aspnet_users' 

name   rows reserved  data  index_size  unused 
------------- ------- ------------ -------- ------------ ---------- 
aspnet_Users 3  48 KB  8 KB  40 KB   0 KB 
+0

是否可以使用此存储过程来获取所有表使用的空间? –

+0

你是指整体(总计)还是个人? –

+0

单独。我的意思是,使用此存储过程来获取所有表的列表,以及每个表使用的大小和空间。 –

2

不知道的TSQL脚本(我敢肯定,这存在),但你可以通过UI(SSMS找到它)如下:

1)R单击表格
2)...属性
3)...存储选项卡

从那里,它会告诉你无论是“数据空间”和“索引空间” - 所以,如果你想有一个总的足迹,只是增加了那些。

编辑
如果您正在寻找表的总占用空间,请考虑日志空间。

这里是在@乔恩的回答中列出的存储过程的信息。此外,它还引用sys视图,您可以直接查询空间使用情况数据。 http://msdn.microsoft.com/en-us/library/ms188776.aspx

3

有精确的公式来进行容量规划为SQL Server:

随着固定长度双打1000列(这将是float(53) SQL类型,8个字节的存储)您的行接近最大行大小l imit,但它实际上适合页面。 44K行需要44K页(由于庞大的行大小,每页只有一行将适合),也就是说,在8KB页44000 * 8KB =〜344 MB。如果您的聚簇索引大小将随着密钥大小而增加,请参阅上面的第一个链接。

但1000列的表的设计是一个巨大的代码味道。你的问题对数据库部分非常模糊,你以前的问题从来没有提到数据库,而是关于内存数组,如果将这两个问题加在一起,这两个问题没有多大意义。也许你有兴趣阅读Sparse Columns,约EAV modeling或约XML data type