MyTable
এসকিউএল সার্ভার ডাটাবেসে আকার সম্পর্কে তথ্য পুনরুদ্ধার করতে সহায়ক এমন কোনও বিল্ট-ইন ফাংশন / সঞ্চিত পদ্ধতি / কোয়েরি রয়েছে কি ?
MyTable
এসকিউএল সার্ভার ডাটাবেসে আকার সম্পর্কে তথ্য পুনরুদ্ধার করতে সহায়ক এমন কোনও বিল্ট-ইন ফাংশন / সঞ্চিত পদ্ধতি / কোয়েরি রয়েছে কি ?
উত্তর:
একক টেবিলের জন্য আপনি ব্যবহার করতে পারেন
sp_spaceused MyTable
একটি ডাটাবেসের সমস্ত টেবিলের জন্য আপনি এটি sp_msforeachtable
ফলওউইং হিসাবে ব্যবহার করতে পারেন
CREATE TABLE #temp (
table_name sysname ,
row_count INT,
reserved_size VARCHAR(50),
data_size VARCHAR(50),
index_size VARCHAR(50),
unused_size VARCHAR(50))
SET NOCOUNT ON
INSERT #temp
EXEC sp_msforeachtable 'sp_spaceused ''?'''
SELECT a.table_name,
a.row_count,
COUNT(*) AS col_count,
a.data_size
FROM #temp a
INNER JOIN information_schema.columns b
ON a.table_name collate database_default
= b.table_name collate database_default
GROUP BY a.table_name, a.row_count, a.data_size
ORDER BY CAST(REPLACE(a.data_size, ' KB', '') AS integer) DESC
DROP TABLE #temp
আপনি যদি কোনও স্ক্রিপ্ট লিখতে না চান, আপনি এসএসএমএসে (শর্টকাট কী এফ 7) অনেক আন্ডার-ইনজুট 'অবজেক্ট এক্সপ্লোরার বিশদ'ও খুলতে পারেন।
শীর্ষ-স্তর থেকে, আপনার ডাটাবেসে সমস্ত সারণীর তালিকা পেতে টেবিল ফোল্ডারটি খুলুন।
ব্যবহৃত স্থান দেখার জন্য আপনার কলামগুলি কাস্টমাইজ করার প্রয়োজন হতে পারে। এটি শিরোনাম সারিটিতে ডান ক্লিক করে এবং আপনি যে কলামগুলি প্রদর্শন করতে চান তা চয়ন করে এটি করা যেতে পারে।
অবজেক্ট এক্সপ্লোরার বিশদগুলিতে এর মতো আরও প্রচুর ডেটা পাওয়া যায়।
এসএসএমএসে ডাটাবেসে ডান ক্লিক করুন, শীর্ষ টেবিলগুলি দ্বারা প্রতিবেদনগুলি, স্ট্যান্ডার্ড রিপোর্টগুলি, ডিস্ক ব্যবহার নির্বাচন করুন।
প্রতিবেদনটি আপনাকে প্রতি টেবিলে ব্যবহৃত সারি এবং কিলোবাইটের সংখ্যা দেবে।
Sys.dm_db_partition_stats ( http://msdn.microsoft.com/en-us/library/ms187737.aspx ) দেখুন।
সেই লিঙ্কটিতে এবং http://blogs.msdn.com/b/cindygross/archive/2010/04/02/dmv-series-sys-dm-db-partition-stats.aspx এ কিছু নমুনা প্রশ্ন রয়েছে
আপনি আপনার প্রয়োজন অনুসারে পরিবর্তন করতে পারেন অর্থাত্ ক্লাস্টারযুক্ত ইনডেক্সগুলিকে ফিল্টার ইন / আউট। কেবিতে আকার পেতে পৃষ্ঠা গণনাটি 8 দ্বারা গুণ করুন, তারপরে প্রয়োজনে এমবিতে রূপান্তর করতে 2 ^ 10 (= 1024) দিয়ে ভাগ করুন।
sp_spaceused ( http://msdn.microsoft.com/en-us/library/ms188776.aspx ) এছাড়াও টেবিল আকারের তথ্য দেবে।
টেবিল আকারের তথ্য পেতে আমি নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করতে চাই
SELECT sc.name + '.' + t.NAME AS TableName,
p.[Rows],
( SUM(a.total_pages) * 8 ) / 1024 AS TotalReservedSpaceMB, -- Number of total pages * 8KB size of each page in SQL Server
( SUM(a.used_pages) * 8 ) / 1024 AS UsedDataSpaceMB,
( SUM(a.data_pages) * 8 ) / 1024 AS FreeUnusedSpaceMB
FROM msdb.sys.tables t
INNER JOIN msdb.sys.schemas sc ON sc.schema_id = t.schema_id
INNER JOIN msdb.sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN msdb.sys.partitions p ON i.object_id = p.OBJECT_ID
AND i.index_id = p.index_id
INNER JOIN msdb.sys.allocation_units a ON p.partition_id = a.container_id
WHERE t.type_desc = 'USER_TABLE'
AND i.index_id <= 1 --- Heap\ CLUSTERED
AND t.NAME='MYTableName' -- Replace with valid table name
GROUP BY sc.name + '.' + t.NAME,
i.[object_id],i.index_id, i.name, p.[Rows]
ORDER BY ( SUM(a.total_pages) * 8 ) / 1024 DESC
আপনি নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করতে পারেন যা প্রতিটি টেবিলের জন্য ভলিউম এবং ডেটা মোট বেসের আরও একটি ফলাফল সেট গণনা করে
SET NOCOUNT ON
IF OBJECT_ID('tempdb..#SpaceUsed') IS NOT NULL DROP TABLE #SpaceUsed
CREATE TABLE #SpaceUsed
(
TableName sysname ,
[Rows] int ,
[Reserved] varchar(20),
[Data] varchar(20),
[Index_Size] varchar(20),
[Unused] varchar(20),
[Reserved_KB] bigint,
[Data_KB] bigint,
[Index_Size_KB] bigint,
[Unused_KB] bigint
)
DECLARE @CMD NVARCHAR(MAX) =''
SELECT @CMD +='EXEC sp_spaceused ' + ''''+QUOTENAME(TABLE_SCHEMA)+'.'+ QUOTENAME(TABLE_NAME)+''''+';'+CHAR(10)
FROM INFORMATION_SCHEMA.TABLES
--PRINT @CMD
INSERT INTO #SpaceUsed (TableName ,[Rows] , [Reserved], [Data] , [Index_Size] , [Unused] )
EXEC sp_executesql @CMD
UPDATE #SpaceUsed
SET [Reserved_KB] = CONVERT(BIGINT,RTRIM(LTRIM(REPLACE([Reserved] , ' KB', '')))),
[Data_KB] = CONVERT(BIGINT,RTRIM(LTRIM(REPLACE([Data] , ' KB', '')))),
[Index_Size_KB]= CONVERT(BIGINT,RTRIM(LTRIM(REPLACE([Index_Size] , ' KB', '')))),
[Unused_KB]= CONVERT(BIGINT,RTRIM(LTRIM(REPLACE([Unused] , ' KB', ''))))
SELECT TableName, [Rows], Reserved_KB , Data_KB , Index_Size_KB , Unused_KB , Data_KB / 1024.0 Data_MB , Data_KB / 1024.0 / 1024.0 Data_GB
FROM #SpaceUsed
ORDER BY Data_KB DESC
SELECT SUM(Reserved_KB) Reserved_KB , SUM(Data_KB) Data_KB, SUM(Index_Size_KB) Index_Size_KB , SUM(Unused_KB) Unused_KB ,SUM(Data_KB / 1024.0) Data_MB , SUM(Data_KB / 1024.0 / 1024.0) Data_GB
FROM #SpaceUsed
DROP TABLE #SpaceUsed