MySQL Veritabanının Gerçek Boyutu Nasıl Elde Edilir?


145

MySQL veritabanımın bir web barındırıcısı seçmek için ne kadar alan kullandığını bilmek istiyorum. Komutu buldum, SHOW TABLE STATUS LIKE 'table_name'bu yüzden sorguyu yaptığımda şöyle bir şey alıyorum:

Name       | Rows | Avg. Row Length | Data_Length | Index Length
----------   ----   ---------------   -----------   ------------
table_name   400          55            362000        66560
  • sayılar yuvarlanır.

Peki bu tablo için 362000 veya 400 * 362000 = 144800000 bayt veriye sahip miyim ? Ve Dizin Uzunluğu ne anlama geliyor? Teşekkürler !


362000 + 66560'a sahipsiniz. Data_Length + Index Length
mandza


Bu sayfa, tam cevap verecek rathishkumar.in/2017/12/...
Rathish

Yanıtlar:


282

MySQL forumunda bulunan S. Prakash'tan :

SELECT table_schema "database name",
    sum( data_length + index_length ) / 1024 / 1024 "database size in MB",
    sum( data_free )/ 1024 / 1024 "free space in MB"
FROM information_schema.TABLES
GROUP BY table_schema; 

Veya daha kolay kopyalayıp yapıştırmak için tek bir satırda:

SELECT table_schema "database name", sum( data_length + index_length ) / 1024 / 1024 "database size in MB", sum( data_free )/ 1024 / 1024 "free space in MB" FROM information_schema.TABLES GROUP BY table_schema; 

7
MB cinsinden Boş Alan ne anlama geliyor? 100 GB boş alanım var ancak 1 GB'den daha az boş olduğunu bildiriyor.
Barth

1
@Barth, belgelere göre "InnoDB tabloları için bayt cinsinden boş alan" anlamına gelir. Ne yazık ki bunun ne anlama geldiğine dair bir açıklama yok : - \
ckujau

13
Bayt cinsinden boş alan tam olarak bunun anlamına gelir - bu, tabloyu OPTİMİZE ETME veya tabloyu sıfırdan yeniden oluşturduğunuzda alan miktarının geri kazanılabileceği anlamına gelir. Veritabanları disklerde bilgi depoladığında, bunları bloklar halinde tahsis ederler; Bir kaydı silmek genellikle kullanılan bloklar arasındaki bir bloğu serbest bırakır ve diğer blokların tamamını bu alanı kullanmak için kaydırmak çok pahalıdır, böylece "boş" olarak işaretlenir. Alan daha sonra veritabanı motoru tarafından kullanılabilir veya OPTIMIZE TABLE foo(MyISAM) kullanılarak geri alınabilir veya InnoDB tabloları için yeniden oluşturabilir + analiz edilebilir.
razzed

92

Mysql istemcisinde aşağıdaki komutu çalıştırarak Mysql veritabanınızın boyutunu elde edebilirsiniz.

SELECT  sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2))  as "Size in GB"
FROM information_schema.TABLES
WHERE table_schema = "<database_name>"

32

PhpMyAdmin kullanıyorsanız, size bu bilgiyi söyleyebilir.

"Veritabanları" na (üstteki menü) gidin ve "İstatistikleri Etkinleştir" i tıklayın.

Bunun gibi bir şey göreceksiniz:

phpMyAdmin ekran görüntüsü

Bu, boyutlar arttıkça büyük olasılıkla biraz doğruluk kaybına uğrayacaktır, ancak amaçlarınız için yeterince doğru olmalıdır.


Şu anda 000webhost kullanıyorum. PhpMyAdmin'e sahip ancak "istatistikleri etkinleştir" onay kutusunu bulamadım. Bunun için (belki) bir sorgu var mı?
marvin

1
@marvin Webhost'ta phpMyAdmin'in daha eski bir sürümü kurulu olabilir. Bu özelliğin hangi sürümde tanıtıldığını bilmiyorum.
Radu Murzea

Kenar çubuğunuzda, sizi ana sayfaya götüren üst kısımdaki Ana Sayfa simgesini tıklayın. Sağ pencerede 'Veritabanları'nı tıklayın. O 'İstatistikleri Enable' adlı bir bağlantıdır altında, veritabanlarının bir tek sütun tablo görüntüler
VeeK


3

Temel olarak iki yol vardır: DB'yi sorgulama (veri uzunluğu + dizin uzunluğu) veya dosya boyutunu kontrol etme. Dizin uzunluğu, dizinlerde depolanan verilerle ilgilidir.

Her şey burada açıklanmaktadır:

http://www.mkyong.com/mysql/how-to-calculate-the-mysql-database-size/


Bu sayfa sorumun kaynağı. Ancak bu sorguya göre 0,5 MB'ım var, bu da beni oldukça güvende bırakıyor. Umarım doğrudur :) Teşekkürler!
marvin

1

Cevapların hiçbiri genel gider boyutunu ve tabloların meta veri boyutlarını içermez.

İşte bir veritabanı tarafından ayrılan "disk alanı" nın daha doğru bir tahmini.

SELECT ROUND((SUM(data_length+index_length+data_free) + (COUNT(*) * 300 * 1024))/1048576+150, 2) AS MegaBytes FROM information_schema.TABLES WHERE table_schema = 'DATABASE-NAME'

5
Detaylandırır mısın Özellikle sabitleriniz 300ve 150?
Melebius

Lütfen, detaylandırır mısınız?
Allan Andrade

0

SUM(Data_free) geçerli olabilir veya olmayabilir . Tarihine bağlıdır innodb_file_per_table. Daha fazla tartışma burada bulunur .



0

MySql Workbench kullanıyorsanız, Veritabanı boyutu, her bir tablo boyutu, dizin boyutu vb. Tüm ayrıntıları almak çok kolaydır

  1. Şemaya Sağ Tıklayın
  2. Schema Inspector seçeneğini seçin

    görüntü açıklamasını buraya girin

  3. Şema boyutunun tüm ayrıntılarını gösterir

  4. Her tablonun boyutunu görmek için Tablolar Sekmesi'ni seçin .

    görüntü açıklamasını buraya girin

  5. Veri Uzunluğu sütununda görüntülenen tablo boyutu


0

Tüm MySQL veritabanlarının boyutunu bulmak istiyorsanız, bu komutu kullanın, ilgili boyutlarını megabayt olarak gösterecektir;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024 "size in MB" FROM information_schema.TABLES GROUP BY table_schema;

Büyük veritabanlarınız varsa, sonucu gigabayt olarak göstermek için aşağıdaki komutu kullanabilirsiniz;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES GROUP BY table_schema;

Örneğin YOUR_DATABASE_NAME, yalnızca belirli bir veritabanının boyutunu göstermek istiyorsanız , aşağıdaki sorguyu kullanabilirsiniz;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES WHERE table_schema='YOUR_DATABASE_NAME' GROUP BY table_schema;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.