এসকিউএল সার্ভার ডাটাবেসে আমার টেবিলগুলির আকার কীভাবে নির্ধারণ করবেন


28

MyTableএসকিউএল সার্ভার ডাটাবেসে আকার সম্পর্কে তথ্য পুনরুদ্ধার করতে সহায়ক এমন কোনও বিল্ট-ইন ফাংশন / সঞ্চিত পদ্ধতি / কোয়েরি রয়েছে কি ?


এসও-তে এই উত্তরের একটি স্ক্রিপ্ট রয়েছে যা খুব সহজ এবং অদ্বন্ধিত পদ্ধতির প্রয়োজন হয় না।
শন মেলটন 21

এএ.এসসি দ্বারা প্রদত্ত উত্তরটি খুব কার্যকর, ব্যতীত জোড়ের সমস্ত ডিএমভি থেকে এমএসডিবি ডাটাবেস শনাক্তকারী অপসারণ করা দরকার। এটি কেবলমাত্র এমএসডিবিতে কেবল টেবিলগুলিতে প্রতিবেদন করে!
ওয়েটফোর্ডপেট

উত্তর:


34

একক টেবিলের জন্য আপনি ব্যবহার করতে পারেন

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

45

আপনি যদি কোনও স্ক্রিপ্ট লিখতে না চান, আপনি এসএসএমএসে (শর্টকাট কী এফ 7) অনেক আন্ডার-ইনজুট 'অবজেক্ট এক্সপ্লোরার বিশদ'ও খুলতে পারেন।

অবজেক্ট এক্সপ্লোরার বিশদের শীর্ষ স্তরের

শীর্ষ-স্তর থেকে, আপনার ডাটাবেসে সমস্ত সারণীর তালিকা পেতে টেবিল ফোল্ডারটি খুলুন।

ব্যবহৃত স্থান দেখার জন্য আপনার কলামগুলি কাস্টমাইজ করার প্রয়োজন হতে পারে। এটি শিরোনাম সারিটিতে ডান ক্লিক করে এবং আপনি যে কলামগুলি প্রদর্শন করতে চান তা চয়ন করে এটি করা যেতে পারে।

এসএসএমএসে সারণী ডেটার আকার

অবজেক্ট এক্সপ্লোরার বিশদগুলিতে এর মতো আরও প্রচুর ডেটা পাওয়া যায়।


3
উপরের টি-স্কেল পদ্ধতির চেয়ে অনেক সুন্দর (যা আমার পক্ষে কাজ করে না)
অরিয়ন এডওয়ার্ডস

17

এসএসএমএসে ডাটাবেসে ডান ক্লিক করুন, শীর্ষ টেবিলগুলি দ্বারা প্রতিবেদনগুলি, স্ট্যান্ডার্ড রিপোর্টগুলি, ডিস্ক ব্যবহার নির্বাচন করুন।

প্রতিবেদনটি আপনাকে প্রতি টেবিলে ব্যবহৃত সারি এবং কিলোবাইটের সংখ্যা দেবে।


2

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 ) এছাড়াও টেবিল আকারের তথ্য দেবে।


2

টেবিল আকারের তথ্য পেতে আমি নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করতে চাই

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  

1

ডাটাবেসে যান তারপরে ডান ক্লিক করুন এবং রিপোর্টগুলিতে ক্লিক করুন তারপরে স্ট্যান্ডার্ড রিপোর্টগুলি এবং টেবিলে ডিস্কের ব্যবহার। এটি আপনাকে সেই ডাটাবেসে সমস্ত তা দেবে এবং ততক্ষণে রেকর্ড, ডেটা, সূচিপত্র ইত্যাদি


0

আপনি নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করতে পারেন যা প্রতিটি টেবিলের জন্য ভলিউম এবং ডেটা মোট বেসের আরও একটি ফলাফল সেট গণনা করে

    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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.