MySQL දත්ත ගබඩාවක වගු වල ප්‍රමාණයන් ලබා ගන්නේ කෙසේද?


932

MySQL දත්ත ගබඩාවක ඇති සියලුම වගු වල ප්‍රමාණයන් ලබා ගැනීමට මට මෙම විමසුම ක්‍රියාත්මක කළ හැකිය:

show table status from myDatabaseName;

ප්‍රති .ල තේරුම් ගැනීමට යම් උපකාරයක් කිරීමට මම කැමතියි. මම විශාලතම ප්රමාණ සහිත වගු සොයමි.

මා කුමන තීරුව දෙස බැලිය යුතුද?


8
ප්‍රමාණයෙන් ඔබ අදහස් කරන්නේ කුමක්ද? පේළි ගණන? තැටියේ ගත් බයිට්?
මාර්ක් බයර්ස්

Ark මාක් මට තැටියේ ප්‍රමාණය අවශ්‍යයි මේ නිවැරදි ක්‍රමයද? # ඩු -sh /mnt/mysql_data/openx/f_scraper_banner_details.MYI 79G /mnt/mysql_data/openx/f_scraper_banner_details.MYI
අශිෂ් Karpe

3
සම්බන්ධ, එය පොලී වේ නම්, මම ලියූ සියලු මේස විස්තර දී මෙම පිළිතුර .
ඩ්‍රූ

Answers:


2012

වගුවක ප්‍රමාණය පෙන්වීමට ඔබට මෙම විමසුම භාවිතා කළ හැකිය (ඔබට පළමුව විචල්‍යයන් ආදේශ කිරීමට අවශ්‍ය වුවද):

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

4
as කසිමීර් යම් අවස්ථාවක දී ලෝකය අවුල් සහගත වූ අතර සමහර ප්‍රමිති සංවිධාන සහ දෘඩාංග නිෂ්පාදකයින් තීරණය කළේ දශම පද්ධතිය මත කිලෝබයිට් එකක් නිර්වචනය කිරීම වඩා හොඳ බවය. අයිඊසී ප්‍රමිතිය දැන් පාදම කිලෝබයිට් 2 (බයිට් 1024) කිබිබයිට් (කිබී) ලෙස හැඳින්වේ. කෙසේ වෙතත්, MySQL නොදනී, එබැවින් ඔබට IEC දශම කිලෝබයිට් අවශ්‍ය නම් 1000 න් බෙදන්න.
russellpierce

9
මෙය InnoDB ගබඩා එන්ජිම සඳහා ක්‍රියා කරයිද? මෙහි mysql doc ට අනුව - dev.mysql.com/doc/refman/5.7/en/show-table-status.html , එම එන්ජිම සඳහා දත්ත_ දිග ක්ෂේත්‍රය පොකුරු දර්ශකයේ ප්‍රමාණය අඩංගු වේ. එය දත්තවල ප්‍රමාණය නිවැරදිව නිරූපණය නොකරයි. එහෙම වෙයිද?
euphoria83

97
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 > -" SCHEMATA වගුව -> " 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; 

ප්‍රති ult ලය

DB Name              |      DB Size in MB

mydatabase_wrdp             39.1
information_schema          0.0

ඔබට අමතර විස්තර මෙතැනින් ලබා ගත හැකිය .


42
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 ප්‍රමාණය) වර්ග කරයි.


33

දැනට තෝරාගත් දත්ත සමුදාය භාවිතා කිරීමට ඔබට විමසුමක් අවශ්‍ය නම්. මෙම විමසුම පිටපත් කරන්න. (වෙනස් කිරීමක් අවශ්‍ය නොවේ)

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
හෝ ඊටත් වඩා කෙටි (උපසිරැසියකින් තොරව): තෝරන්න වගු නාමය, වටය (((දත්ත_ දිග + දර්ශක_ දිග) / 1024/1024), 2) SIZE_MBතොරතුරු_චෙමා වෙතින්.
ඔන්කෙල්ටම්

15

වර්ක්බෙන්ච් භාවිතයෙන් බොහෝ තොරතුරු ලබා ගැනීමට පහසු ක්‍රමයක් තිබේ:

  • යෝජනා ක්‍රමයේ නම දකුණු-ක්ලික් කර "ස්කීමා පරීක්ෂක" ක්ලික් කරන්න.

  • එහි ප්‍රති window ලයක් ලෙස ඇති කවුළුව තුළ ඔබට ටැබ් ගණනාවක් තිබේ. පළමු ටැබ් "තොරතුරු" MB හි දත්ත සමුදායේ ප්‍රමාණය පිළිබඳ දළ ඇස්තමේන්තුවක් පෙන්වයි.

  • දෙවන පටිත්ත, "වගු", එක් එක් වගුව සඳහා දත්ත දිග සහ අනෙකුත් විස්තර පෙන්වයි.


