serratura fila
Un blocco di riga è il più basso livello di granularità di bloccaggio possibile in SQL Server. Ciò significa che una o più righe specifiche verranno bloccate e le righe adiacenti sono ancora disponibili per il blocco da query simultanee.
Pagina Blocco
Un blocco di pagina in SQL Server si blocca 8K vale la pena di dati anche quando la query ha bisogno solo di 10 byte dalla pagina. Quindi la tua query bloccherà i dati aggiuntivi che non richiedi nella tua query.
HOBt Blocco
Quando una tabella è partizionata con "SQL Server Table partitioning" è possibile una partizione singola verrà bloccato (HOBt acronimo di heap o B-Tree)
Nota: Blocco escalation ai blocchi HOBT è disabilitato per impostazione predefinita. eseguire ALTER TABLE MyTable SET (LOCK_ESCALATION = AUTO)
per abilitare l'escalation del blocco HOBT.
Tabella blocco Bloccare
Una tabella si blocca la tabella completa.
Quali sono le pagine di dati
Microsoft SQL Server organizza tutti i suoi dati in "pagine di dati" che può contenere 8K vale la pena di dati. Ciò significa che per qualsiasi accesso ai dati nelle informazioni di SQL Server 8K verrà letto.
pagine di dati possono contenere solo le informazioni da una tabella e il layout di una pagina è well documented on MSDN
Il fatto che SQL Server sarà sempre leggere una pagina di dati completo anche ti dà un idea del perché si preferisce utilizzare i blocchi a livello di pagina . L'implicazione dei blocchi a livello di pagina è che potresti bloccare molti più dati di quanto pensi.
Ad esempio, si supponga di avere una tabella con una dimensione record totale di 1024 byte con un indice cluster sul campo ID
.Quando eseguiamo la seguente query: SELECT * from MyTable (xlock) where ID = 123
, non solo quel record verrà bloccato, ma (a seconda del riempimento della pagina) verranno bloccati al massimo 3 record aggiuntivi.
Quando sono questi blocchi acquisiti
Una query verrà analizzata dal regolatore query e dei blocchi necessari sarà determinata e richiesto dal gestore di blocco. SQL Server proverà a creare un equilibrio tra prestazioni e conflitto per determinare la strategia di blocco.
SQL Server segue inoltre un sistema di "escalazione di blocco" che riduce la granularità del blocco quando vengono acquisiti più di 5000 blocchi di un determinato tipo. Vedere this article on lock escalation per ulteriori informazioni.
Questo comportamento può essere ottimizzato usando Hint di blocco con lo stress sul suggerimenti, in una query è possibile specificare per ogni tabella che tipo di serrature si preferisce. SQL Server proverà ad onorare la tua richiesta, ma applicherà comunque l'escalation dei blocchi.
Questo è un argomento ampio, quindi è difficile rispondere a domande molto generali senza scrivere risposte molto lunghe. Ma ci sono già molte informazioni a riguardo nella documentazione: http://msdn.microsoft.com/en-us/library/ms190615.aspx Ti suggerisco di iniziare rivedendola, poi torna indietro e fai domande più specifiche su singoli punti che non sono chiari. E poiché questo è un sito di programmazione, potresti ottenere risposte "concettuali" migliori su dba.stackechange.com. – Pondlife
Una ** pagina ** è un blocco fisso di 8K di memoria su disco che contiene dati e indici e tutto il resto. È l'elemento di archiviazione più fondamentale di SQL Server. I dati e gli indici vengono sempre caricati nella memoria di SQL Server in pagine ** complete ** (anche se si desidera leggere un singolo byte, si ottiene una pagina 8k) –
Per i blocchi: vedere [Introduzione al blocco di SQL Server] (http: //www.sqlteam.com/article/introduction-to-locking-in-sql-server) e un gazillion di articoli e post sul blocco (solo google o bing per loro!) –