it-swarm.it

Che cos'è l'escalation dei blocchi?

Mi è stata posta questa domanda durante un'intervista e non ho avuto risposta. Qualcuno qui può spiegare?

49
Kilhoffer

I blocchi DB possono esistere su righe, pagine o intere tabelle o indici. Quando è in corso una transazione, i blocchi mantenuti dalla transazione occupano risorse. L'escalation dei blocchi è il punto in cui il sistema consolida più blocchi in uno di livello superiore (ad esempio consolidando blocchi di più righe in una pagina o più pagine in un'intera tabella) in genere per recuperare risorse occupate da un numero elevato di blocchi a grana fine.

Lo farà automaticamente, anche se è possibile impostare flag sui tavoli (vedere ALTER TABLE nei libri online) per controllare la politica per l'escalation dei blocchi su quella particolare tabella. In particolare, l'escalation di blocchi prematuri o eccessivamente desiderosi era un problema nelle versioni precedenti di Sybase e SQL Server quando c'erano due processi che scrivevano contemporaneamente righe separate nella stessa pagina. Se torni abbastanza lontano (IIRC SQL Server 6.5) SQL Server non disponeva effettivamente del blocco delle righe ma poteva solo bloccare tabelle o pagine. In questo caso, è possibile che si verifichino conflitti tra inserimenti di record nella stessa pagina; spesso si inserisce un indice cluster sulla tabella in modo che i nuovi inserti siano andati a pagine diverse.

È un metodo per ridurre il sovraccarico del sistema, convertendo molti blocchi a grana fine in meno blocchi a grana grossa. Informazioni più dettagliate sono disponibili qui e qui .

Ad esempio, se si dispone di molti blocchi (di solito centinaia o più) su righe specifiche in una tabella, una volta superato il numero massimo consentito di blocchi, questi potrebbero essere scambiati con un blocco sull'intera tabella.

21
Bill the Lizard

SQL Server blocca l'escalation per ridurre l'overhead di memoria , convertendo diverse serrature di basso livello a grana fine per serrature di alto livello a grana grossa.

  • I blocchi di riga vengono sempre convertiti in blocchi di tabella e
  • Anche i blocchi di pagine vengono convertiti in blocchi di tabelle.

È un mito che i blocchi di riga vengano convertiti in blocchi di pagine , lo stesso menzionato sopra da @ConcernedOfTunbridgeWells è errato.

Se una tabella con pochissimi aggiornamenti di riga, il motore SQL proverà a prendere i blocchi di riga su quelle righe o il blocco di pagine su quelle pagine. Diciamo che ha richiesto Row-Lock. Ma se gli aggiornamenti delle righe aumentano la soglia (~ 5k blocchi), invece di prendere diversi Row-Lock ci vuole un singolo Table-Lock. Pertanto, ciò riduce il sovraccarico di memoria rilasciando diversi blocchi di riga e prendendo un singolo blocco di tabelle, ma aumenta la concorrenza. Lo stesso succede con il blocco della pagina.

La soglia Blocca escalation è di almeno 5000 blocchi e dipende da diversi fattori, una spiegazione dettagliata di Lock Escalation è stata menzionata qui in MSDN BoL: - https://technet.Microsoft.com/en-us/library/ms184286 (v = SQL.105) aspx

12
Manoj Pandey

L'escalation del blocco implica la conversione di un blocco in una modalità più restrittiva. Questo è più spesso visto nei database. Una query potrebbe avere una risorsa bloccata per "condivisa" e inoltrarla a "esclusiva" per eseguire un aggiornamento.

5
Richard T