300 likes | 428 Views
SQL Server Lock Model. Lock Model , o que é ?. Como o SQL Server gere toda a problemática dos locks. Lock Model , porquê ?. Os locks , em conjunto com os índices, são as 2 coisas que mais contribuem para escalabilidade do SQL Server, ou para a falta dela.
E N D
LockModel, o que é ? • Como o SQL Server gere toda a problemática dos locks
LockModel, porquê ? • Os locks, em conjunto com os índices, são as 2 coisas que mais contribuem para escalabilidade do SQL Server, ou para a falta dela. • Conhecer o lockmodel é uma grande ajuda, nos despiste de problemas “estranhos”, como por exemplo a aplicação estar lenta e o CPU, IO não ter utilização significativa ou ainda um determinado job às vezes não terminar.
Problemática dos locks Problemas “estranhos” tps Escalabilidade “NonrepeatableReads” Integridade carga “Phantoms” Concurrência Duração “Dirty Read”
Propriedades das transacções ACID • A)tomicity (tudo ou nada) • C)onsistency • I)solation (grau de independência) • D)urability
Uma transação BEGIN TRY BEGIN TRANSACTION T1 INSERT INTO dbo.t1 SELECT p.ProductID FROM Production.Product AS p INSERT INTO dbo.t1 VALUES (1) COMMIT TRANSACTION T1 END TRY BEGIN CATCH ROLLBACK TRANSACTION T1 PRINT 'An error occurred' RETURN END CATCH
Granularidade dos Locks • Row (RID) • Key (KEY) • Page (PAG) • Extent (EXT) • Table (TAB) • Database (DB)
Background information • P:Qual a dimensão máxima de uma row ? • R:8060 bytes • P:Qual é a dimensão de uma página ? • R:8Kb • P:Qual é a dimensão de um extent ? • R:8 Páginas, 64 Kb
Row : até 8Kb (8060 Bytes) Page : 8Kb (8192 Bytes) Extent (8 pages) 8 x 8Kb =64Kb Mixedexents (8 objectos)
Tipos de Lock • Shared (S) • Update (U) • Exclusive (X) • IntentShared (IS) • Intent Exclusive (IX) • ShemaModification (Sch-M) • ShemaStability (Sch-S) • RangeS-S • Etc..
Gestão da concorrência:a) Níveis de Isolamento • ReadUncomited • ReadCommitted • ReadCommitedSnapshot • RepeatableRead • Serialzable • Snapshot b) LockHints
P: Como definir o isolationlevel ? • R: SET TRANSACTION ISOLATION LEVEL R: DBCC USEROPTIONS P: Como saber qual oisolationlevel ?
SET TRANSACTION ISOLATION LEVEL • SET TRANSACTION ISOLATION LEVEL • { • READ UNCOMMITTED | • READ COMMITTED | • REPEATABLE READ | • SNAPSHOT | • SERIALIZABLE • } • Nota : Se READ_COMMITTED_SNAPSHOT está ON, O SQL Server usa “row versioning” (tempdb).
Modo de compatibilidade Sim Grant Lock Compatível ? Não WaitSET LOCK_TIMEOUT timeout_period @@LOCK_TIMEOUT S > S > Grant X > S > Wait
Quais os locks na alteração e porquê • P: S ⇒ X ou S ⇒ U ⇒ X ? • R: S ⇒ U ⇒ X
Tipos de Locks especiais • IntentLock • Latches
Ferramentas • sp_lock • SQL Server ManagementStudio • Profiler • Performance counter
sp_lock S,X,U,etc
Recomendações • Manter transacções pequenas evitando operações “caras”. • Optimizar queries usando índices. • Evitar perder controlo no âmbito da transacção. • Monitorizar “longrunning processes”. • Investir no tratamento de erros ou usar SET XACT_ABORT ON paraevitarumatransacçãoficaraberta no surgimento de umacondição de erro. • Usar o nível de isolamento o maisbaixopossível,
Problemática dos locks Problemas “estranhos” sp_lock tps EscalabilidadeBaixar isolation level “NonrepeatableReads” Repeatableread Integridade carga “Phantoms” Serializable Concurrência Baixar isolation level Duração Lock timout Controloerros SET XACT_ABORT ON “Dirty Read” Read commited Repetable reads Serializable
Bibliografia • Hand on SQL 2000 Troubleshooting locking and blocking (net impress) • Inside Microsoft SQL Server 2005. TheStorageEngine (microsoft) • Microsoft SQL Server 2008 Internals (microsoft) • SQL Server 2008 Query Performance TuningDistilled (apress)