2010-03-21 7 views
7

Ho un database innodb MySQL a 1,9 GB, mostrato dal seguente comando.Caricare un database innodb MySQL nella memoria

SELECT table_schema "Data Base Name" 
    , sum(data_length + index_length)/1 048 576 
     as "Data Base Size in MB" 
    , sum(data_free)/ 1 048 576 
     as "Free Space in MB" 
FROM information_schema.TABLES 
GROUP BY table_schema ; 

+--------------------+----------------------+------------------+ 
| Data Base Name  | Data Base Size in MB | Free Space in MB | 
+--------------------+----------------------+------------------+ 
| database_name  |  1959.73437500 | 31080.00000000 | 

Le mie domande sono:

  1. significa se ho impostato l'innodb_buffer_pool_size a 2GB o più grande, l'intero database può essere caricato in memoria tanto meno leggere richieste del disco sono necessari?

  2. Cosa significa lo spazio libero di 31 GB?

  3. Se la RAM massima può essere allocata a innodb_buffer_pool_size è 1 GB, è possibile specificare quali tabelle caricare in memoria mentre altri ne leggono sempre dal disco?

Grazie in anticipo.

risposta

7
  1. Non esattamente. Il pool di buffer InnoDB viene utilizzato per il buffer di letture e scritture. se la maggior parte dei tuoi accessi viene letta, la maggior parte se verrà memorizzata nella cache e saranno necessari meno accessi ai dischi.
  2. potrebbe essere questo bug, non è documentato molto bene, ma penso data_free è lo spazio disponibile all'interno dei file innodb (se scrivi più di questo InnoDB dovrà ingrandire i file di dati).
  3. no, ma InnoDB memorizzerà nella cache i dati a cui si accede più automaticamente, quindi dovrebbe avere comunque un effetto ottimale.

considerare l'utilizzo di memcached come livello di cache per eliminare del tutto l'accesso al database se è necessario prestazioni migliori.

2
  1. È meglio preoccuparsi di disporre di memoria sufficiente per memorizzare nella cache gli indici nella ram e lasciare i dati sul disco. Le prestazioni del database sono notevolmente compromesse se gli indici devono essere letti ogni volta dal disco, molto più del sovraccarico di recuperare successivamente i dati desiderati dal disco.
  2. I file di dati InnoDB vengono creati con una dimensione fissa, con la possibilità di estenderli automaticamente (creare file aggiuntivi) se si riempiono. Puoi vedere quale è la dimensione per file con show variables like 'innodb_data_file_path'. Lo spazio libero riportato indica la quantità di file di dati correnti inutilizzati. Nel tuo caso, hai 2gigs di dati memorizzati in (molto probabilmente) 32gigs di file di dati InnodB, lasciando 30gig disponibili.
  3. C'è qualche ragione per voler aggirare la logica di cacheing di InnoDB per bloccare specifiche tabelle nella ram? La cache tenderà naturalmente a mantenere già i dati più frequentemente utilizzati nella ram e le prestazioni ne risentiranno senza dubbio se si impone di mantenere i dati meno utilizzati invece dei più popolari.