transactions and locks transactions sql server log and “checkpoints” locks

45
Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Post on 19-Dec-2015

233 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Transactions and Locks

Transactions

SQL Server log and “checkpoints”

Locks

Page 2: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Transactions

• Atomicity – smallest grouping of one or more statement that should be considered “all or nothing”

Page 3: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Atomicity• Suppose you are Banker and Sally wants to

transfer $1000 from checking to savings• Update checking

set balance = balance – 1000where account = “sally’

Update savingsset balance = balance + 1000where account = ‘sally’

• What if first statement executes and then system dies and second statement doesn’t execute?

Page 4: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Atomicity

• Ideally, would like way to insure both statements execute – no way– Stuff happens

• Almost as good – either both statements execute or neigher.

Page 5: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Transaction• Begin transaction

– Set starting point

• Commit transaction– Make transaction permanent, irreversible part

of database

• Rollback transaction– “forget that it every happened”

• Save transaction– Establish specific marker allowing us to do

only a partial rollback

Page 6: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Begin tran

• Everything beyond this point that is not eventually committed will be forgotten as far as database is concerned

• BEGIN TRAN[saction] [<transaction name>| <@transaction

variable>]

Page 7: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Commit tran

• End of a completed transaction. At the point you issue commit, transaction is considered to be “durable” – transaction is permanent and will last even if you have a system failure (as long as you have backup) – can’t undo

• COMMIT TRAN[saction] [<transaction name>| <@transaction variable>]

Page 8: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Rollback tran

• Undo to the beginning of the transaction– (Exception is use of save points)

• ROLLBACK TRAN[saction][<transaction name>|<save point name><@transaction variable>|<@savepoint

variable>]

Page 9: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Save Tran• Bookmark or named place marker in

transaction– You can rollback to an exact point in the code

rather than just rollback to beginning of transaction.

– Once any rollback occurs, ALL SAVEPOINTS are gone

– Save tran is not for beginners

• SAVE TRAN[saction][<save point name> |<@save point variable>]

Page 10: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

How DB Actually Works• Figure 14-1• Activity “logged” to transaction log

– Data in your database is combination of data in physical database file(s) but also transactions that have been committed to log since last CHECKPOINT

• Checkpoint – periodic operation that forces all “dirty” pages for the database currently in use to be actually written to memory.

• Dirty pages – log or data pages that have been modified after they were read into cache but the modifications have not been written to disk.

• All this happens automatically in background

Page 11: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

When checkpoints issued• Need to read data into cache that is already full

– yet another reason for still more main memory

• CHECKPOINT command• At normal shutdown of server

– Unless WITH NOWAIT option used

• When SIMPLE RECOVERY option used and log become 70 percent full

• When amount of data in log since last checkpoint (active portion) exceeds size that server could recover in amount of time specified in recovery interval option

Page 12: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

FAILURE and RECOVERY

• Recover happens every time SQL Server starts up.– SQL server applies every committed

transaction in log since last checkpoint to database file(s).

– Any changes to log that are not committed are rolled back

– See figure 14-2

Page 13: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Locks and Concurrency

• Concurrency – two or more users each trying to interact with the same object at the same time.– Concurrency can be critical to the performance of

your system– The foundation of dealing with concurrency is the

process of locking

• Locks are a mechanism for preventing a process from performing an action on an object that conflicts with something already being done on that object.

Page 14: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Locks

• Can have many simultaneous reads on an object.

• Typically only one write on an object that the same time.

• Process can request “read only access” or “write” access

Page 15: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Lock Manager

• If initial request for an object is read only, the object is locked for writing until read request is completed. Other read requests are allowed.

• If write request and no current read requests, then write access granted and everything locked out until write is completed.

Page 16: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Locking Problems

• Dirty reads

• Non-repeatable reads

• Phantoms

• Lost updates

• Need to correctly set “transaction isolation level” to prevent these problems

Page 17: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Dirty Reads

• Consider when a transaction reads a record that is part of another transaction that isn’t completed yet.– What happens if transaction rolls back?

• See table pg 432

• This situation cannot happen if you are using SQL serve default for transaction isolation level (called READ COMMITED)

Page 18: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Non-Repeatable Reads• A non-repeatable read occurs when you read

the same record twice in a transaction, and a separate transaction alters that data in the interim.– Easy to confuse with dirty read– See table pg 433

• Can prevent in two ways– Check constraint and monitor for 547 error(?)

• Reactive approach – check if problem has happened

– Set our isolation level to be “repeatable read” or “serializable”

• This could cause as many problems as it fixes – but still an option

Page 19: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Phantoms• Records that appear “mysteriously, as if unaffected by

an update or delete statement that you have already issued– Can happen quite legitimately in normal course of operating

your system• Example – update to new minimum wage:• update employees

set hourlyRate = 6.75 where hourlyRate <6.75alter table employeesadd ckWage Check (HourlyRate >=6.75)– Ckwage may fail – (Someone ran an insert while your update was running)– Very rare– Cure by setting transaction isolation level to “serializable”

Page 20: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Lost Updates

• Update is successfully written to database but then is overwritten by another transaction.– Two transactions read a record– First makes change– Second make change, losing first update

• (ATM example or pg 435)

Page 21: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Lockable Resources• Database – entire database can be locked• Table – entire table can be locked, including

ALL data-related objects including ALL data rows, and ALL keys in ALL indexes

• Extent – entire extent (data or index) is locked (8 pages)

• Page – all data or index keys on that page• Key – lock on particular or series of keys• Row – technically row identifier (RID – internal

SQL server construct)

