आप यह कैसे निर्धारित कर सकते हैं कि एक विशेष MySQL तालिका कितनी डिस्क स्थान ले रही है?


145

क्या यह निर्धारित करने का एक त्वरित तरीका है कि किसी विशेष MySQL तालिका को कितना डिस्क स्थान ले रहा है? तालिका MyISAM या Innodb हो सकती है।


PHPMyAdmin में आप केवल टेबल पर क्लिक करके अंतरिक्ष उपयोग देख सकते हैं।
ए.आर.

इस सवाल के जवाब से मुझे अपना समाधान निकालने में मदद मिली। एक उपकरण की पूरी तरह से खोज, जो डेटा को प्राप्त करने के लिए एक ही क्वेरी को निष्पादित किए बिना मेरी मदद कर सकता है, जिससे मुझे मोनयोग , MySQL एंटरप्राइज मॉनिटर , पेरकोना टूलकिट के माध्यम से जाना जा सकता है । वे सभी डिस्क जानकारी पर विवरण देते हैं, लेकिन अंत में बेहतर ग्राफिक्स चार्ट और आसान जीयूआई के लिए मोनयोग का विकल्प चुना।
मैथ्यू

जवाबों:


285

तालिका के mydb.mytableलिए इसे चलाएं:

BYTES

SELECT (data_length+index_length) tablesize
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

KILOBYTES

SELECT (data_length+index_length)/power(1024,1) tablesize_kb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

MEGABYTES

SELECT (data_length+index_length)/power(1024,2) tablesize_mb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

GIGABYTES

SELECT (data_length+index_length)/power(1024,3) tablesize_gb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

सामान्य

यहाँ एक सामान्य क्वेरी है जहाँ अधिकतम इकाई डिस्प्ले टीबी (TeraBytes) है

SELECT 
    CONCAT(FORMAT(DAT/POWER(1024,pw1),2),' ',SUBSTR(units,pw1*2+1,2)) DATSIZE,
    CONCAT(FORMAT(NDX/POWER(1024,pw2),2),' ',SUBSTR(units,pw2*2+1,2)) NDXSIZE,
    CONCAT(FORMAT(TBL/POWER(1024,pw3),2),' ',SUBSTR(units,pw3*2+1,2)) TBLSIZE
FROM
(
    SELECT DAT,NDX,TBL,IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3
    FROM 
    (
        SELECT data_length DAT,index_length NDX,data_length+index_length TBL,
        FLOOR(LOG(IF(data_length=0,1,data_length))/LOG(1024)) px,
        FLOOR(LOG(IF(index_length=0,1,index_length))/LOG(1024)) py,
        FLOOR(LOG(IF(data_length+index_length=0,1,data_length+index_length))/LOG(1024)) pz
        FROM information_schema.tables
        WHERE table_schema='mydb'
        AND table_name='mytable'
    ) AA
) A,(SELECT 'B KBMBGBTB' units) B;

कोशिश करो !!!


6
SELECT (data_length+index_length)/power(1024,2) tablesize_mb, table_name FROM information_schema.tables WHERE table_schema='mydb' order by tablesize_mb;mydbनाम और आकार के साथ सभी तालिकाओं की एक सूची प्राप्त करने के लिए , आकार के अनुसार क्रमबद्ध करें।
18

1
पहले डिस्क स्थान पर उपभोग करने वाली तालिकाओं को देखने के लिए आदेश द्वारा "DESC" को संलग्न करें। ;)
मवसागर

सटीक होने के लिए, आप द्विआधारी उपसर्गों (2 की शक्ति के साथ गुणन) का उपयोग करते समय यूनिट्स बाय बाय बाइट्स (KiB), मी बाय बाइट्स (MiB) और जीआई बाई बाइट्स (GiB) को कॉल करना चाह सकते हैं । या, आप दशमलव उपसर्गों (1000 की शक्ति के साथ गुणा) का उपयोग करना चाहते हैं और फिर इकाइयों को लो बाय बाइट्स (KB), मुझे गा बाइट्स (एमबी) और गी गा बाइट्स (जीबी) कह सकते हैं । और देखें: en.wikipedia.org/wiki/Binary_prefix
Márton Tamás

क्या किसी को पता है कि MSSQL में समान कैसे करना है?
इवान युर्चेंको

@RolandoMySQLDBA, तो आप इस पर सुझाव है कि कृपया सकता है stackoverflow.com/questions/47976837/...
davidb

15

MB में शीर्ष 20 सबसे बड़ी तालिकाएँ प्राप्त करने के लिए SQL का त्वरित बिट।

SELECT table_schema, table_name,
  ROUND((data_length+index_length)/POWER(1024,2),2) AS tablesize_mb
