Cách xác định kích thước các bảng của tôi trong cơ sở dữ liệu SQL Server


28

Có bất kỳ chức năng / thủ tục lưu trữ / truy vấn tích hợp nào hữu ích để truy xuất thông tin về kích thước của MyTablecơ sở dữ liệu SQL Server không?


Câu trả lời này trên SO có một kịch bản khá đơn giản và không yêu cầu thủ tục không có giấy tờ.
Shawn Melton

Câu trả lời được đưa ra bởi AA.SC rất hữu ích ngoại trừ việc định danh cơ sở dữ liệu msdb cần được xóa khỏi tất cả các DMV trong phép nối. Vì nó đứng, nó chỉ báo cáo trên các bảng trong chính msdb!
WaitForPete

Câu trả lời:


34

Đối với bảng duy nhất bạn có thể sử dụng

sp_spaceused MyTable

Đối với tất cả các bảng trong cơ sở dữ liệu, bạn có thể sử dụng nó với mục đích sp_msforeachtabletheo dõi

CREATE TABLE #temp (
table_name sysname ,
row_count INT,
reserved_size VARCHAR(50),
data_size VARCHAR(50),
index_size VARCHAR(50),
unused_size VARCHAR(50))
SET NOCOUNT ON
INSERT #temp
EXEC sp_msforeachtable 'sp_spaceused ''?'''
SELECT a.table_name,
a.row_count,
COUNT(*) AS col_count,
a.data_size
FROM #temp a
INNER JOIN information_schema.columns b
ON a.table_name collate database_default
= b.table_name collate database_default
GROUP BY a.table_name, a.row_count, a.data_size
ORDER BY CAST(REPLACE(a.data_size, ' KB', '') AS integer) DESC
DROP TABLE #temp

45

Nếu bạn không muốn viết một tập lệnh, bạn cũng có thể mở 'Chi tiết trình khám phá đối tượng' được sử dụng nhiều trong SSMS (Phím tắt F7).

Chi tiết cấp cao nhất của Explorer Explorer

Từ cấp cao nhất, mở thư mục Bảng để nhận danh sách tất cả các bảng trong cơ sở dữ liệu của bạn.

Bạn có thể cần tùy chỉnh các cột để xem Không gian được sử dụng. Điều này có thể được thực hiện bằng cách nhấp chuột phải vào hàng tiêu đề và chọn các cột bạn muốn hiển thị.

Kích thước dữ liệu bảng trong SSMS

Có nhiều dữ liệu như thế này có sẵn trong Chi tiết thám hiểm đối tượng.


3
Đẹp hơn nhiều so với cách tiếp cận t-sql ở trên (không phù hợp với tôi)
Orion Edwards

17

Trong SSMS nhấp chuột phải vào Cơ sở dữ liệu, chọn Báo cáo, Báo cáo chuẩn, Sử dụng đĩa theo Bảng hàng đầu.

Báo cáo sẽ cung cấp cho bạn số lượng hàng và kilobyte được sử dụng trên mỗi bảng.


2

