พื้นฐาน: ขนาดบนดิสก์ของ MS SQL Server DB ของฉันคืออะไร
เพิ่มเติม: ฉันสามารถดูได้อย่างรวดเร็วว่าข้อมูลอยู่ที่ไหน? เช่นตารางบันทึก ฯลฯ
พื้นฐาน: ขนาดบนดิสก์ของ MS SQL Server DB ของฉันคืออะไร
เพิ่มเติม: ฉันสามารถดูได้อย่างรวดเร็วว่าข้อมูลอยู่ที่ไหน? เช่นตารางบันทึก ฯลฯ
คำตอบ:
คุณอาจต้องการเริ่มต้นด้วยคำสั่ง sp_spaceused
ตัวอย่างเช่น:
sp_spaceused ส่งคืนข้อมูลเกี่ยวกับขนาดทั้งหมดของฐานข้อมูล
sp_spaceused 'MyTable' ส่งคืนข้อมูลเกี่ยวกับขนาดของ MyTable
อ่านเอกสารสำหรับทุกสิ่งที่คุณสามารถรับข้อมูลได้ คุณยังสามารถใช้คำสั่ง sp_msforeachtable เพื่อเรียกใช้ sp_spaceused กับตารางทั้งหมดในครั้งเดียว
แก้ไข: โปรดทราบว่าบางครั้งคำสั่งจะส่งคืนชุดข้อมูลหลายชุดแต่ละชุดมีสถิติที่แตกต่างกัน
วิธีที่ง่ายที่สุด (ไม่พิมพ์!): ใน SQL 2005/8 จาก Management Studio ให้คลิกขวาที่ฐานข้อมูลเลือกรายงานรายงานมาตรฐานการใช้ดิสก์ (เช่นตามตารางด้านบนตารางและพาร์ติชัน)
สคริปต์นี้วนรอบตารางทั้งหมดในฐานข้อมูลปัจจุบันและแสดงจำนวนพื้นที่ที่แต่ละรายการใช้สำหรับข้อมูลดัชนีและพื้นที่ที่ไม่ได้ใช้:
http://sqlserverpedia.com/wiki/Calculate_Current_Table_Sizes
sys.database_files
คุณสามารถดูไฟล์ทางกายภาพใน นี่คือเส้นทางไปยังไฟล์และขนาด (ในบล็อก IIRC)
sp_spaceused
จะแสดงให้คุณเห็นว่าแต่ละวัตถุมีพื้นที่ว่างเท่าใด
เรียกใช้สิ่งนี้เพื่อรับขนาดต่อตาราง:
/******************************************************************************
** 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+
เรียกใช้ตัวจัดการ Server \ Enterprise SQL ของ Start \ Programs \ Microsoft เปิดแผ่นฐานข้อมูลในคุณสมบัติ% databasename% คุณสามารถดูที่ตั้งไฟล์กรองข้อมูลและธุรกรรม
นี่คือแบบสอบถาม / มุมมองที่ได้รับข้อมูลทั้งหมดนี้และอื่น ๆ โดยไม่ต้องมีเคอร์เซอร์หรือลูป "ร้าย" ใด ๆ ;-)
/*
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')
สนุก.
มีคำอธิบายหลายวิธีใน GUI
DBA รู้จริง: GUI สำหรับการสับ
sp_helpdb
ส่งคืนชุดระเบียนของชื่อไฟล์ตำแหน่งที่ตั้งพื้นที่บนดิสก์และประเภททั้งหมด
คุณยังสามารถดึงชื่อไฟล์จากตาราง sysfiles ของฐานข้อมูลแต่ละตัว