Bir MySQL veritabanındaki tüm tabloların boyutlarını almak için bu sorguyu çalıştırabilirsiniz:
show table status from myDatabaseName;
Sonuçları anlamada yardım istiyorum. En büyük boyutlara sahip tablolar arıyorum.
Hangi sütuna bakmalıyım?
Bir MySQL veritabanındaki tüm tabloların boyutlarını almak için bu sorguyu çalıştırabilirsiniz:
show table status from myDatabaseName;
Sonuçları anlamada yardım istiyorum. En büyük boyutlara sahip tablolar arıyorum.
Hangi sütuna bakmalıyım?
Yanıtlar:
Bir tablonun boyutunu göstermek için bu sorguyu kullanabilirsiniz (önce değişkenleri değiştirmeniz gerekir):
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";
veya her sorgudaki her tablonun boyutunu listelemek için bu sorguyu, en büyüğü:
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;
AND table_name IN ('table_1', 'table_2', 'table_3');
VARCHAR
ve BLOB
yazılır?
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
Şema adını " information_schema " -> SCHEMATA tablosu -> " SCHEMA_NAME " sütunundan alabilirsiniz
Ek Aşağıdaki gibi mysql veritabanlarının boyutunu alabilirsiniz .
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;
Sonuç
DB Name | DB Size in MB
mydatabase_wrdp 39.1
information_schema 0.0
Sorgunun seçili olan veritabanını kullanmasını istiyorsanız. bu sorguyu kopyalayıp yapıştırmanız yeterlidir. (Değişiklik gerekmez)
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;
SIZE_MB
FROM information_schema.TABLES WHERE table_schema = DATABASE () SİPARİŞ (data_length + index_length) ASC;
Workbench kullanarak birçok bilgi edinmenin kolay bir yolu vardır:
Şema adını sağ tıklatın ve "Şema denetçisi" ni tıklatın.
Ortaya çıkan pencerede birkaç sekmeniz vardır. İlk sekme "Bilgi", MB cinsinden veritabanı boyutunun kabaca bir tahminini gösterir.
İkinci sekme olan "Tablolar", Veri uzunluğu ve her tablo için diğer ayrıntıları gösterir.
Tüm tabloların boyutu:
Veritabanınızın veya TABLE_SCHEMA
adınızın "news_alert" olduğunu varsayalım . Sonra bu sorgu veritabanındaki tüm tabloların boyutunu gösterecektir.
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;
Çıktı:
+---------+-----------+
| Table | Size (MB) |
+---------+-----------+
| news | 0.08 |
| keyword | 0.02 |
+---------+-----------+
2 rows in set (0.00 sec)
Belirli bir tablo için:
Senin varsayalım TABLE_NAME
IS "haber" . Sonra SQL sorgusu
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;
Çıktı:
+-------+-----------+
| Table | Size (MB) |
+-------+-----------+
| news | 0.08 |
+-------+-----------+
1 row in set (0.00 sec)
Aşağıdaki kabuk komutunu deneyin ( DB_NAME
veritabanı adınızla değiştirin ):
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 çözümü için, kullanımdaki en büyük tabloları görüntüleyecek aşağıdaki örnek komut dosyasını kontrol edin:
#!/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
Heres bunu bash komut satırını kullanmanın bir başka yolu.
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
ChapMic'in benim özel ihtiyacım olan cevabından uyarlandı.
Yalnızca veritabanı adınızı belirtin, ardından tüm tabloları seçili veritabanı içindeki EN BÜYÜK'den KÜÇÜK tabloya kadar azalan sırada sıralayın. Yalnızca 1 değişkenin değiştirilmesi gerekiyor = veritabanı adınız.
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;
ssh
Erişiminiz varsa , basitçe denemenizi du -hc /var/lib/mysql
(veya datadir
sizin ayarladığınız şekilde farklı) da deneyebilirsiniz my.cnf
.
Satır sayısını ve işgal ettiği alanı ve siparişini vermenin başka bir yolu.
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;
Bu sorguda değiştirmek zorunda olduğunuz tek dize "VeritabanınızAdı" dır.
Mevcut cevapların aslında diskteki tabloların boyutunu vermediğini görüyorum, bu da daha yararlıdır. Bu sorgu, veri_uzunluğu ve dizine dayalı olarak tablo boyutuna kıyasla daha doğru disk tahmini sağlar. Diski fiziksel olarak inceleyip dosya boyutlarını kontrol edemediğiniz bir AWS RDS örneği için kullanmak zorunda kaldım.
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
Sonunda veritabanının toplam boyutunu hesaplayın:
(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"
)
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;
yukarıdaki tüm 2 mysql üzerinde test edilmiştir
Bu postgresql değil, mysql içinde test edilmelidir:
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;