FROM information_schema.tables
ORDER BY tablesize_mb DESC LIMIT 20;

आशा है कि किसी के लिए उपयोगी है!


12

यह InnoDB तालिकाओं के लिए सटीक नहीं होगा। डिस्क पर आकार वास्तव में क्वेरी के माध्यम से रिपोर्ट किए गए से बड़ा है।

अधिक जानकारी के लिए कृपया पेरकोना के इस लिंक को देखें।

https://www.percona.com/blog/2008/12/16/how-much-space-does-empty-innodb-table-take/


2

डिफ़ॉल्ट रूप से स्थापित mysql के साथ लिनक्स में:

[you@yourbox]$ ls -lha /var/lib/mysql/<databasename>

NIXCRAFT के mysql db लोकेशन पर आधारित है


सवाल पूछ रहा है कि किसी विशेष तालिका द्वारा उठाए गए स्थान को कैसे मापें ।
फ्लिम

@ShariqueAbdullah यह काम करेगा अगर आप innodb_file_per_table का उपयोग कर रहे हैं, जो डिफ़ॉल्ट नहीं है, लेकिन मुझे लगता है कि यह बहुत ही सामान्य और / या अनुशंसित है (कोई व्यक्ति आसानी से मुझे इस पर गलत साबित कर सकता है, बस मेरी धारणा)।
सीउक्स

@Seaux, हो सकता है, लेकिन मुझे नहीं लगता कि इसका इस्तेमाल किसी ऐसे अनुशंसित सर्वर सेटअप में किया जा रहा है जिसके माध्यम से मैं गया हूं। तो आप सही हो सकते हैं, लेकिन इसके डिफ़ॉल्ट के बाद से वह नहीं मिल सकता है। इसके अलावा, मुझे लगता है कि MyISAM की तुलना में इनोडब फंक्शन काफी अलग हैं। इसलिए यदि आपके पास फ़ाइल का आकार है, तो भी यह उतना सटीक नहीं हो सकता है जितना कि MyISAM के मामले में होगा। लेकिन आप सही हैं कि एक समाधान हो सकता है। मैं व्यक्तिगत रूप से फ़ाइल आकार को मापने के बजाय इस जानकारी को प्राप्त करने के लिए MySQL कमांड का उपयोग करना पसंद करता हूं।
शरीक अब्दुल्ला

2

RolandMySQLDBA के उत्तर के आधार पर मुझे लगता है कि हम तालिका में प्रत्येक स्कीमा का आकार प्राप्त करने के लिए उपरोक्त का उपयोग कर सकते हैं:

SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb 
    FROM information_schema.tables GROUP BY table_schema;

वास्तव में यह पसंद आया!


0

आप शायद फाइलों के आकार को देख सकते हैं ...

प्रत्येक तालिका को फ़ोल्डर के अंदर अलग-अलग फ़ाइलों के एक जोड़े में संग्रहीत किया जाता है, जिसे आपके डेटाबेस कहा जाता है। इन फ़ोल्डरों को mysql डेटा डायरेक्टरी में संग्रहीत किया जाता है।

वहां से आप डिस्क पर तालिका का आकार प्राप्त करने के लिए 'du -sh। *' कर सकते हैं।


यह केवल MyISAM डेटाबेस के लिए काम करता है। ओपी ने एक समाधान के लिए कहा जो इनोबीडी के साथ भी काम करता है।
बग्स

0

से लिया मैं इसकी जांच कैसे कितना डिस्क स्थान मेरी डेटाबेस का उपयोग कर रहा है?

आप phpMyAdminअपने नियंत्रण कक्ष में बाएं फ्रेम में डेटाबेस के नाम पर क्लिक करके और दाएं फ्रेम में वहां की तालिकाओं के लिए आकार को पढ़कर MySQL टेबल आकार की जांच कर सकते हैं ।

नीचे दी गई क्वेरी समान जानकारी प्राप्त करने में मदद करेगी bytes

select SUM(data_length) + SUM(index_length) as total_size 
from information_schema.tables 
where table_schema = 'db_name' 
and table_name='table_name';

यह माना जाता है कि phpMyAdmin स्थापित है
thebigjc

-1

मैं सिर्फ ' mysqldiskusage ' टूल का उपयोग करूंगा

$ mysqldiskusage --server=user:password@localhost mydbname
# Source on localhost: ... connected.

# Database totals:
+------------+----------------+
| db_name    |         total  |
+------------+----------------+
| mydbaname  | 5,403,033,600  |
+------------+----------------+

Total database disk usage = 5,403,033,600 bytes or 5.03 GB

ओपी ने विशेष रूप से MySQL टेबल की डिस्क स्पेस के लिए कहा, पूरे डेटाबेस में नहीं
मेकिनडिटिक्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.