SQL Server veritabanımın boyutunu nasıl belirlerim?


29

Temel: MS SQL Server DB diskimin boyutu nedir?
Daha fazla: Verilerin nerede olduğunu hızla görebilir miyim? yani hangi tabloları, günlükleri vb.


SQL hangi sürümü?
SQLChicken

bu programlı bir sorudur, gösterinin StackOverflow'ta olması! Oku: stackoverflow.com/questions/914182
balexandre

1
Katılmıyorum. Temelde bir sysadmin sorusu. Sunucularda disk alanı yetersiz olursa neden programcılar önemser?
Nick Kavadias

2
Nick ile aynı fikirdeyim. Bu bir / veya soru. DBA soruları kesinlikle buraya aittir.
squillman

İkisi de: programlayıcılar kullanılabilir alanın tükenmesi durumunda programcıların istisnayı ele almasına özen gösterir; Sysadmins bariz nedenlerden dolayı bakım. :)
JYelton

Yanıtlar:


35

Muhtemelen sp_spaceused komutuyla başlamak isteyeceksiniz.

Örneğin:

sp_spaceused Veritabanının toplam büyüklüğü hakkında bilgi döndürür

sp_spaceused 'MyTable' MyTable'ın boyutu hakkında bilgi döndürür

Bilgi alabileceğiniz her şey için dokümanları okuyun. Sp_msforeachtable komutunu, sp_spaceused komutunu tüm tablolara karşı aynı anda çalıştırmak için de kullanabilirsiniz.

Düzenleme: Komutun bazen her biri farklı bir istatistik grubu içeren birden fazla veri kümesi döndürdüğünü unutmayın.


Sadece bir not eklemek için sp_spaceused, veritabanı dosyalarının kapladığı 8KB sayfa sayısını döndürür.
Dario Solera

3
Eğer db'niz 2000 ise, doğru numaraları alabilmek için DBCC UPDATEUSAGE kullanmanız gerekebilir. 2005'te her zaman doğru olmalı
Nick Kavadias

16

En kolay yol (yazma yok!): Management Studio'dan SQL 2005 / 8'de, veritabanına sağ tıklayın, Raporlar, Standart Raporlar, Disk Kullanımı (Ayrıca Üst Tablolar, Tablo ve Bölümlere Göre) öğesini seçin.



1

Fiziksel dosyaları görebilirsiniz sys.database_files. Bu dosyaya ve boyuta giden yolu vardır (IIRC bloklarında).

sp_spaceused tek bir nesnenin ne kadar yer kapladığını gösterecektir.


1

Tablo başına boyut almak için bunu çalıştırın:

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

alınan gelen Robert Caine blogda

Bu kod Microsoft SQL 2005+ içindir.


0

Başlat \ Programs \ Microsoft SQL Server \ Enterprise Manager 'ı çalıştırın. Veritabanı sayfasını açın,% databasename% özelliğinde konum verilerini görebilirsiniz Dosya ve İşlem dosyaları.


Veya SQL Server 2005, 2008 vb. İse, SQL Management Studio'yu açın, veritabanına sağ tıklayın, özellikleri seçin ve ardından sol sekmedeki ikinci öğeye tıklayın. Ancak bu yalnızca verilerin ve günlük dosyasının depolandığı klasöre bakarak görebileceğiniz genel dosya boyutunu döndürür.
David,

0

Bu, herhangi bir "kötü" imleç veya döngü olmadan tüm bu bilgileri ve daha fazlasını alan bir sorgu / görünümdür. ;-)

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

Keyfini çıkarın.


-1

GUI'den nasıl yapılacağına dair birkaç açıklama vardır.

Gerçek DBA'nın bildiği: GUI'lerin topaklanmalar için.

sp_helpdb

Tüm dosya adlarının, konumların, diskteki alanın ve türün kayıt kümesini döndürür.

Dosya adlarını her veritabanının sysfiles tablosundan da alabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.