एक MySQL डेटाबेस के टेबल के आकार कैसे प्राप्त करें?


900

मैं एक MySQL डेटाबेस में सभी तालिकाओं के आकार प्राप्त करने के लिए इस क्वेरी को चला सकता हूं:

show table status from myDatabaseName;

मैं परिणामों को समझने में कुछ मदद चाहूंगा। मैं सबसे बड़े आकारों वाली तालिकाओं की तलाश में हूं।

मुझे किस कॉलम को देखना चाहिए?


8
आकार से आपका क्या अभिप्राय है? पंक्तियों की संख्या? बाइट्स डिस्क पर लिया गया?
मार्क बायर्स

@ क्या मुझे डिस्क पर आकार चाहिए यह सही तरीका है? # du -sh /mnt/mysql_data/openx/f_scraper_banner_details.MYI 79G /mnt/mysql_data/openx/f_scraper_banner_details.MYI
आशीष

3
संबंधित, यदि यह रुचि है, तो मैंने इस उत्तर में एक वर्णन सभी तालिकाएँ लिखीं ।
ड्रू

जवाबों:


1957

आप इस क्वेरी का उपयोग तालिका के आकार को दिखाने के लिए कर सकते हैं (हालाँकि आपको पहले चर को बदलने की आवश्यकता है):

SELECT 
    table_name AS `Table`, 
    round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` 
FROM information_schema.TABLES 
WHERE table_schema = "$DB_NAME"
    AND table_name = "$TABLE_NAME";

या यह क्वेरी हर डेटाबेस में हर तालिका के आकार को सूचीबद्ध करने के लिए, सबसे पहले:

SELECT 
     table_schema as `Database`, 
     table_name AS `Table`, 
     round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` 
FROM information_schema.TABLES 
ORDER BY (data_length + index_length) DESC;

3
धन्यवाद, इसका काम ठीक है, हालांकि मुझे यकीन नहीं है कि यह ब्लब्स को ध्यान में रखता है।
डेविड

5
ध्यान दें, आप कई तालिकाओं को निर्दिष्ट करने के लिए "IN" का भी उपयोग कर सकते हैं, जैसेAND table_name IN ('table_1', 'table_2', 'table_3');
डेविड थॉमस

6
AFAICT, यह केवल स्थैतिक आकार फ़ील्ड की लंबाई सही ढंग से गिना जाएगा। आप कैसे गिनेंगे VARCHARऔर BLOBटाइप करेंगे?
l0b0

3
@kasimir कुछ बिंदु पर दुनिया भ्रामक हो गई और कुछ मानकों संगठनों और हार्डवेयर निर्माताओं ने फैसला किया कि यह बेहतर था कि दशमलव प्रणाली पर किलोबाइट को परिभाषित किया जाए। IEC मानक अब बेस को 2 किलोबाइट (1024 बाइट्स) एक किबिबाइट (KiB) कहता है। किसी भी दर पर, MySQL नहीं जानता, इसलिए यदि आप IEC दशमलव किलोबाइट चाहते हैं, तो 1000 से विभाजित करें।
russellpierce

9
क्या यह InnoDB स्टोरेज इंजन के लिए काम करेगा? यहाँ mysql doc के अनुसार - dev.mysql.com/doc/refman/5.7/en/show-table-status.html , उस इंजन के लिए data_length फ़ील्ड में क्लस्टर इंडेक्स का आकार समाहित है। यह डेटा के आकार का सही प्रतिनिधित्व नहीं करेगा। यह होगा?
euphoria83

96
SELECT TABLE_NAME AS "Table Name", 
table_rows AS "Quant of Rows", ROUND( (
data_length + index_length
) /1024, 2 ) AS "Total Size Kb"
FROM information_schema.TABLES
WHERE information_schema.TABLES.table_schema = 'YOUR SCHEMA NAME/DATABASE NAME HERE'
LIMIT 0 , 30

आप "से स्कीमा नाम प्राप्त कर सकते हैं INFORMATION_SCHEMA " -> स्कीमेता तालिका -> " SCHEMA_NAME " कॉलम


अतिरिक्त आप निम्न के रूप में mysql डेटाबेस का आकार प्राप्त कर सकते हैं ।

SELECT table_schema "DB Name", 
Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" 
FROM   information_schema.tables 
GROUP  BY table_schema; 

परिणाम

DB Name              |      DB Size in MB

mydatabase_wrdp             39.1
information_schema          0.0

आप यहां अतिरिक्त विवरण प्राप्त कर सकते हैं।


41
SELECT 
    table_name AS "Table",  
    round(((data_length + index_length) / 1024 / 1024), 2) as size   
