SQL में टेबल का साइज़ कैसे पता करें?


81

SQL में टेबल का साइज़ कैसे पता करें?


13
यह डीबीएमएस के प्रकार पर निर्भर करता है। आप किस में रुचि रखते हैं?
कोडेडडिक्ट

जवाबों:


110

एस क्यू एल सर्वर:-

sp_spaceused 'TableName'

या प्रबंधन स्टूडियो में: टेबल पर राइट क्लिक करें -> गुण -> भंडारण

माई एसक्यूएल:-

SELECT table_schema, table_name, data_length, index_length FROM information_schema.tables

साइबेस: -

sp_spaceused 'TableName'

ओरेकल: - कैसे-कैसे-मैं-गणना-टेबल-आकार-इन-ओरेकल


नोट, MySQL के लिए data_lengthबाइट्स में तालिका का आकार है, न कि पंक्तियों की संख्या। देखें: dev.mysql.com/doc/refman/8.0/en/tables-table.html
सीज़र

54

रट्टी और हैम के पोस्ट (टिप्पणियों सहित) के जवाबों को जोड़कर मैं इसके साथ आया हूं, जो एसक्यूएल सर्वर के लिए अब तक का सबसे सुरुचिपूर्ण लगता है:

-- DROP TABLE #tmpTableSizes
CREATE TABLE #tmpTableSizes
(
    tableName varchar(100),
    numberofRows varchar(100),
    reservedSize varchar(50),
    dataSize varchar(50),
    indexSize varchar(50),
    unusedSize varchar(50)
)
insert #tmpTableSizes
EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"


select  * from #tmpTableSizes
order by cast(LEFT(reservedSize, LEN(reservedSize) - 4) as int)  desc

यह आपको आरक्षित आकार के क्रम में अपने सभी तालिकाओं की एक सूची देता है, जो सबसे बड़े से लेकर सबसे छोटे तक के लिए क्रमबद्ध है।


मैं यह बहुत स्क्रिप्ट पोस्ट करने जा रहा था - चलो आशा है कि वह SQL सर्वर का उपयोग कर रहा है।
स्क्लरयन

1
उत्कृष्ट स्क्रिप्ट - इसके अलावा, इसे LEN (...) - 3, शून्य से नहीं पढ़ा जाना चाहिए। मान इस तरह से वापस आते हैं: "3746520 KB" तो यह सिर्फ अंतिम 3 वर्ण हैं जिन्हें काट देना आवश्यक है। लेकिन ... यह देखने के लिए अच्छा है कि 7 साल पहले की पोस्टिंग आज की तरह उपयोगी है, जैसा कि 2010 में वापस आया था !!
माइक गल्डहिल

इसे एक परिवर्तनशील तालिका बनाएं और आपको इसे छोड़ना नहीं पड़ेगा। "घोषित @tmpTableSizes TABLE"
ARLibertarian

22

