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?

È stato utile?

Soluzione

La vista sperimenteranno la stessa ghiera come tabelle sottostanti.

Dalla pagina MySQL di riferimento sul bloccaggio :

  

MySQL concede serrature tavolo scrivere come   segue:

     
      
  1. Se non ci sono serrature sul tavolo, mettere un blocco di scrittura su di esso.
  2.   
  3. In caso contrario, mettere la richiesta di blocco nella coda blocco di scrittura.
  4.   
     

MySQL concede tabella di lettura serrature   segue:

     
      
  1. Se non ci sono blocchi di scrittura sul tavolo, mettere un blocco di lettura su di esso.
  2.   
  3. In caso contrario, mettere la richiesta di blocco nella coda blocco di lettura.
  4.   

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.

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