Do MySQL Tabelle Locked influenzano correlati Visualizzazioni?
-
26-09-2019 - |
Domanda
Quindi, dopo aver letto a DOP / PHP / MySQL: operazione contro esecuzione diretta per quanto riguarda i problemi di prestazioni stavo pensando ho fatto qualche ricerca su tabelle di blocco in MySQL.
http://dev.mysql.com/ doc / refman / 5.0 / it / table-locking.html
bloccaggio Tabella consente numerose sessioni a leggere da un tavolo, allo stesso tempo, ma se una sessione vuole scrivere a un tavolo, deve prima ottenere in esclusiva accesso. Durante l'aggiornamento, tutti gli altri sessioni che vogliono accedere a questa particolare tabella dovrà attendere che la aggiornamento è fatto.
Questa parte mi ha colpito soprattutto perché la maggior parte delle nostre richieste saranno aggiornamenti, piuttosto che gli inserti. Mi chiedevo se quello creato una tabella chiamata foo sul quale / inserti sono stati effettuati tutti gli aggiornamenti e poi una visualizzazione denominata foo_view (copia di foo, o forse foo e un collegamento di diversi altri tavoli inclusa foo) su cui si sono verificati tutti seleziona, sarebbe questo problema di bloccaggio verificarsi ancora?
Cioè, sarebbe query di selezione su foo_view devono ancora attendere un aggiornamento alla fine su pippo?
Un altro breve domanda il mio collega ha chiesto. Questo influisce la memorizzazione nella cache? Cioè se la selezione è in cache sarà vero colpire i risultati della cache e ritorno, o sarà attendere che il blocco per arrivare primi?
Soluzione
La vista sperimenteranno la stessa ghiera come tabelle sottostanti.
Dalla pagina MySQL di riferimento sul bloccaggio :
MySQL concede serrature tavolo scrivere come segue:
- Se non ci sono serrature sul tavolo, mettere un blocco di scrittura su di esso.
- In caso contrario, mettere la richiesta di blocco nella coda blocco di scrittura.
MySQL concede tabella di lettura serrature segue:
- Se non ci sono blocchi di scrittura sul tavolo, mettere un blocco di lettura su di esso.
- In caso contrario, mettere la richiesta di blocco nella coda blocco di lettura.
E 'la pena ricordare che questo dipende dal motore di database che si sta utilizzando. MyISAM seguirà la procedura descritta sopra e blocco l'intera tabella (anche se è suddiviso in più partizioni) se un motore come InnoDB farà blocco a livello riga invece.
Se non sei raggiungere i benchmark delle prestazioni necessarie con MyISAM e avete dimostrato il vostro collo di bottiglia è in attesa su blocchi di tabella tramite gli aggiornamenti, vorrei suggerire cambiare il motore della vostra tabella di archiviazione per InnoDB.