මගේ මැක් ග්‍රාහක v 6.0.9
නීල්

මහා!!! MySQL Workbench හි සෑම වගුවක් සඳහාම "මේස පරීක්ෂක" ද ඇත. නිසි ලෙස ඉක්මන් නොව ඉතා පහසුය!
T30

12
  • සියලුම වගු වල ප්‍රමාණය:

    ඔබේ දත්ත සමුදාය හෝ 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 විසඳුම සඳහා, භාවිතයේ ඇති විශාලතම වගු පෙන්වන පහත උදාහරණ පිටපත පරීක්ෂා කරන්න:

#!/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

මගේ විශේෂ අවශ්‍යතාවයට සරිලන පරිදි චැප්මික්ගේ පිළිතුරෙන් අනුවර්තනය කරන ලදි.

ඔබේ දත්ත සමුදායේ නම පමණක් සඳහන් කරන්න, ඉන්පසු සියලු වගු අවරෝහණ පිළිවෙලට වර්ග කරන්න - තෝරාගත් දත්ත සමුදාය තුළ LARGEST සිට කුඩාම වගුව දක්වා. ප්‍රතිස්ථාපනය කිරීමට අවශ්‍ය වන්නේ විචල්‍ය 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

වාඩිවී සිටින පේළි හා අවකාශ ගණන පෙන්වීමට හා එය ඇණවුම් කිරීමට තවත් ක්‍රමයක්.

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" ය.


3

ඔබට sshප්‍රවේශය තිබේ නම් , ඔබට උත්සාහ කිරීමට අවශ්‍ය වනු ඇත du -hc /var/lib/mysql(හෝ වෙනස් datadirලෙස, ඔබේ ආකාරයට සකසා ඇත my.cnf).


අවසාන වශයෙන් තොරතුරු_චේමා මත රඳා නොපවතින පිළිතුරක්. මගේ නඩුවේ එය 660MB ලෙස වාර්තා කළ අතර ගොනු පද්ධතියේ සත්‍ය ප්‍රමාණය 1.8GB
php_nub_qq

3

පවතින පිළිතුරු ඇත්ත වශයෙන්ම තැටියේ වගු ප්‍රමාණය ලබා නොදෙන බව මට පෙනේ, එය වඩාත් ප්‍රයෝජනවත් වේ. මෙම විමසුම දත්ත_ දිග සහ දර්ශකය මත පදනම්ව වගු ප්‍රමාණයට සාපේක්ෂව වඩාත් නිවැරදි තැටි ඇස්තමේන්තුවක් ලබා දෙයි. මට මෙය 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

අවම වශයෙන් INNODB සඳහා මෙය පිළිතුර විය යුතුය. DATA_LENGTH, INDEX_LENGTH සහ DATA_FREE එකතු කිරීමෙන් ඔබට පිටතින් විශාල දත්ත ක්ෂේත්‍ර තිබේ නම් (බ්ලොබ් වැනි) තැටියේ ප්‍රමාණය නොලැබේ. INNODB සඳහා ඔබට තැටියේ ප්‍රමාණය පිළිබඳ නිවැරදි කියවීමක් ලබා ගැනීමට INNDB_SYS_TABLESPACES.FILE_SIZE භාවිතා කළ යුතුය , නමුත් මෙම වගුවෙන් තෝරා ගැනීමට ඔබට PROCESS වරප්‍රසාදයද අවශ්‍ය වේ.
MNB

2

මෙය පරීක්ෂා කළ යුත්තේ postgresql නොව 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; 

මෙය කතුවරුන්ගේ ප්‍රශ්නයට පිළිතුරු සැපයිය හැකි නමුත්, එහි පැහැදිලි කරන වචන සහ / හෝ ප්‍රලේඛන සඳහා සබැඳි නොමැත. අමු කේත ස්නිපෙට් ඒවා වටා සමහර වාක්‍ය ඛණ්ඩ නොමැතිව ඉතා ප්‍රයෝජනවත් නොවේ. ඔබ ද විය හැක හොඳ පිළිතුරක් ලියන ආකාරය ඉතා ප්රයෝජනවත්. කරුණාකර ඔබේ පිළිතුර සංස්කරණය කරන්න - සමාලෝචනයෙන්
නික්

Ick නික් තවමත් තහනම් ඇයි?
විලියම්

කණගාටුයි, මම එයට පිළිතුර නොදනිමි - මම උපපරිපාලක වරයෙකු නොවේ.
නික්

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 මයිස්ක්ල් හි පරීක්ෂා කර ඇත

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.