Làm cách nào để xác định kích thước của cơ sở dữ liệu SQL Server của tôi?


29

Cơ bản: kích thước trên đĩa của MS SQL Server DB của tôi là bao nhiêu?
Thêm: tôi có thể nhanh chóng xem dữ liệu ở đâu không? tức là bảng nào, bản ghi, v.v.


Phiên bản nào của SQL?
SQLChicken

đây là một câu hỏi có lập trình, hiển thị trong StackOverflow! đọc: stackoverflow.com/questions/914182
balexandre

1
Tôi không đồng ý. Về cơ bản, đây là một câu hỏi sysadmin. Tại sao các lập trình viên quan tâm nếu máy chủ hết dung lượng đĩa?
Nick Kavadias

2
Tôi đồng ý với Nick. Đó là một hoặc / hoặc câu hỏi. Câu hỏi DBA chắc chắn thuộc về đây.
squillman

Đó là cả hai: lập trình viên quan tâm đến việc xử lý ngoại lệ nếu DB hết dung lượng có thể sử dụng; sysadmin chăm sóc cho lý do rõ ràng. :)
JYelton

Câu trả lời:


35

Bạn có thể muốn bắt đầu với lệnh sp_spaceuse.

Ví dụ:

sp_spaceuse Trả về thông tin về tổng kích thước của cơ sở dữ liệu

sp_spaceuse 'MyTable' Trả về thông tin về kích thước của MyTable

Đọc tài liệu cho tất cả những điều bạn có thể nhận được thông tin. Bạn cũng có thể sử dụng lệnh sp_msforeachtable để chạy sp_spaceuse đối với tất cả các bảng cùng một lúc.

Chỉnh sửa: Hãy nhận biết lệnh đôi khi trả về nhiều bộ dữ liệu, mỗi bộ chứa một khối thống kê khác nhau.


Chỉ cần thêm một ghi chú, sp_spaceuse trả về số lượng trang 8KB mà các tệp cơ sở dữ liệu chiếm giữ.
Dario Solera

3
Nếu db của bạn là 2000 thì bạn có thể cần phải chạy DBCC UPDATEUSAGE để lấy đúng số ở đây. Luôn luôn phải chính xác trong năm 2005
Nick Kavadias

16

Cách dễ nhất (không cần gõ!): Trong SQL 2005/8 từ Management Studio, 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 (cũng theo Bảng, Bảng và phân vùng hàng đầu).



1

Bạn có thể xem các tập tin vật lý trong sys.database_files. Điều này có đường dẫn đến tệp và kích thước (trong khối IIRC).

sp_spaceused sẽ cho bạn thấy có bao nhiêu không gian một đối tượng riêng lẻ chiếm.


1

chạy này để có được kích thước trên mỗi bảng:

/******************************************************************************
**    File: “GetTableSpaceUsage.sql”
**    Name: Get Table Space Useage for a specific schema
**    Auth: Robert C. Cain
**    Date: 01/27/2008
**
**    Desc: Calls the sp_spaceused proc for each table in a schema and returns
**        the Table Name, Number of Rows, and space used for each table.
**
**    Called by:
**     n/a – As needed
**
**    Input Parameters:
**     In the code check the value of @schemaname, if you need it for a
**     schema other than dbo be sure to change it.
**
**    Output Parameters:
**     NA
*******************************************************************************/

/*—————————————————————————*/
/* Drop the temp table if it's there from a previous run                     */
/*—————————————————————————*/
if object_id(N'tempdb..[#TableSizes]') is not null
  drop table #TableSizes ;
go

/*—————————————————————————*/
/* Create the temp table                                                     */
/*—————————————————————————*/
create table #TableSizes
  (
    [Table Name] nvarchar(128)   /* Name of the table */
  , [Number of Rows] char(11)    /* Number of rows existing in the table. */
  , [Reserved Space] varchar(18) /* Reserved space for table. */
  , [Data Space] varchar(18)    /* Amount of space used by data in table. */
  , [Index Size] varchar(18)    /* Amount of space used by indexes in table. */
  , [Unused Space] varchar(18)   /* Amount of space reserved but not used. */
  ) ;
go

/*—————————————————————————*/
/* Load the temp table                                                        */
/*—————————————————————————*/
declare @schemaname varchar(256) ;
-- Make sure to set next line to the Schema name you want!
set @schemaname = 'dbo' ;

-- Create a cursor to cycle through the names of each table in the schema
declare curSchemaTable cursor
  for select sys.schemas.name + '.' + sys.objects.name
      from    sys.objects
            , sys.schemas
      where   object_id > 100
              and sys.schemas.name = @schemaname
              /* For a specific table uncomment next line and supply name */
              --and sys.objects.name = 'specific-table-name-here'    
              and type_desc = 'USER_TABLE'
              and sys.objects.schema_id = sys.schemas.schema_id ;

