Che cos'è l'escalation dei blocchi?


48

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

Risposte:


45

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.


3
Va anche notato che non abbiamo alcun controllo su quando il server si intensifica.

Lo facciamo ora. Si chiama T1211.
Giosuè,

@Joshua, il flag di traccia 1211 viene utilizzato per disabilitare l'escalation dei blocchi. Non c'è modo per noi di dire a SQL Server di intensificare in un momento specifico.
Solo uno studente

10
I blocchi di riga non vengono convertiti in blocchi di pagine, ma direttamente ai blocchi di tabelle.
Manoj Pandey,

È vero quello che affermava Manoj. Dovresti correggere quella parte nella tua risposta per evitare di fuorviare gli utenti meno esperti di SQL Server
NikolaD

21

È 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 hanno 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.


12

SQL Server fa escalation dei blocchi al fine di ridurre l'overhead di memoria , convertendo diverse serrature basso livello a grana fine a blocchi di alto livello 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 è sbagliato.

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 di riga 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 di blocco escalation è di almeno 5000 blocchi e dipende da diversi fattori, una spiegazione dettagliata di blocco escalation è stata menzionata qui in MSL BoL: https://technet.microsoft.com/en-us/library/ms184286(v = SQL.105) aspx


5

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.