FROM information_schema.TABLES  
WHERE table_schema = "YOUR_DATABASE_NAME"  
ORDER BY size DESC; 

यह आकार (MB में DB आकार) को हल करता है।


31

यदि आप वर्तमान में चयनित डेटाबेस का उपयोग करने के लिए एक क्वेरी चाहते हैं। बस इस क्वेरी को कॉपी पेस्ट करें। (कोई संशोधन आवश्यक)

SELECT table_name ,
  round(((data_length + index_length) / 1024 / 1024), 2) as SIZE_MB
FROM information_schema.TABLES
WHERE table_schema = DATABASE() ORDER BY SIZE_MB DESC;

5
या उससे भी कम (बिना उपश्रेणी के): सेलेक्ट टेबल_नाम, राउंड ((data_length + index_length) / 1024/1024), 2) SIZE_MBFROM info_schema.TABLES WHERE table_schema (DATABASE) (ORDER BY (data_length + index_length) ASC।
onkeltem

15

Workbench का उपयोग करके कई informations प्राप्त करने का एक आसान तरीका है:

  • स्कीमा नाम पर राइट-क्लिक करें और "स्कीमा इंस्पेक्टर" पर क्लिक करें।

  • परिणामी विंडो में आपके पास कई टैब हैं। पहला टैब "सूचना" एमबी में डेटाबेस आकार का मोटा अनुमान दिखाता है।

  • दूसरा टैब, "टेबल", प्रत्येक तालिका के लिए डेटा की लंबाई और अन्य विवरण दिखाता है।


मेरे पास मेरे मैक क्लाइंट वी 6.0.9 पर 'जानकारी' टैब नहीं था
नील

महान!!! MySQL वर्कबेंच में प्रत्येक टेबल के लिए एक "टेबल इंस्पेक्टर" भी है। ठीक से जल्दी नहीं लेकिन बहुत काम!
T30

11
  • सभी तालिकाओं का आकार:

    मान लीजिए कि आपका डेटाबेस या TABLE_SCHEMAनाम "news_alert" है। फिर यह क्वेरी डेटाबेस में सभी तालिकाओं का आकार दिखाएगी।

    SELECT
      TABLE_NAME AS `Table`,
      ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)`
    FROM
      information_schema.TABLES
    WHERE
      TABLE_SCHEMA = "news_alert"
    ORDER BY
      (DATA_LENGTH + INDEX_LENGTH)
    DESC;
    

    आउटपुट:

        +---------+-----------+
        | Table   | Size (MB) |
        +---------+-----------+
        | news    |      0.08 |
        | keyword |      0.02 |
        +---------+-----------+
        2 rows in set (0.00 sec)
    
  • विशिष्ट तालिका के लिए:

    अपने मान लीजिए TABLE_NAMEहै "समाचार" । फिर SQL क्वेरी होगी-

    SELECT
      TABLE_NAME AS `Table`,
      ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)`
    FROM
      information_schema.TABLES
    WHERE
        TABLE_SCHEMA = "news_alert"
      AND
        TABLE_NAME = "news"
    ORDER BY
      (DATA_LENGTH + INDEX_LENGTH)
    DESC;
    

    आउटपुट:

    +-------+-----------+
    | Table | Size (MB) |
    +-------+-----------+
    | news  |      0.08 |
    +-------+-----------+
    1 row in set (0.00 sec)
    

8

निम्नलिखित शेल कमांड आज़माएं ( DB_NAMEअपने डेटाबेस नाम से बदलें ):

mysql -uroot <<<"SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"DB_NAME\" ORDER BY (data_length + index_length) DESC;" | head

Drupal / drush solution के लिए, निम्न उदाहरण स्क्रिप्ट की जाँच करें जो उपयोग में सबसे बड़ी तालिका प्रदर्शित करेगी:

#!/bin/sh
DB_NAME=$(drush status --fields=db-name --field-labels=0 | tr -d '\r\n ')
drush sqlq "SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"${DB_NAME}\" ORDER BY (data_length + index_length) DESC;" | head -n20

6

बैश कमांड लाइन का उपयोग करने से इसे बाहर काम करने का एक और तरीका है।

for i in mysql -NB -e 'show databases'; do echo $i; mysql -e "SELECT table_name AS 'Tables', round(((data_length+index_length)/1024/1024),2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema =\"$i\" ORDER BY (data_length + index_length) DESC" ; done


6

यदि आप phpmyadmin का उपयोग कर रहे हैं तो बस तालिका संरचना पर जाएं

जैसे