open curSchemaTable ;
declare @name varchar(256) ;  /* This holds the name of the current table*/

-- Now loop thru the cursor, calling the sp_spaceused for each table
fetch curSchemaTable into @name ;
while ( @@FETCH_STATUS = 0 )
  begin    
    insert into #TableSizes
            exec sp_spaceused @objname = @name ;       
    fetch curSchemaTable into @name ;   
  end

/* Important to both close and deallocate! */
close curSchemaTable ;     
deallocate curSchemaTable ;


/*—————————————————————————*/
/* Feed the results back                                                     */
/*—————————————————————————*/
select [Table Name]
      , [Number of Rows]
      , [Reserved Space]
      , [Data Space]
      , [Index Size]
      , [Unused Space]
from    [#TableSizes]
order by [Table Name] ;

/*—————————————————————————*/
/* Remove the temp table                                                     */
/*—————————————————————————*/
drop table #TableSizes ;

lấy từ blog của Robert Caine

Mã này dành cho Microsoft SQL 2005+


0

Chạy Start \ Programs \ Microsoft SQL Server \ Enterprise Manager. Mở bảng Cơ sở dữ liệu, trong thuộc tính% databasename%, bạn có thể thấy vị trí Tệp dữ liệu & tệp giao dịch.


Hoặc nếu đó là SQL Server 2005, 2008, v.v., hãy mở SQL Management Studio, nhấp chuột phải vào cơ sở dữ liệu, chọn thuộc tính và sau đó nhấp vào mục thứ hai trên tab bên trái, tệp. Tuy nhiên, điều này sẽ chỉ trả về kích thước tệp tổng thể - mà bạn có thể thấy bằng cách chỉ nhìn vào thư mục lưu trữ dữ liệu và tệp nhật ký.
David

0

Đây là một truy vấn / chế độ xem có được tất cả thông tin này và hơn thế nữa, không có bất kỳ con trỏ hoặc vòng lặp "xấu xa" nào. ;-)

    /*
    vwTableInfo - Table Information View

 This view display space and storage information for every table in a
SQL Server 2005 database.
Columns are:
    Schema
    Name
    Owner       may be different from Schema)
    Columns     count of the max number of columns ever used)
    HasClusIdx  1 if table has a clustered index, 0 otherwise
    RowCount
    IndexKB     space used by the table's indexes
    DataKB      space used by the table's data

 16-March-2008, RBarryYoung@gmail.com
 31-January-2009, Edited for better formatting
*/
--CREATE VIEW vwTableInfo
-- AS

    SELECT SCHEMA_NAME(tbl.schema_id) as [Schema]
    , tbl.Name
    , Coalesce((Select pr.name 
            From sys.database_principals pr 
            Where pr.principal_id = tbl.principal_id)
        , SCHEMA_NAME(tbl.schema_id)) as [Owner]
    , tbl.max_column_id_used as [Columns]
    , CAST(CASE idx.index_id WHEN 1 THEN 1 ELSE 0 END AS bit) AS [HasClusIdx]
    , Coalesce( (Select sum (spart.rows) from sys.partitions spart 
        Where spart.object_id = tbl.object_id and spart.index_id < 2), 0) AS [RowCount]

    , Coalesce( (Select Cast(v.low/1024.0 as float) 
        * SUM(a.used_pages - CASE WHEN a.type <> 1 THEN a.used_pages WHEN p.index_id < 2 THEN a.data_pages ELSE 0 END) 
            FROM sys.indexes as i
             JOIN sys.partitions as p ON p.object_id = i.object_id and p.index_id = i.index_id
             JOIN sys.allocation_units as a ON a.container_id = p.partition_id
            Where i.object_id = tbl.object_id  )
        , 0.0) AS [IndexKB]

    , Coalesce( (Select Cast(v.low/1024.0 as float)
        * SUM(CASE WHEN a.type <> 1 THEN a.used_pages WHEN p.index_id < 2 THEN a.data_pages ELSE 0 END) 
            FROM sys.indexes as i
             JOIN sys.partitions as p ON p.object_id = i.object_id and p.index_id = i.index_id
             JOIN sys.allocation_units as a ON a.container_id = p.partition_id
            Where i.object_id = tbl.object_id)
        , 0.0) AS [DataKB]
    , tbl.create_date, tbl.modify_date

     FROM sys.tables AS tbl
      INNER JOIN sys.indexes AS idx ON (idx.object_id = tbl.object_id and idx.index_id < 2)
      INNER JOIN master.dbo.spt_values v ON (v.number=1 and v.type='E')

Thưởng thức.


-1

Có một số mô tả về cách thực hiện từ GUI.

Real DBA biết: GUI dành cho khối.

sp_helpdb

Trả về một bản ghi của tất cả các tên tệp, vị trí, không gian trên đĩa và loại.

Bạn cũng có thể truy xuất tên tệp từ bảng sysfiles của mỗi cơ sở dữ liệu.

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.