अधिकांश रिलेशनल डेटाबेस की तरह, MySQL डेटाबेस के बारे में ही उपयोगी मेटाडेटा प्रदान करता है। जबकि अधिकांश अन्य डेटाबेस इस जानकारी को catalog
. के रूप में संदर्भित करते हैं , आधिकारिक MySQL दस्तावेज़ INFORMATION_SCHEMA
. को संदर्भित करता है मेटाडेटा tables
. के रूप में ।
नाम चाहे जो भी हो, इन INFORMATION_SCHEMA
. द्वारा प्रदान की गई जानकारी मायने रखती है टेबल। views
. से सब कुछ और user_privilieges
columns
. के लिए और tables
INFORMATION_SCHEMA
. में पाया जा सकता है . हमारे उद्देश्यों के लिए हम विशेष रूप से tables
. में रुचि रखते हैं मेटाडेटा, जिसे हम वास्तव में सिस्टम में विभिन्न तालिकाओं के आकार को निकालने के लिए क्वेरी कर सकते हैं।
एकल डेटाबेस से तालिका आकार सूचीबद्ध करें
जैसा कि आधिकारिक दस्तावेज़ीकरण में देखा जा सकता है, INFORMATION_SCHEMA.TABLES
तालिका में लगभग 20 स्तंभ हैं, लेकिन तालिकाओं द्वारा उपयोग किए जाने वाले डिस्क स्थान की मात्रा निर्धारित करने के उद्देश्य से, हम विशेष रूप से दो स्तंभों पर ध्यान केंद्रित करेंगे:DATA_LENGTH
और INDEX_LENGTH
।
DATA_LENGTH
तालिका में सभी डेटा की लंबाई (या आकार) है (bytes
. में )।INDEX_LENGTH
तालिका के लिए अनुक्रमणिका फ़ाइल की लंबाई (या आकार) है (bytes
. में भी )।
इस जानकारी के साथ, हम एक क्वेरी निष्पादित कर सकते हैं जो प्रत्येक के डिस्क स्थान (आकार) के साथ एक विशिष्ट डेटाबेस में सभी तालिकाओं को सूचीबद्ध करेगी। हम थोड़ा अधिक कट्टर भी हो सकते हैं और सामान्य आकार के मानों को bytes
. से परिवर्तित कर सकते हैं megabytes
. जैसे अधिकांश लोगों के लिए अधिक उपयोगी और समझने योग्य चीज़ में ।
SELECT
TABLE_NAME AS `Table`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "bookstore"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
इस उदाहरण में bookstore
. का उपयोग करते हुए डेटाबेस, हम DATA_LENGTH
. को मिला रहे हैं और INDEX_LENGTH
bytes
. के रूप में , फिर इसे 1024
. से विभाजित करें दो बार kilobytes
में बदलने के लिए और फिर megabytes
. हमारा परिणाम सेट कुछ इस तरह दिखेगा:
+----------------------------------+-----------+
| Table | Size (MB) |
+----------------------------------+-----------+
| book | 267 |
| author | 39 |
| post | 27 |
| cache | 24 |
...
यदि आप डेटाबेस में सभी तालिकाओं की परवाह नहीं करते हैं और केवल एक विशेष तालिका का आकार चाहते हैं, तो आप बस AND TABLE_NAME = "your_table_name"
जोड़ सकते हैं करने के लिए WHERE
खंड। यहां हम केवल book
. के बारे में जानकारी चाहते हैं तालिका:
SELECT
TABLE_NAME AS `Table`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "bookstore"
AND
TABLE_NAME = "book"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
उम्मीद के मुताबिक परिणाम अब इस प्रकार हैं:
+-------+-----------+
| Table | Size (MB) |
+-------+-----------+
| book | 267 |
+-------+-----------+
1 row in set (0.00 sec)
सभी डेटाबेस से सभी तालिका आकारों की सूची बनाएं
यदि आप किसी ऐसी समस्या का सामना कर रहे हैं जहां आपका डेटाबेस आकार में बढ़ रहा है, लेकिन आप नहीं जानते कि कौन सी तालिका अपराधी है, तो सभी के आकार के लिए क्वेरी करना उपयोगी हो सकता है सभी . के भीतर तालिकाएं पूरे सिस्टम में डेटाबेस। इसे निम्न क्वेरी के साथ आसानी से पूरा किया जा सकता है:
SELECT
TABLE_SCHEMA AS `Database`,
TABLE_NAME AS `Table`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`
FROM
information_schema.TABLES
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
यह न केवल तालिका का आकार लौटाएगा, बल्कि तालिका का नाम और मूल डेटाबेस भी इससे जुड़ा होगा।