Space usage
Data    1.5 MiB
Index   0   B
Total   1.5 Mi

4

चैपमिक के जवाब से अनुकूलित मेरी विशेष आवश्यकता के अनुरूप।

केवल अपने डेटाबेस का नाम निर्दिष्ट करें, फिर अवरोही क्रम में सभी तालिकाओं को क्रमबद्ध करें - चयनित डेटाबेस के अंदर सबसे बड़ी तालिका से सबसे छोटी तालिका तक। प्रतिस्थापित करने के लिए केवल 1 चर की आवश्यकता है = आपका डेटाबेस नाम।

SELECT 
table_name AS `Table`, 
round(((data_length + index_length) / 1024 / 1024), 2) AS `size`
FROM information_schema.TABLES 
WHERE table_schema = "YOUR_DATABASE_NAME_HERE"
ORDER BY size DESC;

3

यदि आपके पास sshपहुंच है, तो आप बस du -hc /var/lib/mysql(या अलग-अलग datadir, जैसा कि आप में है my.cnf) आज़मा सकते हैं ।


अंत में एक उत्तर जो Information_schema पर निर्भर नहीं करता है। मेरे मामले में इसने 660 एमबी की सूचना दी जबकि फाइलसिस्टम पर वास्तविक आकार 1.8GB है
php_nub_qq

2

पंक्तियों और अंतरिक्ष की संख्या को दर्शाने का एक और तरीका और इसके द्वारा आदेश दिया गया।

SELECT
     table_schema as `Database`,
     table_name AS `Table`,
     table_rows AS "Quant of Rows",
     round(((data_length + index_length) / 1024 / 1024/ 1024), 2) `Size in GB`
FROM information_schema.TABLES
WHERE table_schema = 'yourDatabaseName'
ORDER BY (data_length + index_length) DESC;  

इस क्वेरी में स्थानापन्न करने के लिए एकमात्र स्ट्रिंग "yourDatabaseName" है।


2

मुझे लगता है कि मौजूदा उत्तर वास्तव में डिस्क पर तालिकाओं का आकार नहीं देते हैं, जो अधिक सहायक है। यह क्वेरी data_length और सूचकांक के आधार पर टेबल आकार की तुलना में अधिक सटीक डिस्क अनुमान देती है। मुझे इसका उपयोग AWS RDS उदाहरण के लिए करना था जहाँ आप डिस्क की जाँच नहीं कर सकते और फ़ाइल आकार की जाँच नहीं कर सकते।

select NAME as TABLENAME,FILE_SIZE/(1024*1024*1024) as ACTUAL_FILE_SIZE_GB
, round(((data_length + index_length) / 1024 / 1024/1024), 2) as REPORTED_TABLE_SIZE_GB 
from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES s
join INFORMATION_SCHEMA.TABLES t 
on NAME = Concat(table_schema,'/',table_name)
order by FILE_SIZE desc

1

डेटाबेस के कुल आकार की गणना अंत में करें:

(SELECT 
  table_name AS `Table`, 
  round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` 
  FROM information_schema.TABLES 
  WHERE table_schema = "$DB_NAME"
)
UNION ALL
(SELECT 
  'TOTAL:',
  SUM(round(((data_length + index_length) / 1024 / 1024), 2) )
  FROM information_schema.TABLES 
  WHERE table_schema = "$DB_NAME"
)

1
SELECT TABLE_NAME AS table_name, 
table_rows AS QuantofRows, 
ROUND((data_length + index_length) /1024, 2 ) AS total_size_kb 
FROM information_schema.TABLES
WHERE information_schema.TABLES.table_schema = 'db'
ORDER BY (data_length + index_length) DESC; 

सभी 2 ऊपर mysql पर परीक्षण किया गया है


1

यह mysql में परीक्षण किया जाना चाहिए, postgresql नहीं:

SELECT table_schema, # "DB Name", 
Round(Sum(data_length + index_length) / 1024 / 1024, 1) # "DB Size in MB" 
FROM   information_schema.tables 
GROUP  BY table_schema; 

हालांकि यह लेखकों के सवाल का जवाब दे सकता है, लेकिन इसमें कुछ स्पष्ट शब्दों और / या प्रलेखन के लिंक का अभाव है। रॉ कोड स्निपेट अपने आसपास के कुछ वाक्यांशों के बिना बहुत मददगार नहीं हैं। आपको यह भी पता चल सकता है कि एक अच्छा उत्तर बहुत उपयोगी कैसे लिखें । कृपया अपना उत्तर संपादित करें
निक

@ अब भी क्यों बैन है?
विलियम

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