GB में एक कस्टम नाम तालिका आकार खोजने के लिए एक क्वेरी ( https://stackoverflow.com/a/7892349/1737819 का संशोधन )। आप यह कोशिश कर सकते हैं, 'YourTableName' को अपनी तालिका के नाम से बदल दें।

SELECT 
    t.NAME AS TableName,    
    p.rows AS RowCounts,
    CONVERT(DECIMAL,SUM(a.total_pages)) * 8 / 1024 / 1024 AS TotalSpaceGB, 
    SUM(a.used_pages)  * 8 / 1024 / 1024 AS UsedSpaceGB , 
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 / 1024 / 1024 AS UnusedSpaceGB
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
WHERE 
    t.NAME = 'YourTable'
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 
GROUP BY 
    t.Name, s.Name, p.Rows
ORDER BY 
    UsedSpaceGB DESC, t.Name

मैं जोड़ूंगा CONVERT(DECIMAL,SUM(a.total_pages)) ताकि यह GB से छोटे तालिकाओं के लिए जानकारी प्रदर्शित करे
बोगडान मार्ट

21

SQL सर्वर एक अंतर्निहित संग्रहीत कार्यविधि प्रदान करता है जिसे आप आसानी से किसी तालिका का आकार दिखाने के लिए चला सकते हैं, जिसमें अनुक्रमणिका का आकार भी शामिल है

sp_spaceused ‘Tablename’

16

SQL सर्वर एक अंतर्निहित संग्रहित प्रक्रिया प्रदान करता है जिसे आप आसानी से एक तालिका का आकार दिखाने के लिए चला सकते हैं, जिसमें अनुक्रमणिका का आकार भी शामिल है ... जो आपको आश्चर्यचकित कर सकता है।

वाक्य - विन्यास:

 sp_spaceused ‘Tablename’

अन्दर देखें :

http://www.howtogeek.com/howto/database/determine-size-of-a-table-in-sql-server/


11

क्या आप आकार से मतलब तालिका में रिकॉर्ड की संख्या, किसी भी तरह से? उस स्तिथि में:

SELECT COUNT(*) FROM your_table_name

7

और PostgreSQL में:

SELECT pg_size_pretty(pg_relation_size('tablename'));

btw, इस क्वेरी के साथ विलोपन से परिणाम देखने के लिए, आपको संभवतः वैक्यूम करने की आवश्यकता है। यहाँ सभी सार्वजनिक तालिकाओं को एक साथ देखने के लिए एक प्रश्न है:SELECT table_name, pg_size_pretty(pg_relation_size(table_names.table_name)) AS size from (select table_name from information_schema.tables where table_schema = 'public') AS table_names ORDER BY pg_relation_size(table_names.table_name) DESC;
Noumenon

7

मुझे पता है कि SQL 2012 में (अन्य संस्करणों में काम कर सकता है) आप निम्न कार्य कर सकते हैं:

  1. ऑब्जेक्ट एक्सप्लोरर में डेटाबेस के नाम पर राइट क्लिक करें।
  2. शीर्ष तालिका द्वारा रिपोर्ट> मानक रिपोर्ट> डिस्क उपयोग का चयन करें।

यह आपको शीर्ष 1000 तालिकाओं की एक सूची देगा और फिर आप इसे डेटा आकार आदि के आधार पर ऑर्डर कर सकते हैं।


Sql 2008 R2 में भी काम करता है ... :)
manudea

3

SQL सर्वर, KB / MB में सभी तालिकाओं के लिए अच्छी तरह से स्वरूपित तालिका:

SELECT 
    t.NAME AS TableName,
    s.Name AS SchemaName,
    p.rows AS RowCounts,
    SUM(a.total_pages) * 8 AS TotalSpaceKB, 
    CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
    SUM(a.used_pages) * 8 AS UsedSpaceKB, 
    CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB, 
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
    CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
WHERE 
    t.NAME NOT LIKE 'dt%' 
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 
GROUP BY 
    t.Name, s.Name, p.Rows
ORDER BY 
    t.Name


2

यहाँ एक सरल क्वेरी है, यदि आप केवल सबसे बड़ी सारणी खोजने की कोशिश कर रहे हैं।

  -- Find largest table partitions
 SELECT top 20 obj.name, LTRIM (STR ( sz.in_row_data_page_count * 8, 15, 0) + ' KB') as Size, * FROM sys.dm_db_partition_stats sz
inner join sys.objects obj on obj.object_id = sz.object_id
  order by sz.in_row_data_page_count desc

2
ढेर अतिप्रवाह में आपका स्वागत है! यद्यपि यह कोड समस्या को हल करने में मदद कर सकता है, लेकिन यह इस बात की व्याख्या नहीं करता है कि क्यों और / या यह कैसे उत्तर देता है। इस अतिरिक्त संदर्भ को प्रदान करने से इसके दीर्घकालिक शैक्षिक मूल्य में काफी सुधार होगा। कृपया स्पष्टीकरण जोड़ने के लिए अपने जवाब को संपादित करें, जिसमें सीमाएं और मान्यताएं शामिल हैं। मुझे पता है कि यह एक खराब सवाल है - जवाब में स्पष्ट होने का और भी कारण है।
टोबी स्पाइट ऑक्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.