2010-10-22 4 views
11

Abbiamo notato che MySQL sta segnalando un numero molto elevato di tabelle di dischi temporanei (oltre 10.000) segnalato da Server Density. Stavamo cercando di capire un po 'di più su questo.Numero elevato di tabelle di dischi temporanei MySQL

  • Perché le tabelle del disco temporaneo sono create da MySQL?
  • Che impatto hanno sulle prestazioni?
  • Sono mai stati rimossi da MySQL o questo numero aumenterà?

risposta

15

Le tabelle temporanee possono essere create per molte ragioni. Ogni operazione di selezione che ha un grande set di dati e richiede l'ordinamento verrà scritta in uno. Le tabelle temporanee effettive create direttamente dalle query (tipo di tabella TEMPORARY) vengono eseguite per ogni connessione, quindi se hai uno script con 50 connessioni ciascuna che fa la stessa tabella temporanea, sono 50 set di file temporanei su disco per loro . gruppo di motivi di creazione tabella temporanea per ordine e distinto per I/o basato su disco è la parte più costosa di un DBMS, in generale, quindi se queste tabelle sono per insiemi di dati di grandi dimensioni, probabilmente si limiterà le prestazioni del DB a quella di il tuo sistema I/O. Ma in generale, semplicemente esistendo, stanno solo masticando lo spazio su disco e non molto altro.

Le tabelle temporali per l'ordinamento devono pulirsi automaticamente al termine della query. La tabella Temp del tipo 'TEMPORARY' si ripulisce quando la connessione a cui sono collegati è chiusa. Se stai usando connessioni persistenti, le tabelle TEMPORARY rimarranno in attesa finché tu (o un programma) le tracci manualmente.

+0

ah capisco, quindi se stessimo usando le connessioni persistenti su un server occupato potremmo vedere aumentare il valore ad un grande valore, ma non è nulla di cui preoccuparsi? – Tom

+1

dipende da come vengono create le tabelle. la creazione di una tabella temporanea "A" in una connessione va bene. il successivo riutilizzo della connessione riutilizzerà solo la stessa tabella. ma se li stai generando con nomi casuali, perderai quei tavoli temporanei fino a quando la connessione non verrà chiusa e mysql pulirà. –

+0

Perdita dove, su disco, in memoria? – Tom

1

Sono stati definiti molti indici sulle tabelle. Hai mai pensato a come funziona l'indicizzazione?

Semplicemente un indice è una tabella temporanea in dbase che mantiene una copia della colonna indicizzata ordinata. Quando viene inserita una nuova riga, dbase pone un nuovo record nella tabella temporanea al posto giusto così un indice ha i seguenti risultati:

A) Vantaggi:

1) Aumento della velocità di ricerca perché la tabella è ordinato in una tabella temporanea sulla base di campo indicizzato (s)

B) Svantaggi:

1) Rallentare (Create, Update, Delete) perché stesse azioni dovrebbero essere fatte su tabelle temporanee, se necessario.

2) Le dimensioni del DataBase aumentano a causa dell'utilizzo delle tabelle temporanee.

Conclusione:

indicizzazione è un compromesso di grandi dimensioni db e più lento inserimento e ricerca rapida in grande quantità di dati. Utilizzare l'indicizzazione sui campi a cui si fa frequentemente riferimento come criterio di ricerca (WHERE) e rimuovere gli indici aggiuntivi per ottimizzare la progettazione del db.

6

Prima di tutto leggi the answer by Marc B È il motivo del perché hai molti tavoli temporanei. Ad ogni modo, le tabelle temporanee non sono male, la cosa brutta è "tabella temporanea su disco" che è lenta e causa gran parte dell'IO del disco.

Per evitare che una tabella temporanea per essere memorizzati sul disco cercare di attenersi alla seguente procedura:

  • controllare il valore della max_heap_table_size variabile
  • controllare il valore della tmp_table_size variabile
  • Controllare il percentuale delle tabelle del disco tra tutte le tabelle temporanee. Basta confrontare show global status like 'Created_tmp_%tables' questi due numeri. Se la percentuale non è troppo grande - non c'è nulla di cui preoccuparsi.
+0

I valori di max_heap_table_size e tmp_table_size quali sono i valori buoni/cattivi? – Tom

+0

Dipende molto dal tuo specifico progetto. Quindi non c'è un consiglio generale sui valori. L'unica cosa che posso suggerire: basta evitare tabelle temporanee su disco. – Vadim