Hãy xem sys.dm_db_partition_stats ( http://msdn.microsoft.com/en-us/l Library / ms187737.aspx ).

Có một số truy vấn mẫu tại liên kết đó và cũng tại http://bloss.msdn.com/b/cindygross/archive/2010/04/02/dmv-series-sys-dm-db-partition-stats.aspx

Bạn có thể sửa đổi cho phù hợp với nhu cầu của mình, tức là lọc vào / ra các chỉ mục không được nhóm. Nhân số trang lên 8 để có kích thước tính bằng KB, sau đó chia cho 2 ^ 10 (= 1024) để chuyển đổi thành MB nếu được yêu cầu.

sp_spaceuse ( http://msdn.microsoft.com/en-us/l Library / ms188776.aspx ) cũng sẽ cung cấp thông tin kích thước bảng.


2

Để có được thông tin kích thước bảng tôi muốn sử dụng tập lệnh sau

SELECT  sc.name + '.' + t.NAME AS TableName,  
        p.[Rows],  
        ( SUM(a.total_pages) * 8 ) / 1024 AS TotalReservedSpaceMB, -- Number of total pages * 8KB size of each page in SQL Server  
        ( SUM(a.used_pages) * 8 ) / 1024 AS UsedDataSpaceMB,  
        ( SUM(a.data_pages) * 8 ) / 1024 AS FreeUnusedSpaceMB  
FROM    msdb.sys.tables t  
        INNER JOIN msdb.sys.schemas sc ON sc.schema_id = t.schema_id  
        INNER JOIN msdb.sys.indexes i ON t.OBJECT_ID = i.object_id  
        INNER JOIN msdb.sys.partitions p ON i.object_id = p.OBJECT_ID  
                                            AND i.index_id = p.index_id  
        INNER JOIN msdb.sys.allocation_units a ON p.partition_id = a.container_id  
WHERE   t.type_desc = 'USER_TABLE'  
        AND i.index_id <= 1  --- Heap\ CLUSTERED
        AND t.NAME='MYTableName' -- Replace with valid table name
GROUP BY sc.name + '.' + t.NAME,  
        i.[object_id],i.index_id, i.name, p.[Rows]  
ORDER BY ( SUM(a.total_pages) * 8 ) / 1024 DESC  

1

Đi đến cơ sở dữ liệu sau đó nhấp chuột phải và nhấp vào báo cáo sau đó báo cáo tiêu chuẩn sau đó sử dụng đĩa theo bảng. Điều này sẽ cung cấp cho bạn tất cả các ta les trong cơ sở dữ liệu đó và các bản ghi, dữ liệu, chỉ mục của họ, v.v.


0

bạn có thể sử dụng tập lệnh sau để tính toán âm lượng cho mỗi bảng và một tập kết quả khác của tổng số trên mỗi cơ sở dữ liệu

    SET NOCOUNT ON 
    IF OBJECT_ID('tempdb..#SpaceUsed') IS NOT NULL DROP TABLE #SpaceUsed

    CREATE TABLE #SpaceUsed 
    (
    TableName sysname ,
    [Rows] int ,
    [Reserved] varchar(20),
    [Data] varchar(20),
    [Index_Size] varchar(20),
    [Unused] varchar(20),
    [Reserved_KB] bigint,
    [Data_KB] bigint,
    [Index_Size_KB] bigint,
    [Unused_KB] bigint
    )

    DECLARE @CMD NVARCHAR(MAX) =''
    SELECT @CMD +='EXEC sp_spaceused ' +  ''''+QUOTENAME(TABLE_SCHEMA)+'.'+ QUOTENAME(TABLE_NAME)+''''+';'+CHAR(10)
    FROM INFORMATION_SCHEMA.TABLES 
    --PRINT @CMD

     INSERT INTO #SpaceUsed (TableName ,[Rows] , [Reserved], [Data] , [Index_Size] , [Unused] )
     EXEC sp_executesql @CMD



     UPDATE #SpaceUsed 
     SET [Reserved_KB] = CONVERT(BIGINT,RTRIM(LTRIM(REPLACE([Reserved] , ' KB', '')))),
         [Data_KB] = CONVERT(BIGINT,RTRIM(LTRIM(REPLACE([Data] , ' KB', '')))),
         [Index_Size_KB]= CONVERT(BIGINT,RTRIM(LTRIM(REPLACE([Index_Size] , ' KB', '')))),
         [Unused_KB]= CONVERT(BIGINT,RTRIM(LTRIM(REPLACE([Unused] , ' KB', ''))))


     SELECT TableName, [Rows], Reserved_KB , Data_KB , Index_Size_KB , Unused_KB ,  Data_KB / 1024.0 Data_MB , Data_KB / 1024.0 / 1024.0 Data_GB
     FROM #SpaceUsed
     ORDER BY Data_KB DESC 

     SELECT SUM(Reserved_KB) Reserved_KB , SUM(Data_KB) Data_KB, SUM(Index_Size_KB) Index_Size_KB , SUM(Unused_KB) Unused_KB ,SUM(Data_KB / 1024.0) Data_MB , SUM(Data_KB / 1024.0 / 1024.0) Data_GB
     FROM #SpaceUsed

     DROP TABLE #SpaceUsed
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.