1 / 45

Transactions and Locks

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”. Atomicity. Suppose you are Banker and Sally wants to transfer $1000 from checking to savings

etta
Download Presentation

Transactions and Locks

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Transactions and Locks Transactions SQL Server log and “checkpoints” Locks

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

  3. Atomicity • Suppose you are Banker and Sally wants to transfer $1000 from checking to savings • Update checking set balance = balance – 1000 where account = “sally’Update savings set balance = balance + 1000 where account = ‘sally’ • What if first statement executes and then system dies and second statement doesn’t execute?

  4. Atomicity • Ideally, would like way to insure both statements execute – no way • Stuff happens • Almost as good – either both statements execute or neigher.

  5. 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

  6. 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>]

  7. 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>]

  8. 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>]

  9. 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>]

  10. 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

  11. 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

  12. 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

  13. 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.

  14. 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

  15. 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.

  16. Locking Problems • Dirty reads • Non-repeatable reads • Phantoms • Lost updates • Need to correctly set “transaction isolation level” to prevent these problems

  17. 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)

  18. 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

  19. 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 employeesset 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”

  20. 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)

  21. 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)

  22. 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

  23. 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

  24. 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.

  25. 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

  26. 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

  27. 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

  28. Bulk Update Lock • Variation of table lock • Table locked from any other normal activity but still allows multiple bulk insert operations

  29. Lock Compatibility • See table page 438

  30. 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

  31. Determining Locks using Management Studio • Management will show you locks using process ID or object using activity monitor • Figure 14-3

  32. 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

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

  34. 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.

  35. 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.

  36. 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

  37. 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.

  38. 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.

  39. 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.

  40. 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)

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

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

  43. Lowest Transaction Isolation • duh

  44. 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

More Related