একটি মাইএসকিউএল ডাটাবেসের টেবিলগুলির আকারগুলি কীভাবে পাবেন?


899

আমি একটি মাইএসকিউএল ডাটাবেসে সমস্ত টেবিলের আকার পেতে এই ক্যোয়ারীটি চালাতে পারি:

show table status from myDatabaseName;

ফলাফলগুলি বুঝতে কিছুটা সহায়তা চাই। আমি বৃহত্তম আকারের টেবিলগুলি সন্ধান করছি।

কোন কলামে আমার নজর দেওয়া উচিত?


8
আকার বলতে কী বোঝ? সারির সংখ্যা? বাইটস ডিস্কে নেওয়া হয়েছে?
মার্ক বাইয়ার্স

@ মার্ক আমি ডিস্কে আকার চাই এই সঠিক পদ্ধতি? # ডু-শ / এমএনটি / এমসকিএল_ডেটা / ওপেনেক্স / এফ_স্ক্র্যাপার_ব্যানার_ডেটেলস M এমওয়াইআই G৯ জি / এমএনটি / এমএসকিএল_ডাটা / ওপেনেক্স / এফ_স্ক্র্যাপার_ব্যাননার_ডেটেলস Y এমওয়াইআই
আশীষ

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
আফিকা, এটি কেবল স্থির আকারের ক্ষেত্রগুলির দৈর্ঘ্য সঠিকভাবে গণনা করবে। আপনি কিভাবে গণনা VARCHARএবং BLOBপ্রকার?
l0b0

3
@ কাসিমির এক পর্যায়ে বিশ্ব বিভ্রান্ত হয়ে পড়ে এবং কিছু মানক সংস্থা এবং হার্ডওয়্যার প্রস্তুতকারীরা সিদ্ধান্ত নিয়েছিল যে দশমিক ব্যবস্থায় একটি কিলোবাইট সংজ্ঞায়িত করা আরও ভাল। আইইসি স্ট্যান্ডার্ডটি এখন বেসটি 2 কিলোবাইট (1024 বাইট) কে কিবিবাইট (কিবি) বলে। যে কোনও হারে, মাইএসকিউএল জানে না, তাই আপনি যদি
আইসিসি

9
এই InnoDB স্টোরেজ ইঞ্জিনের জন্য কাজ করবে? এখানে মাইএসকিএল ডক অনুসারে - dev.mysql.com/doc/refman/5.7/en/show-table-status.html , ইঞ্জিনটির ডেটা_ দৈর্ঘ্যের ক্ষেত্রটি ক্লাস্টারড ইনডেক্সের আকার ধারণ করে। এটি সঠিকভাবে ডেটার আকারকে উপস্থাপন করবে না। এটা হবে?
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; 

এটি আকারগুলি বাছাই করে (এমবিতে ডিবি আকার)।


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
বা এমনকি আরও ছোট (subquery ছাড়াই): নির্বাচন করুন টেবিলের নাম, গোল ((তথ্য_ দৈর্ঘ্য + সূচক দৈর্ঘ্য) / 1024/1024), 2) SIZE_MBতথ্য_চেমি T
অনকেল্টেম

15

ওয়ার্কবেঞ্চ ব্যবহার করে অনেক তথ্য পাওয়ার সহজ উপায় রয়েছে:

  • স্কিমা নামটি ডান ক্লিক করুন এবং "স্কিমা পরিদর্শক" ক্লিক করুন।

  • ফলস্বরূপ উইন্ডোতে আপনার কয়েকটি ট্যাব রয়েছে। প্রথম ট্যাব "তথ্য" এমবিতে ডাটাবেসের আকারের মোটামুটি অনুমান দেখায়।

  • দ্বিতীয় ট্যাব, "টেবিলগুলি" প্রতিটি সারণির জন্য ডেটার দৈর্ঘ্য এবং অন্যান্য বিবরণ প্রদর্শন করে।


আমার ম্যাক ক্লায়েন্ট v 6.0.9
নীল

গ্রেট !!! মাইএসকিউএল ওয়ার্কবেঞ্চে প্রতিটি টেবিলের জন্য একটি "সারণী পরিদর্শক" রয়েছে। সঠিকভাবে তাড়াতাড়ি নয় তবে খুব সহজ!
T30

11
  • সমস্ত টেবিলের আকার:

    মনে করুন আপনার ডাটাবেস বা TABLE_SCHEMAনামটি "নিউজ_লেটার্ট"। তারপরে এই কোয়েরিটি ডাটাবেসে সমস্ত সারণীর আকার প্রদর্শন করবে।

    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হয় "সংবাদ" । তারপরে এসকিউএল কোয়েরি হবে-

    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

ড্রুপাল / ড্রশ সমাধানের জন্য, নিম্নলিখিত উদাহরণ স্ক্রিপ্টটি পরীক্ষা করুন যা ব্যবহারে বৃহত্তম সারণি প্রদর্শন করবে:

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

আপনার যদি sshঅ্যাক্সেস থাকে তবে আপনি সম্ভবত চেষ্টা করতেও du -hc /var/lib/mysql(বা datadirআপনার হিসাবে সেট করা আলাদা my.cnf) চেষ্টা করতে পারেন ।


অবশেষে এমন একটি উত্তর যা তথ্য_চেমার উপর নির্ভর করে না। আমার ক্ষেত্রে এটি 660 এমবি রিপোর্ট করেছে যখন ফাইল সিস্টেমে প্রকৃত আকার 1.8 গিগাবাইট
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;  

এই ক্যোয়ারিতে আপনাকে কেবলমাত্র স্ট্রিংয়ের বিকল্প দিতে হবে "হ'ল" আপনার ডেটাবেসনেম "।


2

আমি দেখতে পেয়েছি বিদ্যমান উত্তরগুলি আসলে ডিস্কে টেবিলগুলির আকার দেয় না, যা আরও সহায়ক। ডেটা_লেন্থ এবং ইনডেক্সের উপর ভিত্তি করে সারণির আকারের তুলনায় এই কোয়েরিটি আরও সঠিক ডিস্কের অনুমান দেয়। আমাকে এটি AWS আরডিএস উদাহরণের জন্য ব্যবহার করতে হয়েছিল যেখানে আপনি শারীরিকভাবে ডিস্কটি পরীক্ষা করতে পারবেন না এবং ফাইলের আকারগুলি পরীক্ষা করতে পারবেন না।

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 মাইএসকিএল-তে পরীক্ষা করা হয়


1

এটি মাইএসকিএল-তে পরীক্ষা করা উচিত, পোস্টগ্রিস্কিল নয়:

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; 

যদিও এটি লেখকদের প্রশ্নের উত্তর দিতে পারে, এতে কিছু ব্যাখ্যাকারী শব্দ এবং / অথবা ডকুমেন্টেশনের লিঙ্কের অভাব রয়েছে। আশেপাশে কিছু বাক্যাংশ ছাড়া কাঁচা কোড স্নিপেটগুলি খুব বেশি সহায়ক হয় না। আপনি কীভাবে একটি ভাল উত্তর লিখতে পারেন তা খুব সহায়ক। দয়া করে আপনার উত্তরটি সম্পাদনা করুন - পর্যালোচনা থেকে
নিক

@ নিক এখনও নিষিদ্ধ কেন?
উইলিয়াম

দুঃখিত, আমি এর উত্তর জানি না - আমি কোনও মডারেটর নই।
নিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.