ฉันจะกำหนดขนาดของฐานข้อมูล SQL Server ของฉันได้อย่างไร


29

พื้นฐาน: ขนาดบนดิสก์ของ MS SQL Server DB ของฉันคืออะไร
เพิ่มเติม: ฉันสามารถดูได้อย่างรวดเร็วว่าข้อมูลอยู่ที่ไหน? เช่นตารางบันทึก ฯลฯ


SQL รุ่นใด
SQLChicken

นี่เป็นคำถามเชิงโปรแกรมแสดงอยู่ใน StackOverflow! อ่าน: stackoverflow.com/questions/914182
balexandre

1
ฉันไม่เห็นด้วย. มันเป็นคำถามพื้นฐานการดูแลระบบ ทำไมโปรแกรมเมอร์ถึงสนใจว่าเซิร์ฟเวอร์หมดเนื้อที่ดิสก์?
Nick Kavadias

2
ฉันเห็นด้วยกับนิค มันเป็นคำถามอย่างใดอย่างหนึ่งหรือ คำถาม DBA อยู่ที่นี่อย่างแน่นอน
squillman

เป็นทั้ง: โปรแกรมเมอร์สนใจเกี่ยวกับการจัดการข้อยกเว้นถ้าฐานข้อมูลมีพื้นที่ว่างเพียงพอ ดูแลระบบดูแลด้วยเหตุผลที่ชัดเจน :)
JYelton

คำตอบ:


35

คุณอาจต้องการเริ่มต้นด้วยคำสั่ง sp_spaceused

ตัวอย่างเช่น:

sp_spaceused ส่งคืนข้อมูลเกี่ยวกับขนาดทั้งหมดของฐานข้อมูล

sp_spaceused 'MyTable' ส่งคืนข้อมูลเกี่ยวกับขนาดของ MyTable

อ่านเอกสารสำหรับทุกสิ่งที่คุณสามารถรับข้อมูลได้ คุณยังสามารถใช้คำสั่ง sp_msforeachtable เพื่อเรียกใช้ sp_spaceused กับตารางทั้งหมดในครั้งเดียว

แก้ไข: โปรดทราบว่าบางครั้งคำสั่งจะส่งคืนชุดข้อมูลหลายชุดแต่ละชุดมีสถิติที่แตกต่างกัน


เพียงเพิ่มบันทึกย่อ sp_spaceused จะส่งกลับจำนวนหน้าขนาด 8KB ที่ไฟล์ฐานข้อมูลครอบครอง
Dario Solera

3
หากฐานข้อมูลของคุณคือ 2000 คุณอาจต้องเรียกใช้การปรับปรุง DBCC เพื่อรับหมายเลขที่ถูกต้องที่นี่ ควรแก้ไขให้ถูกต้องในปี 2005
Nick Kavadias

16

วิธีที่ง่ายที่สุด (ไม่พิมพ์!): ใน SQL 2005/8 จาก Management Studio ให้คลิกขวาที่ฐานข้อมูลเลือกรายงานรายงานมาตรฐานการใช้ดิสก์ (เช่นตามตารางด้านบนตารางและพาร์ติชัน)


4

สคริปต์นี้วนรอบตารางทั้งหมดในฐานข้อมูลปัจจุบันและแสดงจำนวนพื้นที่ที่แต่ละรายการใช้สำหรับข้อมูลดัชนีและพื้นที่ที่ไม่ได้ใช้:

http://sqlserverpedia.com/wiki/Calculate_Current_Table_Sizes


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

เรียกใช้ตัวจัดการ Server \ Enterprise SQL ของ Start \ Programs \ Microsoft เปิดแผ่นฐานข้อมูลในคุณสมบัติ% 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.