Page 22: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Lock Escalation and Lock Effect on Performance

• Finer granularity (e.g., row vs. table) is good, but as more and more items locked, overhead becomes too much– Longer lock in place, higher probability that someone

else will want locked item

• Lock Escalation - when number of locked being maintained reaches threshold, lock is escalated to next higher level– Number of locks is critical, not number of users– One can single handedly lock a table with massive

update, or even lock multiple tables

Page 23: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Lock Modes• As important as what-is-being-locked is LOCK

MODE• Shared locks -Most basic lock

– Used for read-only access – allows others to read but not update

• Exclusive Locks – no one else can read or write or lock

• Update lock- hybred between shared and exclusive– Need shared lock until validate “where clause” and

then need exclusive lock on rows or table might be faster) that are to be altered.

– Avoids one for of deadlock

Page 24: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Deadlock

• Suppose two update queries running in shared mode.– Query A completes query and is ready for physical

update – wants to exclusive to exclusive lock, but can’t as query B still has shared lock

– Query B finishes query and now needs to do physical update, but can’t as query A still has shared.

• IMPASSE!!

• Update lock solves this as it prevents other update locks from being established.

Page 25: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Intent Locks

• Placeholder– You have a lock on a row, when prevents

someone locking the containing page, extent, table.

– Only need to examine intent locks at table level and not check every row or page

Page 26: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Intent Locks

• Intent shared lock– Shared lock has or is going to be established

at some lower point in hierarchy• Applies only to pages and tables

• Intent exclusive lock

• Shared with intent exclusive lock– Intention to establish shared lock at some

lower level that will eventually become modify lock

Page 27: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Schema Locks

• Schema modification lock (sch-M)– No query or other CREATE, ALTER, DROP

statements can execute during duration of this lock

• Schema stability lock (SCH-S)– Prevents SCH-M

Page 28: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Bulk Update Lock

• Variation of table lock– Table locked from any other normal activity

but still allows multiple bulk insert operations

Page 29: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Lock Compatibility

• See table page 438

Page 30: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Optimizer Hints

• Locks generally automatic and should be kept that way – however …– Are ways to optimize– ADVANCED TOPIC– Often abused by “experienced” sql server

developers

Page 31: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Determining Locks using Management Studio

• Management will show you locks using process ID or object using activity monitor

• Figure 14-3

Page 32: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Isolation Level• Transactions and locks are inextricably linked

• By default, and lock that is data modification related will, once created, be held for the duration of the transaction.– LONG transactions will lock out other processes

• FOUR different isolation levels you can set:– Read committed (default)– Read uncommitted– Repeatable read– Serializable

Page 33: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

syntax

• SET TRANSACTION ISOLATION LEVEL<read committed | read uncommitted |repeatable read |seriablizable>

Page 34: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

READ COMMITTED• Default• Any shared locks you create will be

automatically released as soon as the statement that created them is complete.– Sql server does not wait until the end of the

transaction

• Actions (update, delete, insert) - lock will be held for the duration of the transaction, in case you need to rollback.

• Dirty reads prevented, but non-repeatable reads and phantoms can still occur.

Page 35: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Read Uncommitted

• Most dangerous of all isolation levels, but has highest performance in terms of speed.

• Tells SQL server not to set locks and not to honor and locks.

• Use with reporting - Management wants to run regular reports that preclude data entry because of locks held by reports– Run reports with read uncommitted – but exact values

are probably meaningless– Get same results by using NOLOCK optimizer hint

with your query – but using isolation level is simplier for entire report.

Page 36: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Repeatable Read

• Extra level of concurrency protection by preventing both dirty reads and non-repeatable reads– but holding shared locks until end of

transaction can hurt productivity

Page 37: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Serializable

• Any update, delete, or insert in a transaction must not “meet” any where clause in that transaction.

• Prevents all forms of concurrency issues except for a lost update.– But concurrency and consistency are opposites – this

can REALLY SLOW THINGS DOWN

• Stick to default unless really important reasons for doing otherwise.

Page 38: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks
Page 39: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Deadlocks (“A 1205”)

• Error number 1205

• One lock can do what it needs in order to clear because a second lock is holding that resource and vice versa (could be more than two, or twenty…)

• SQL server chooses a “deadlock victim” – that transaction is rollback and is notified of what happened with a 1205.

Page 40: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Detecting a Deadlock

• Every 5 seconds sql server checks all current transactions for what locks they are waiting on but haven’t yet been granted.

• If it rechecks after another 5 seconds and finds a previous lock request still pending, it recursively checks all open transactions for a circular chain of lock requests

• If circular chain found, then deadlock victim chosen.

Page 41: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Avoiding Deadlocks• Rules of thumb to reduce/eliminate deadlocks:

– Use your objects in the same order– Keep transactions as short as possible and in one

batch– Use lowest transaction isolation level necessary– DO NOT allow open-ended interruptions (user

interactions!, batch separations) within same transaction

– In controlled environments, use BOUND CONNECTIONS (see below)

Page 42: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Same Objects, Same Order

• This rule easy to implement with little cost and generates good results.– Every query, procedure, trigger – Example page 444

Page 43: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Short Transactions

• The longer a transaction is open, the more it touches, and the higher the probability of locking something else out.

Page 44: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

Lowest Transaction Isolation

• duh

Page 45: Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

No Open-Ended Transactions

• Don’t hold locks while waiting for user Input! (example pg 445)– Someone in service department (or some boss who

insists) wants to use an update screen to view data– Then goes on to view a work order– Then forgets and goes to lunch – (I have seen this happen!)

• Not just user input, but any process that may have an open ended wait