Domanda

mysql5.0 con una coppia di database " A " e "B", entrambi con tabelle innodb di grandi dimensioni. " drop database A; " blocca il database "B" per un paio di minuti. Nulla sta usando " A " a quel punto, quindi perché è un'operazione così intensa?

Punti bonus: dato che utilizziamo " A " cariciamo i dati in " B " e poi passiamo ad usare " B " come possiamo farlo più velocemente? Eliminare i database non è il genere di cosa che si deve fare in genere in ogni momento, quindi è un po 'fuori dagli schemi.

È stato utile?

Soluzione

Quindi non sono sicuro la risposta di Matt Rogish aiuterà il 100%.

Il problema è che MySQL * ha un mutex (blocco reciprocamente esclusivo) attorno all'apertura e alla chiusura delle tabelle, quindi sostanzialmente significa che se una tabella sta per essere chiusa / cancellata, no altro le tabelle possono essere aperte.

Questo è descritto da un mio collega qui: http://www.mysqlperformanceblog.com/2009/06/16 / slow-drop-table /

Un'ottima strategia di riduzione dell'impatto è quella di utilizzare un filesystem come XFS.

La soluzione è brutta. Devi essenzialmente sgranocchiare tutti i dati nelle tabelle prima di eliminarli (vedi il commento n. 11 sul link sopra).

Altri suggerimenti

A seguito di skaffman:

Modifica my.cnf (e riavvia MySQL) per includere:

innodb_file_per_table = 1

( http://mysqldba.blogspot.com/2006/12/innodbfilepertable.html )

Ciò consentirà al database di archiviare i file dedicati e di eliminarlo dal pool condiviso. Ti consentirà quindi di fare cose divertenti come posizionare tabelle / indici su diversi dischi fisici per suddividere ulteriormente l'I / O e migliorare le prestazioni.

Nota che questo non cambia le tabelle esistenti; dovrai fare un lavoro per trovarli nel loro file ( http://capttofu.livejournal.com /11791.html ).

Per impostazione predefinita, tutti i database innodb in una determinata installazione del server mysql utilizzano lo stesso pool fisico di file di dati, quindi è possibile "eliminare il database A". potrebbe influire sul database B. Poiché "elimina database" rischia di comportare un pesante rimpatrio dei file di dati innodb, è ipotizzabile che si tratti di un'operazione di blocco, a causa dell'intensità dell'operazione o in base alla progettazione.

Tuttavia, penso che puoi fare in modo che ogni database utilizzi file fisici diversi, anche se non l'ho provato da solo, quindi dovrai capire le specifiche per te stesso. In caso contrario, potrebbe essere necessario utilizzare due diverse installazioni mysql fianco a fianco sullo stesso computer, il che è perfettamente fattibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top