ماهو - تحميل mysql




كيفية الحصول على أحجام الجداول لقاعدة بيانات mysql؟ (8)

يمكنني تشغيل هذا الاستعلام للحصول على أحجام كافة الجداول في قاعدة بيانات mysql:

show table status from myDatabaseName;

أود الحصول على بعض المساعدة في فهم النتائج. أنا أبحث عن الجداول مع أكبر الأحجام.

أي عمود يجب أن أنظر؟


إذا كان لديك وصول ssh ، قد ترغب ببساطة في تجربة du -hc /var/lib/mysql (أو datadir مختلفة ، كما هو محدد في my.cnf ) كذلك.


إذا كنت تريد أن يستخدم الاستعلام قاعدة البيانات المحددة حاليًا. ببساطة نسخ لصق هذا الاستعلام. (لا يوجد تعديل مطلوب)

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;

افترض أن اسم قاعدة البيانات هو "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)

لجدول محدد:

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)

جرّب أمر shell التالي ( 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

مقتبس من إجابة ChapMic إلى جناح حاجتي الخاصة.

فقط حدد اسم قاعدة البيانات الخاصة بك ، ثم فرز كل الجداول بترتيب تنازلي - من LARGEST إلى SMALLEST داخل قاعدة البيانات المحددة. يحتاج فقط متغير واحد ليتم استبداله = اسم قاعدة البيانات الخاصة بك.

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;

هناك طريقة سهلة للحصول على العديد من المعلومات باستخدام Workbench:

  • انقر بزر الماوس الأيمن فوق اسم المخطط ثم انقر فوق "مفتش Schema".

  • في النافذة الناتجة لديك عدد من علامات التبويب. تعرض علامة التبويب الأولى "Info" تقديرًا تقريبيًا لحجم قاعدة البيانات بالميغابايت.

  • تعرض علامة التبويب الثانية "جداول" طول البيانات وتفاصيل أخرى لكل جدول.


يمكنك استخدام هذا الاستعلام لإظهار حجم الجدول (على الرغم من أنك تحتاج إلى استبدال المتغيرات أولاً):

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;

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; 

هذا الفرز الأحجام (حجم DB في ميغابايت).





mysql