Come ottenere le dimensioni reali del database MySQL?


144

Vorrei sapere quanto spazio utilizza il mio database MySQL per selezionare un host web. Ho trovato il comando, SHOW TABLE STATUS LIKE 'table_name'quindi quando eseguo la query ottengo qualcosa del genere:

Name       | Rows | Avg. Row Length | Data_Length | Index Length
----------   ----   ---------------   -----------   ------------
table_name   400          55            362000        66560
  • i numeri sono arrotondati.

Quindi ho 362000 o 400 * 362000 = 144800000 byte di dati per questa tabella? E cosa significa Lunghezza indice? Grazie !


hai 362000 + 66560. Data_Length + Index Length
mandza


Questa pagina ti darà la risposta esatta rathishkumar.in/2017/12/…
Rathish

Risposte:


281

Da S. Prakash, trovato sul forum MySQL :

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; 

O in una sola riga per incollare più facilmente:

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
Che cosa significa lo spazio libero in MB? Ho 100 GB di GB gratuiti ma riporta meno di 1 GB di spazio libero.
Barth,

1
@Barth come da documentazione significa "spazio libero in byte per le tabelle InnoDB". Purtroppo non c'è alcuna spiegazione cosa che significa: - \
ckujau

13
Lo spazio libero in byte significa esattamente questo: significa che la quantità di spazio potrebbe essere recuperata se OTTIMIZZATE la tabella o ricostruite la tabella da zero. Quando i database memorizzano le informazioni sui dischi, le allocano in blocchi; l'eliminazione di un record spesso libera un blocco tra i blocchi utilizzati ed è molto costoso spostare tutti gli altri blocchi in giro per utilizzare quello spazio in modo che sia contrassegnato come "libero". Lo spazio può essere utilizzato in un secondo momento dal motore di database stesso oppure può essere recuperato utilizzando OPTIMIZE TABLE foo(MyISAM) oppure ricreare + analizzare per le tabelle InnoDB.
abbagliato il

92

È possibile ottenere le dimensioni del database Mysql eseguendo il comando seguente nel client Mysql

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

30

Se usi phpMyAdmin, può dirti queste informazioni.

Basta andare su "Database" (menu in alto) e fare clic su "Abilita statistiche".

Vedrai qualcosa del genere:

screenshot di phpMyAdmin

Questo probabilmente perderà un po 'di precisione man mano che le dimensioni aumentano, ma dovrebbe essere abbastanza preciso per i tuoi scopi.


Attualmente sto usando 000webhost. Ha phpMyAdmin ma non sono riuscito a trovare una casella di controllo "Abilita statistiche". C'è (forse) una domanda per questo?
marvin,

1
@marvin Bene, è possibile che sul webhost sia installata una versione precedente di phpMyAdmin. Non so in quale versione è stata introdotta questa funzione.
Radu Murzea,

Nella barra laterale, fai clic sull'icona Home in alto che ti porta alla home page. Lì nella finestra a destra, fai clic su "Database". Visualizza una tabella di una colonna di database, sotto che è un collegamento chiamato 'Abilita statistiche'
VeeK

8

se vuoi trovarlo in MB, fallo

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; 

Lo snippet SQL di questa risposta sembra essere una copia di stackoverflow.com/a/1733523/1200542
Ariel Allon,

3

Fondamentalmente ci sono due modi: interroga DB (lunghezza dati + lunghezza indice) o controlla la dimensione dei file. La lunghezza dell'indice è correlata ai dati memorizzati negli indici.

Tutto è descritto qui:

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


Bene, questa pagina è la fonte della mia domanda. Ma secondo questa domanda, ho 0,5 MB, il che mi lascia piuttosto al sicuro. Spero sia vero :) Grazie!
marvin,

0

Nessuna delle risposte include le dimensioni generali e le dimensioni dei metadati delle tabelle.

Ecco una stima più accurata dello "spazio su disco" allocato da un database.

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
Potresti elaborare? Soprattutto le tue costanti 300e 150?
Melebio

Per favore, potresti elaborare?
Allan Andrade il

0

SUM(Data_free) può essere o non essere valido . Dipende dalla storia di innodb_file_per_table. Altre discussioni si trovano qui .



0

Se si utilizza MySql Workbench, è molto semplice ottenere tutti i dettagli relativi alle dimensioni del database, a ciascuna dimensione della tabella, dimensione dell'indice ecc.

  1. Fare clic con il tasto destro su Schema
  2. Seleziona l' opzione Impostazioni schema

    inserisci qui la descrizione dell'immagine

  3. Mostra tutti i dettagli delle dimensioni dello schema

  4. Seleziona la scheda Tabelle per visualizzare le dimensioni di ciascuna tabella.

    inserisci qui la descrizione dell'immagine

  5. Dimensione della tabella visualizzata nella colonna Lunghezza dati


0

Se vuoi trovare la dimensione di tutti i database MySQL, usa questo comando, mostrerà le loro rispettive dimensioni in megabyte;

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

Se si dispone di database di grandi dimensioni, è possibile utilizzare il comando seguente per mostrare il risultato in gigabyte;

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

Se si desidera mostrare le dimensioni di un solo database specifico, ad esempio YOUR_DATABASE_NAME, è possibile utilizzare la seguente query;

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;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.