Frage Wie ermittle ich die Größe meiner SQL Server-Datenbank?


Basic: Wie groß ist die Größe meiner MS SQL Server DB?
Mehr: Kann ich schnell sehen, wo die Daten sind? d.h. welche Tabellen, Protokolle usw


29
2018-05-28 12:28


Ursprung


Welche Version von SQL? - SQLChicken
Dies ist eine programmatische Frage, zeige in StackOverflow! lesen: stackoverflow.com/questions/914182 - balexandre
Ich stimme dir nicht zu. Es ist im Grunde eine Sysadmin-Frage. Warum kümmern sich Programmierer darum, wenn auf dem Server kein Speicherplatz mehr verfügbar ist? - Nick Kavadias
Ich stimme Nick zu. Es ist eine Entweder-Oder-Frage. DBA-Fragen gehören definitiv hierher. - squillman
Es ist beides: Programmierer kümmern sich darum, die Ausnahme zu behandeln, wenn der DB nicht mehr genügend Speicherplatz zur Verfügung steht. Systemadministratoren kümmern sich um offensichtliche Gründe. :) - JYelton


Antworten:


Wahrscheinlich möchten Sie mit dem Befehl sp_spaceused beginnen.

Zum Beispiel:

sp_spaceused Gibt Informationen über die Gesamtgröße der Datenbank zurück

sp_spaceused 'MyTable' Gibt Informationen zur Größe von MyTable zurück

Lesen Sie die Dokumentation für all die Dinge, über die Sie Informationen erhalten können. Sie können auch den Befehl sp_msforeachtable verwenden, um sp_spaceused für alle Tabellen gleichzeitig auszuführen.

Bearbeiten: Beachten Sie, dass der Befehl manchmal mehrere Datensätze zurückgibt, wobei jeder Satz einen anderen Teil der Statistik enthält.


35
2018-05-28 12:39



Um nur eine Notiz hinzuzufügen, gibt sp_spaceused die Anzahl der 8 KB Seiten zurück, die die Datenbankdateien belegen. - Dario Solera
Wenn Ihre Datenbank 2000 ist, müssen Sie möglicherweise DBCC UPDATEUSAGE ausführen, um die richtigen Zahlen hier zu erhalten. Sollte 2005 immer stimmen - Nick Kavadias


Der einfachste Weg (keine Eingabe!): Klicken Sie in SQL 2005/8 von Management Studio mit der rechten Maustaste auf die Datenbank, wählen Sie Berichte, Standardberichte, Datenträgerauslastung (auch Nach Top-Tabellen, Tabelle und Partition) aus.


16
2018-05-28 17:31





Dieses Skript durchläuft alle Tabellen in der aktuellen Datenbank und zeigt an, wie viel Speicherplatz für Daten, Indizes und ungenutzten Speicherplatz belegt ist:

http://sqlserverpedia.com/wiki/Calculate_Current_Table_Sizes


4
2018-05-28 13:02





Sie können die physischen Dateien sehen sys.database_files. Dies hat den Pfad zur Datei und die Größe (in Blöcken IIRC).

sp_spaceused zeigt Ihnen, wie viel Platz ein einzelnes Objekt einnimmt.


1
2018-05-28 12:41





Führen Sie dies aus, um die Größe pro Tabelle zu erhalten:

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

genommen von Robert Caine Blog

Dieser Code ist für Microsoft SQL 2005+


1
2018-05-28 13:02





Führen Sie Start \ Programme \ Microsoft SQL Server \ Enterprise Manager aus. Öffnen Sie das Datenbank-Blatt, in der Eigenschaft% Datenbankname% können Sie die Position Daten Dateien und Transaktionsdateien sehen.


0
2018-05-28 12:40



Oder wenn es SQL Server 2005, 2008 usw. ist, öffnen Sie SQL Management Studio, klicken Sie mit der rechten Maustaste auf die Datenbank, wählen Sie Eigenschaften und klicken Sie dann auf das zweite Element auf der linken Registerkarte Dateien. Dies ergibt jedoch nur die gesamte Dateigröße - die Sie sehen könnten, indem Sie einfach in den Ordner schauen, in dem die Daten und die Protokolldatei gespeichert sind. - David


Dies ist eine Abfrage / Ansicht, die all diese Informationen und mehr ohne "böse" Cursor oder Schleifen erhält. ;-)

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

Genießen.


0
2018-05-28 17:13





Es gibt verschiedene Beschreibungen, wie man es über die GUI macht.

Echte DBA's wissen: GUI's sind für Chumps.

sp_helpdb

Gibt ein Recordset aller Dateinamen, Speicherorte, Speicherplatz auf der Festplatte und Typ zurück.

Sie können die Dateinamen auch aus der Tabelle sysfiles jeder Datenbank abrufen.


-1
2018-05-29 18:07