Vantaggi del blocco a livello di tabella


7

Quali sono i vantaggi del blocco a livello di tabella che viene utilizzato dal motore di archiviazione MyISAM?Il blocco a livello di riga ha molti vantaggi come gli aggiornamenti simultanei e le letture che non bloccano la tabella.

modificareÈ ampiamente considerato che il blocco a livello di tabella previene i deadlock.Ma quanto vale la prevenzione dei deadlock al costo della concorrenza?

  0

[Questa discussione] (http://dba.stackexchange.com/questions/1/what-are-the-main-differences-between-innodb-and-myisam) potrebbe avere alcune informazioni rilevanti per te. 14 set. 112011-09-14 20:57:50

  0

Questa discussione riguarda le caratteristiche di MyISAM vs InnoDB. Non c'è nulla riguardo ai vantaggi del blocco a livello di tabella. 14 set. 112011-09-14 21:05:21

5

MyISAM non ha deadlocking, ma deadlocking in un certo senso, è un miglioramento rispetto al locking a livello di tabella.

Quando stai provando a INSERIRE/AGGIORNA/CANCELLA da una tabella bloccata, dovrai attendere che sia disponibile o fino a quando non si ottiene un timeout (per impostazione predefinita 28800 secondi).Con deadlocking su un motore di blocco a livello di riga, si attende un po 'se non è libero e se il server rileva una sorta di "loop infinito" - dove 2 connessioni non rinunceranno a una riga - allora rifiuterà entrambe le connessioni rapidamente e dare un punto morto.

Se stai cercando di risolvere lo stallo, ti suggerisco di guardare le seguenti cose:

  • Il deadlock si verifica in caso di codice errato in una transazione?è davvero necessario "tenere" una riga per completare il calcolo e aggiornarlo?
  • C'è un indice per la condizione nella tua dichiarazione?altrimenti InnoDB potrebbe effettivamente contrassegnare l'intera tabella come in attesa di essere aggiornata.
  • Potrebbe essere che il disco fisso sul server non impegni le modifiche di InnoDB abbastanza velocemente?l'operazione del checkpoint sul server causa problemi/blocchi con InnoDB?
  • È a causa del blocco automatico degli incrementi?Se è così, forse dovresti considerare un'impostazione di incremento automatico più liberalehttp://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html(guarda anche il blocco a livello di riga per risolvere alcuni dei problemi causati da tali cambiamenti)

3

Un blocco tabella (come quello utilizzato da MyISAM) è privo di deadlock problemi.

  0

BTW +1 per rispondere per primo sul deadlock !!! 14 set. 112011-09-14 21:17:32


6

Poiché mysql pianifica le query per l'esecuzione in questo modo:

  • Le richieste di scrittura (come UPDATE e DELETE) hanno la priorità sulle richieste di lettura (SELECT)
  • Il server esegue le scritture in modo FIFO (nell'ordine ricevuto)

Quali sono i vantaggi ?

Deadlock non può mai verificarsi con MyISAM.Il server MySQL può quindi gestire tutte le contese, esplicite (LOCK TABLE) o implcit (Any DML).

Finché una tabella MyISAM non ha record eliminati o aggiornati, gli inserimenti simultanei possono liberamente verificarsi impunemente.Questo, in effetti, includerebbe INSERT su una tabella che ha un blocco di lettura esplicito.

Per qualsiasi tabella con spazi vuoti, l'esecuzione di OPTIMIZE TABLE rimuove tali spazi e consente nuovamente inserimenti concorrenti.

Per ulteriori informazioni, si prega di leggere "MySQL 5.0 Certification Study Guide" pages 408-412 Section 29.2 .

  0

In questo modo non si verificherà un deadlock, ma il vantaggio che ne deriva se confrontato con i suoi svantaggi come nessuna concorrenza.E in caso di carico elevato, velocità effettiva del database. 14 set. 112011-09-14 21:10:03

+2

@rickjames il vantaggio di myisam non è nel modo in cui gestisce gli aggiornamenti.È meglio in una situazione intensiva senza scrittura. 14 set. 112011-09-14 21:13:01

  0

Sfortunatamente, molte persone usano CMS di WordPress, Drupal e MoveableTypes, il cui valore predefinito è sempre MyISAM.Se qualcuno ha un sito Web con traffico elevato, deve allontanarsi da MyISAM.Altrimenti, MyISAM dovrebbe essere sufficiente. 14 set. 112011-09-14 21:13:45

  0

@Dest, ma anche nel sistema intensivo di lettura come è vantaggioso rispetto al blocco a livello di riga? 14 set. 112011-09-14 21:14:38

  0

Anche in un sistema di lettura intuitiva, solo una istruzione DELETE o UPDATE annullerà rapidamente qualunque beneficio abbia MyISAM. 14 set. 112011-09-14 21:16:59

  0

La rimozione di deadlock da parte di @rickjames è il vantaggio del blocco della tabella rispetto al blocco di riga.MyISAM ha altri vantaggi rispetto a innodb, ma questa non è una discussione (innodb ha molti vantaggi rispetto a myisam!) 14 set. 112011-09-14 21:25:24

  0

Questo temo è molto tipico di MySQL dell'organizzazione.Il motivo per cui MyISAM ha un blocco a livello di tabella è semplicemente che non sono stati in grado di implementare il blocco a livello di riga (che è stato lasciato a una terza parte che ci ha dato InnoDB).Ma cercano di farla girare come se volessero sempre.Ricordo che erano soliti dire che non avevi bisogno di chiavi esterne, transazioni, processi memorizzati ecc. Ecc., Quando in realtà non potevano farlo.Prendi la loro documentazione con un pizzico di sale ** LARGE **. 15 set. 112011-09-15 18:28:52


3

Due vantaggi

un.Locking tables è un esempio di brute-force algorithm per risolvere il problema dei deadlock.La forza bruta funziona sempre, per valori adeguati di "opere".

Si dice che Ken Thompson, co-inventore di Unix, abbia emesso l'epigramma "Quando in dubbio, usa la forza bruta".Probabilmente lo aveva inteso come un problema serio, ma la preferenza del kernel originale di Unix per algoritmi semplici, robusti e portatili su quelli "intelligenti" fragili sembra essere stato un fattore significativo nel successo di quel sistema operativo.Come molti altri compromessi nella progettazione del software, la scelta tra la forza bruta e l'intelligenza complessa e finemente calibrata è spesso difficile, e richiede sia un giudizio ingegnoso che un delicato giudizio estetico.

b.Indubbiamente prenderai decisioni diverse man mano che acquisirai un giudizio ingegneristico ed estetico.Ciò non influisce sulla validità di "a" sopra.