SQL Server 데이터베이스의 크기를 어떻게 확인합니까?


29

기본 : MS SQL Server DB의 디스크 크기는 얼마입니까?
더보기 : 데이터의 위치를 ​​신속하게 확인할 수 있습니까? 즉, 어떤 테이블, 로그 등


어떤 버전의 SQL?
SQLChicken

이것은 프로그래밍 방식의 질문입니다. 읽기 : stackoverflow.com/questions/914182
balexandre

1
동의하지 않습니다. 근본적으로 sysadmin 질문입니다. 서버에 디스크 공간이 부족한 경우 프로그래머가 관심을 갖는 이유는 무엇입니까?
Nick Kavadias

2
나는 Nick에 동의합니다. 하나 또는 질문입니다. DBA 질문은 분명히 여기에 속합니다.
squillman

DB에 사용 가능한 공간이 부족한 경우 프로그래머는 예외 처리에 관심을 갖습니다. sysadmins는 명백한 이유 때문에 관리합니다. :)
JYelton

답변:


35

sp_spaceused 명령으로 시작하고 싶을 것입니다.

예를 들면 다음과 같습니다.

sp_spaceused 데이터베이스의 전체 크기에 대한 정보를 반환합니다.

sp_spaceused 'MyTable'MyTable 의 크기에 대한 정보를 반환합니다.

정보를 얻을 수있는 모든 것에 대한 문서를 읽으십시오. sp_msforeachtable 명령을 사용하여 모든 테이블에 대해 sp_spaceused를 한 번에 실행할 수 있습니다.

편집 : 명령은 때때로 여러 데이터 집합을 반환하며 각 집합에는 다른 통계 청크가 포함되어 있습니다.


sp_spaceused는 메모를 추가하기 위해 데이터베이스 파일이 차지하는 8KB 페이지 수를 반환합니다.
다리오 솔레

3
db가 2000 인 경우 여기에 올바른 숫자를 얻기 위해 DBCC UPDATEUSAGE를 실행해야 할 수 있습니다. 2005 년에 항상 정확해야 함
Nick Kavadias

16

가장 쉬운 방법 (타이핑 없음) : Management Studio의 SQL 2005/8에서 데이터베이스를 마우스 오른쪽 단추로 클릭하고 보고서, 표준 보고서, 디스크 사용량 (최상위 테이블, 테이블 및 파티션 별)을 선택하십시오.



1

에서 실제 파일을 볼 수 있습니다 sys.database_files. 파일 경로와 크기가 있습니다 (IIRC 블록 단위).

sp_spaceused 개별 객체가 차지하는 공간을 보여줍니다.


1

테이블 당 크기를 얻으려면 이것을 실행하십시오.

/******************************************************************************
**    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 ;

Robert Caine 블로그 에서 가져온

이 코드는 Microsoft SQL 2005+ 용입니다.


0

시작 \ 프로그램 \ Microsoft SQL Server \ Enterprise Manager를 실행하십시오. % databasename % 속성에서 데이터베이스 시트를 열면 위치 데이터 파일 및 트랜잭션 파일을 볼 수 있습니다.


또는 SQL Server 2005, 2008 등의 경우 SQL Management Studio를 열고 데이터베이스를 마우스 오른쪽 단추로 클릭하고 속성을 선택한 다음 왼쪽 탭에서 두 번째 항목 인 파일을 클릭하십시오. 그러나 이것은 전체 파일 크기 만 반환합니다. 데이터와 로그 파일이 저장된 폴더를 보면 알 수 있습니다.
David

0

이것은 "악한"커서 나 루프없이이 모든 정보를 얻는 질의 / 뷰입니다. ;-)

    /*
    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')

즐겨.


-1

GUI에서이를 수행하는 방법에 대한 몇 가지 설명이 있습니다.

실제 DBA는 알고 있습니다 : GUI는 처프를위한 것입니다.

sp_helpdb

모든 파일 이름, 위치, 디스크 공간 및 유형의 레코드 세트를 반환합니다.

각 데이터베이스의 sysfiles 테이블에서 파일 이름을 검색 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.