=====
CS 325 - Week 14 Lecture 1 - 2021-11-29
=====
=====
TODAY WE WILL
=====
* announcements
* start discussion of Transaction Management - part 2
* prep for next class
* reading:
* DB Reading packet 10 - Transaction Management - part 2
* SQL Reading Packet 8 - Simple reports, part 1 and 2
* Should be working on Homework 10, due Friday, December 3
* Should be working on Project Population Milestone, due 11:59 pm on
SUNDAY, December 5th
=====
three broad categories amongst those for concurrency control:
* locks
* time stamping
* optimistic methods
-----
LOCKS and locking approaches
-----
* PREVENTING undesired inconsistencies during concurrent transactions
by limiting sharing of data;
* transactions must obtain a LOCK for data before they are permitted
to use it (read it OR write it)
and the transaction RELEASES the lock when it is done, so another
transaction can obtain a lock on that data;
* (we are assuming IMPLICIT locks -- managed by the DBMS -- not explicit
locks handled by applications...)
* lock granularity - how much is being locked at once
* make sure you can consider the trade-offs of "larger" versus "smaller"
lock granularity
* amongst the family of locking algorithms,
we'll discuss two classics:
* binary locks
* shared/exclusive locks (also called read/write locks)
-----
Binary locks
-----
* binary lock on a "chunk" has only 2 states, 1 (locked) and 0 (unlocked)
* if a "chunk" has a binary lock whose state is 1, it is locked
for all but the transaction with that lock;
(no other transaction can use that chunk, only the transaction
with the binary lock can do so)
* typically, any other transaction that wants to use that
chunk has to wait
* once the lock is released, another transaction can obtain that lock
* relatively simple, but also relatively restrictive (no concurrent
reads allowed, for example)
-----
Shared/Exclusive locks (read/write locks)
-----
* what if your locks had THREE states instead of two?
What if it could be UNLOCKED,
or SHARED-locked (read-locked),
or EXCLUSIVE-locked (write-locked)
if a "chunk" is UNLOCKED, a transaction can obtain
EITHER a shared-lock or an exclusive-lock;
if a "chunk" is SHARED-locked, a transaction that
wants to read can ALSO get a SHARED-lock on that
chunk,
BUT a transaction that wants an EXCLUSIVE lock
has to WAIT
if a "chunk" is EXCUSIVE-locked, all other transactions
that want either shared- or exclusive- locks have to
wait.
-----
Two-phased locking protocol
-----
* Locking does help achieve the Isolation property.
BUT! locking BY ITSELF does not ensure the Serializability property!
* you need additional protocols added to locking to
also achieve serializability;
* a classic way: the two-phased locking protocol
* a transaction can request the different locks it needs,
BUT! as soon as it releases ANY of those locks,
it cannot obtain any more locks!
the name "two-phased" is because you can imagine the
life-cycle of a transaction thus having 2 "phases",
a period when it can obtain locks -- a "growing" phase,
a period when it cannot obtain locks, but can release them -
a "shrinking" phase
* a very-restrictive (and easier-to-implement) variation
of two-phased locking is for the DBMS to assume the
growing phase is until the transaction issues a COMMIT
or a ROLLBACK command...!
(so none of a transaction's locks are released until
that transaction is either done or about to be rolled
back...!)
-----
a few words about DEADLOCK...
-----
* two (or more) transactions
are each waiting for a resource
the other has locked
-----
strategies for deadlock management
-----
these include:
* timeouts
* there's a system-defined amount
of time a transaction can wait
for a lock -- after that, the
system assumed deadlock MAY have
occurred and it rolls back and
restarts the transaction
* detection
* allow it to occur, detect it,
and rollback one of involved
transactions (and restart it) to
break it
* prevention
* prevents deadlock from occurring
at all
* avoidance
* ...just require a transaction
to obtain ALL its at once!
* ...or just notice something
has gone awry and rollback
a transaction...!
-----
time stamping - an ALTERNATIVE to locking approaches for
concurrency control...!
-----
* when a transaction starts, it is assigned a TIME STAMP
- a value that is unique, it is global, and it is
MONOTONIC (it is always increasing) - a transaction
thst starts later gets a larger time stamp
* all the actions of that transaction are considered
to have that transaction's time stamp;
* here, the DBMS ensures that CONFLICTING operations be
executed in TIME STAMP order
* if the actions of 2 transactions conflict such that
this would NOT be the case, one is rolled back and
restarted (thus receiving a new, larger time stamp)
* MORE on time stamps in Week 14 Asynchronous Material!