cơ chế khóa

Upload: hoang-linh

Post on 15-Jul-2015

369 views

Category:

Documents


1 download

TRANSCRIPT

C Ch Kha (Lock Mechanisms)1 Tng quan v c ch khaa s ngi dng c s d liu s dng mt s hnh thc ca kha d liu(data locking) gii quyt cc vn lin quan n tranh chp ng thi, tnh nht qun v ton vn d liu. Kha l c ch ngn chn s tc ng tng tc gia cc giao tc khi chng truy cp vo cng mt ti nguyn. C th chia ti nguyn lm 2 loi chnh: i tng d liu m ngi dng s dng nh Tables v Rows. H thng i tng khng hin th cho ngi dng, nh d liu chia s trong b nh v cc d liu trong t in.

2

How Oracle Locks Data

Trong mi trng hp Oracle t ng nhn bit c kha cn thit khi thc hin cc cu lnh SQL, v vy ngi dng khng cn quan tm n n. Oracle t ng s dng mc thp nht p dng cho d liu trnh tnh hung truy xut ng thi, v an ton d liu. Oracle cng cho php ty chnh kha d liu. Lock trong Oracle ch yu c 3 loi chnh: Lock DML locks (data locks) DDL locks (dictionary locks) Internal locks and latches Din t Bo v d liu, kha trn bng v hng d liu. Bo v cu trc d liu, nh ngha ca cc table v views. Bo v cu trc c s d liu (v d nh datafiles), n c thc hin hon ton t ng.

2.1 Explicit (Manual) Data Locking Oracle lun lun t ng cp kha m bo tranh chp d liu ng thi, ton vn d liu v ton vn cp truy vn. Tuy nhin, bn c th ghi ln cc kha Oracle mc nh. Thay vo l cc kha khc c ch trong cc trng hp sau: ng dng i hi tnh nht qun d liu cp giao tc, c lp li. Ni cch khc, cc truy vn ca h phi sinh ra cc d liu ph hp trong sut thi gian ca

giao dch, v khng phn nh n cc giao dch khc. Bn c th t c mc nht qun bng cch s dng kha r rng, giao tc ch c, giao tc tun t, hoc cc kha np chng. ng dng i hi mt giao tc c th truy cp c quyn cho mt ngun ti nguyn giao tc khng phi ch cc giao tc khc hon thnh. C th np chng kha cp giao tc, hoc phin lm vic (session). 1. Ti cp giao tc, giao tc bao gm cc cu lnh SQL theo chun sau: SET TRANSACTION ISOLATION LEVEL statement LOCK TABLE statement (statement c th l Table, views) SELECT .. FOR UPDATE statement Nhng kha c cp cho nhng cu lnh ny s c tr li sau khi m giao tc commits hay rolls back. 2. Ti cp phin lm vic, mt phin lm c th thit lp yu cu cp kha mc giao tc vi ALTER SESSION statement. 2.2 Oracle Lock Management Services Vi cc dch v qun l kha ca Oracle, nh pht trin ng dng c th thm vo cc cu lnh vo trong khi PL/SQL nh: Yu cu mt kha theo kiu chi tit. a ra mt tn kha duy nht nhn bit trong cc Procedure khc, trong cng mt Instance hoc cc Instance khc. Thay i kiu kha. Tr li kha. Kha ca ngi s dng cng ging nh ca Oracle, n cng bao gm tt c cc chc nng nh kha ca Oracle, bao gm ca pht hin deadlock. Kha ca ngi s dng khng bao gi xung t vi kha ca Oracle, v chng c gn tin t UL. Dch v qun l kha ca Oracle c sn thng qua cc procedure trong gi DBMS_LOCK. 2.2.1.1 Modes of Locking Oracle s dng 2 m hnh kha trong c s d liu a ngi dng: Ch kha c quyn ngn chn cc ngun ti nguyn c quan h khng c chia s. Ch kha ny l sa i d liu. Giao tc u tin kha c quyn ngun ti nguyn l giao tc duy nht c th thay i cc ngun ti nguyn cho n khi kha c quyn c tr li cho h qun tr.

Ch kha chi s cho php ti nguyn c quan h c chia s, ty thuc vo cc hot ng lin quan. D liu ang c nhiu ngi dng c cng c th chia s. Gi kha chia s ngn chn truy xut ng thi ca hnh ng ghi(nhng hnh ng cn kha c quyn). Mt s giao tc c th c kha chia s trn cng mt s ngun ti nguyn. 2.3 Lock Duration Tt c kha c cp bi cu truy vn ca mt giao tc s gi kha trong sut thi gian ca giao tc, phng nh hng c th c d liu rc, b lost updates, hay cc hot ng xu t cc giao tc ng thi. Cc thay i c thc hin bi cc cu lnh SQL ca giao tc c kh nng thc hin khi m cc giao tc bt u c committed. Oracle gii phng tt c cc kha c cp li bi nhng truy vn trong giao tc khi bn commit hoc thc hin li giao tc.Oracle cng gii phng cc kha c cp sau khi savepoint khi roll back li savepoint.Tuy nhin, cc giao dch khng ch i cho cc ti nguyn b kha trc , m c th cc ngun ti nguyn khc ang c kh nng cp kha. Vic ch i ca giao tc s kt thc khi m giao tc ang gi kha commit hoc roll back hon tt. 2.4 Data Lock Conversion Versus Lock Escalation Giao tc nm gi kha c quyn cho tt c cc hng c insert, update, hoc b deleted trong giao tc. Bi v kha hng l mc gii hn cao nht, khng th chuyn i kha khi yu cu hay thc hin. Oracle t ng chuyn kha bng t mc gii hn thp sang mc gii hn thch hp cao hn. V d, gi s mt giao tc s dng lnh SELECT vi mnh FOR UPDATE kha hng trn bng. V kt qu l, n yu cu kha c quyn trn hng v hng chia s kha bng cho bng. Nu giao tc sau cp nht 1 hay nhiu hng b kha, hng chia s kha bng c t ng chuyn sang kha hng c quyn. Kha leo thang (Lock escalation) xy ra khi nhiu kha c t chc mc mn (granularity)(v d, cp hng) v c s d liu s tng mc mn ln(v d, cp bng). V d, nu mt ngi s dng kha nhiu dng trn bng, mt s c s d liu t ng tng mc kha t kha dng ln kha bng. Nh vy s lng kha gim xung, nhng gii hn s vng b kha th tng ln (c nhiu dng khng cn kha cng b kha). Oracle khng bao gi kha leo thang. Kha leo thang lm tng ng k kh nng deadlocks. Hy tng tng cc tnh hung ni m h thng ang c gng leo thang kha

thay cho giao tc T1, nhng khng th bi cc kha ang gi bi T2 cng yu cu kha leo thang trn cng mt d liu trc khi n tin hnh. 2.5 Table Locks Bng cp kha ch yu c s dng kim sot cc hot ng DDL ng thi, chng hn nh ngn chn mt bng b drop trong mt hot ng DML . Khi mt cu lnh DDL hoc DML thao tc trn bng, mt kha bng c cp. Kha bng khng nh hng ng thi ti cc hot ng ng thi DML. i vi cc phn vng bng, kha bng c th c cp cho c bng v mc subpartition. Mt giao tc yu cu cp kha bng khi mt bng thay i trong nhng cu lnh sau: Insert, Update, Delete, Select with for update, v lock table. Nhng hot ng DML yu cu kha bng cho 2 mc ch: d tr hot ng truy cp vo bng i din cho mt giao tc v ngn chn hot ng DDL s xung t vi cc giao tc Bt k kha bng no ngn chn vic mua li mt kha DDL c quyn trn cng mt bng v do ngn nga cc hot ng DDL i hi phi c kha , v d mt bng c th khng c thay i hoc gim nu mt giao tc khng b giam kha bng cho n. Mt kha bng c th c gi bi mt s kiu: chia s hng(RS), c quyn hng(RX), chia s(S), Chia s hng c quyn(SRX), c quyn(X). Gii hn ca mt ch kha bng xc nh cc phng thc m cc kha bng khc trn cng mt bng c th cp v gi c.

RS: row share

RX: row exclusive S: share SRX: share row exclusive X: exclusive

*Yes: Nu khng c kha hng xung t bi cc giao tc khc. 2.5.1 Row Share Table Locks (RS) Kha bng chia s dng ( cng i khi c gi l mt kha bng subshare, SS) ch ra rng giao tc gi cc kha trn bng b kha dng trong bng v d nh cp nht chng. Mt kha bng chia s dng c t ng cp cho bng khi mt trong cc cu lnh SQL sau c chy:SELECT ... FROM table ... FOR UPDATE OF ... ; LOCK TABLE table IN ROW SHARE MODE;

Mt chia s kha dng ca bng l ch t hn ch nht trong kha bng, ch c mc tranh chp ng thi cao nht ca mt bng. Hot ng c php: Kha chia s dng ca bng c cp bi giao tc cho php cc giao tc khc truy vn, insert, update, delete, hoc kha dng ng thi cng thi im. V vy, cc giao tc khc c th c c chia s hng, hng c quyn (row exclusive), chia s (share), chia s dng c quyn (share row exclusive) cho cng mt bng. Hot ng b cm: Kha chia s dng ca bng c gi bi mt giao tc s ngn chn cc giao tc khc vi nhng truy cp ghi d liu c quyn cng mt bng bng cch s dng khai bo sau:LOCK TABLE table IN EXCLUSIVE MODE;

2.5.2 Row Exclusive Table Locks (RX) Mt kha bng c quyn hng (hay cn gi l subexclusive table lock, SX) thng ch ra rng cc giao tc ang gi kha lm 1 hay nhiu update ln dng trong bng. Mi kha bng c quyn dng c cp t ng cho bng b thay i bi mt trong cc cu lnh sau:INSERT INTO table ... ; UPDATE table ... ; DELETE FROM table ... ;

LOCK TABLE table IN ROW EXCLUSIVE MODE;

Mt kha bng c quyn hng th gii hn hn kha chia s dng. Hot ng c php: Mi kha bng c quyn hng c gi bi mt giao tc cho php cc giao tc khc truy vn, insert, update, delete, hay kha dng ng thi trn cng mt bng. V vy, kha bng c quyn dng cho php nhiu giao tc c kha c quyn dng v chia s dng trn cng mt bng. Hot ng b cm: Mt kha bng c quyn hng c gi bi 1 giao tc s ngn chn cc giao tc khc t thay i kha ca bng cho vic c hay ghi d liu. V vy, cc giao tc khc khng th kha ng thi bng cc cu lnh sau y:LOCK TABLE table IN SHARE MODE; LOCK TABLE table IN SHARE EXCLUSIVE MODE; LOCK TABLE table IN EXCLUSIVE MODE;

2.5.3 Share Table Locks (S) Mt kha chia s bng c cp t ng cho bng thc hin cu lnh SQL sau:LOCK TABLE table IN SHARE MODE;

Hot ng c php: Mt kha chia s bng gi bi mt giao tc cho php cc giao tc khc ch truy vn n bng, v kha mt s dng c c t chi tit vi cc lnh SELECT FOR UPDATE, hay lnh LOCK TABLE IN SHARE MODE. Khng c Update bi cc giao tc khc, nhiu giao tc c th gi kha trong cng thi im. Trong trng hp ny, khng giao tc no c th cp nht bng(ngay c khi giao tc ang gi kha hng, l kt qu ca cu lnh select hay for update). V vy, mt giao tc chia s kha bng c th cp nht bng bng khi m khng c mt giao tc khc ang chia s bng trn cng mt bng. Hot ng b cm: Mt kha chia s bng gi bi mt giao tc ngn cc giao tc khc thay i trn cng mt bng v cm cc lnh sau:LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE; LOCK TABLE table IN EXCLUSIVE MODE; LOCK TABLE table IN ROW EXCLUSIVE MODE;

2.5.4 Share Row Exclusive Table Locks (SRX) Mt kha bng c qun chia s hng (hay cn gi l share-subexclusive table lock, SSX) b hn ch hn so vi kha chia s bng. Mt kha bng c quyn chia s hng c cp cho bng nh sau:LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE;

Hot ng c php: Ch mt giao tc ti mt thi im c th c c mt kha bng c quyn chia s hng cho bng. Khi kha ny c gi bi mt giao tc, n cho php cc giao tc khc c truy vn, hay kha chi tit ln tng dng vi cc lnh SELECT vi ng cnh FOR UPDATE, nhng khng c update ln bng. Hot ng b cm: Mt kha bng c quyn chia s hng gi bi mt giao tc ngn chn cc giao tc khc ginh kha thay i trn cng mt bng. Kha bng c quyn chia s dng cng cm cc giao tc ginh vic chia s, chia s hng c quyn, kha bng c quyn, v giao tc khc thc hin cc cu lnh sau y:LOCK TABLE table IN SHARE MODE; LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE; LOCK TABLE table IN ROW EXCLUSIVE MODE; LOCK TABLE table IN EXCLUSIVE MODE;

2.5.5 Exclusive Table Locks (X) Mt kha bng c quyn l kiu gii hn cao nht trong cc loi kha bng, cho php giao tc gi kha c quyn ghi d liu ln Table. Mt kha c quyn c cp vi cu lnh sau:LOCK TABLE table IN EXCLUSIVE MODE;

Hnh ng cho php: Ch mt giao tc c th gi kha bng c quyn. Kha bng c quyn ch cho php cc giao tc khc truy vn d liu ca bng. Hnh ng b cm: Mt giao tc gi kha bng c quyn cm cc giao tc khc thc hin bt k cu lnh DML hay thay th kiu kha trn bng. 2.6 DML Locks Automatically Acquired for DML Statements chng trc gii thch s khc nhau ca cc kiu kha d liu, v cch chng b gi, chng c th c cp khi no, v chng cm ci g. Chng tip theo m t tng quan Oracle t ng kha d liu nh th no khi c cc hot ng DML.

X: exclusive RX: row exclusive RS: row share S: share SRX: share row exclusive

2.6.1 Default Locking for Queries Truy vn l nhng cu lnh SQL t c nguy c gy cn tr vi nhng cu lnh SQL khc nht, bi v chng ch c d liu. Cc thao tc nh Insert, Update, Delete c th hiu l mt phn ca cc cu lnh SQL. Truy vn bao gm cc kiu cu lnh sau: SELECT INSERT SELECT ; UPDATE ; DELETE ; Truy vn khng bao gm cu lnh kiu nh: SELECT FOR UPDATE OF ; Nhng c im sau y l ng ca tt c truy vn, khi chng khng s dng mnh FOR UPDATE: Mt truy vn khng yu cu kha d liu. V vy, nhng giao tc khc c th truy vn v update mt bng ang truy vn, k c dng bt k ang c truy vn. Bi v cc truy vn m khng c mnh FOR UPDATE khng yu cu cp kha block cc hot ng khc, cc truy vn nh vy thng c gi trong Oracle l nonblocking queries.

Mi truy vn khng i bt k kha d liu no c tr, n lun lun c x l. (Truy vn c th i d liu b kha trong mt s trng hp c bit khi ang ch giao tc phn phi). 2.6.2 Default Locking for INSERT, UPDATE, DELETE, and SELECT ... FOR UPDATE c trng kha ca cc lnh INSERT, UPDATE, DELETE v SELECT FOR UPDATE l: Giao tc cha cc lnh DML c kha hng c quyn, kha trn dng b thay i bi cu lnh. Cc giao tc khc khng th cp nht hay xa dng b kha cho n khi giao tc ang kha commits hoc rollback. Giao tc cha cc lnh DML khng cn c cp kha hng trn bt c hng no c chn bi mt subquery hay mt truy vn ngm, v d nh trong mnh WHERE. Mt Subquery hay truy vn ngm trong cu lnh DML l m bo thng nht vi bt u truy vn. Mt truy vn trong giao tc c th thy s thay i bi cu lnh DML trc trong cng mt giao tc, nhng khng th thy s thay i trong cc giao tc khc nu giao tc bt u sau giao tc ca chnh n (truy vn). Ngoi ra cc kha hng c quyn cn thit, mt giao tc c cha cu lnh DML c cp t nht mt kha c quyn trn dng ni m cc dng ny b nh hng. Nu giao tc cha chng ang gi mt kha SHARE, hay SHARE ROW EXCLUSIVE, hoc exclusive table cho bng, th kha bng c quyn trn hng khng c cp. Nu giao tc ang cha gi mt kha bng chia s dng, th Oracle t ng chuyn kha ny thnh kha bng c quyn dng. 2.7 DDL Locks Mt kha t in d liu bo v nh ngha ca i tng schema trong khi i tng ang hot ng hoc c gi bng mt hot ng DDL. Nn nh rng mt lnh DDL ngm nh l c commits trong giao tc ca n. V d, gi s rng mt user to mt procedure.Thay cho cc giao tc trn mt ngi s dng, Oracle t ng cp kha DDL cho tt c cc i tng schema c tham chiu trong proccedure nh ngha n. Cc kha DDL ngn chn cc th tc khc can thip lm thay i hoc mt i tng trc khi th tc c hon tt. Oracle cp kha t in t ng trn cc giao tc DDL yu cu n. Ngi dng c th khng yu cu mt cch r rng kha DDL. Ch c lc n b sa i hay c tham chiu ti l b kha trong sut qu trnh procedure din ra. Ton b d liu t in khng bao gi b kha.

Kha DDL ri vo mt trong 3 trng hp: exclusive DDL Lock, share DDL locks, v breakable parse locks. 2.7.1 Exclusive DDL Locks Hu ht cc hot ng DDL, tr nhng hot ng c lit k trong phn Share DDL Locks yu cu cp kha c quyn DD: cho mt ti nguyn, ngn chn s ph hoi vi cc hot ng DDL khc, nhng hot ng c th sa i hoc tham chiu ti i tng trn cng mt lc . V d, hot ng DROP Table l khng c php trong khi hot ng ALTER TABLE ang thm mt ct vo n v ngc li. Trong lc cp li mt kha DDL c quyn, nu mt kha DDL khc ang c gi trn i tng schema ca hot ng khc, vic cp li kha s ch cho n khi kha DDL c c tr v sau mi c tin hnh. Hot ng DDL lun cp kha DML trn i tng schema b thay i. 2.7.2 Share DDL Locks Mt s hot ng DDL yu cu chia s kha DDL cho ti nguyn cm, ngn chn s can thip, ph hoi ca cc hot ng xung t DDL, Nhng cho php cc hot ng DDL tng t xy ra ng thi. V d, khi th tc CREATE PROCEDURE c chy, cc giao tc cha n cp kha SHARE DDL LOCK cho tt c cc bng c tham chiu. Cc giao tc khc c th to cc Procedure mt cch ng thi cng tham chiu ti cc bng ang c tham chiu ti, nhng khng c c mt giao tc no c kha c quyn trn bt k bng no c tham chiu. Khng giao tc no c alter hay drop mt bng ang c tham chiu. Kt qu l, mt giao tc cha kha chia s DDL c m bo rng nh ngha ca i tng gin ang tham chiu khng b thay i trong sut thi gian giao tc din ra. Mt kha chia s DDL c cp trn mt i tng schema cho cc cu lnh DDL bao gm cc lnh sau y:AUDIT, NOAUDIT, COMMENT, CREATE [OR REPLACE] VIEW/ PROCEDURE/PACKAGE/PACKAGE BODY/FUNCTION/ TRIGGER, CREATE SYNONYM,

and CREATE TABLE (when the CLUSTER

parameter is not included). 2.7.3 Breakable Parse Locks Mt cu lnh SQL (hay mt unit trong ngn ng lp trnh PL/SQL) trong shared pool gi mt parse lock cho mi i tng schema m n tham chiu ti.Parse locks c cp v quan h vi vng SQL chia s c th b v hiu ha nu nh mt i tng c tham

chiu ti b thay i hoc b xa mt. Mt kha parse lock khng cho php cc hot ng DDL v c th lm mt cc xung t ca hot ng DDL. Do vy tn kha l Beakable parse lock. Mt kha parse lock c cp trong sut thi gian x l cu lnh SQL v gi cho vng chia s min l n cn c khai bo trong shared pool. 2.7.4 Duration of DDL locks Thi hn ca mt kha DDL ph thuc vo loi ca n. Kha DDL c quyn vo chia s thi gian x l v t ng commits. Mt kha phn tch (parse lock) vn cn min l cc cu lnh SQL lin quan vn cn trong shared pool. 2.8 Latches and Internal Locks Latches v Internal locks bo v bn trong c s d liu. C 2 u khng th tip cn cho ngi dng, bi v ngi dng khng c nhu cu kim sot thi gian h thc hin. Phn sau y s gip nm r hn cc kha Enterprise Manager v mn hnh LATCHES. 2.8.1 Latches Latches kh n gin, C ch tun t ha mc thp bo v d liu c chia s trong SGA(system global area). V d, Latches bo v danh sch nhng ngi dng ang truy cp vo c s d liu v bo v cc cu trc d liu m t cc khi (block) trong vng nh m (buffer cache). Mt my ch hay mt tin trnh nn cp kha latch trong thi gian ngn trong khi thao tc hay tm kim trn mt trong nh cu trc ny. Vic thc hin ca latches l iu khin tham s h thng. c bit l vn mt qu trnh s ch bao lu cho mt latch. 2.8.2 Internal Locks Kha ni b l mc cao hn, c ch phc tp so vi latches v phc v nhiu mc ch. 2.9 Dictionary Cache Locks Nhng kha ny c thi gian rt ngn v c gi trong cc mc ca t in caches trong khi cc mc ny ang c sa i hoc s dng. Chng m bo cho cc cu lnh c phn tch v thy nh ngha ph hp ca i tng. Kha t in b nh cache c th c chia s hoc c quyn. Kha chia s c tr khi m phn tch hon tt (parse is complete). Kha c quyn c tr khi hot ng DDL hon tt.

2.10 File and Log Management Locks Nhng kha ny bo v cc tp tin khc nhau. V d, mt kha bo v tp tin iu khin (control file) cho ch c mt tin trnh ti mt thi im c th thay i n. Mt kha iu phi vic s dng v lu tr cc tp tin ghi nht k. Datafile b kha m bo rng nhiu Instances mount mt database trong share mode hay mt Instance mounts n trong ch c quyn (exclusive mode). Bi v kha tp tin v kha nht k cho thy tnh trng ca tp tin, cc kha cn c gi trong thi gian di. 2.11 Tablespace and Rollback Segment Locks Nhng kha ny bo v Tablespaces v Rollback segments. V d, tt c cc Instances truy cp ti database phi tha thun rng tablespace l online hay offline. Rollback segments c kha ch mt Instance c th ghi n segment.

3

Locking PostgreSQL

3.1 Explicit Locking (Kha r rng, Kha hin) PostgreSQL cung cp cc ch kha khc nhau kim sot truy cp ng thi d liu trong cc Table. Cc ch ny c th c nh pht trin s dng cho cc kha iu khin ng dng trong cc tnh hung m MVCC c th khng c cc hnh ng khng mong mun. Cn li, hu ht cc lnh ca PostgreSQL t ng c cc kha thch hp m bo bng tham chiu khng b xa hoc sa i theo nhng cc khng ng khi lnh thc hin. (V d, lnh ALTER TABLE c th khng an ton khi c thc hin ng thi vi cc hot ng khc trn cng mt bng, v vy n c mt kha c quyn trn Table thc hin iu .) kim tra mt danh sch cc kha hin ti trong mt my ch c s d liu, s dng giao din h thng pg_locks. 3.1.1 Table-Lock Level Danh sch di y cho bit nhng kiu kha c gi tr v ng cnh ca chng c s dng t ng bi PostgreSQL. Tuy nhin bn cng c th c c bt k kha no vi cu lnh LOCK. Hy nh rng tt c cc ch kha di y l kha cp bng, thm ch nu tn kha c ch t Rows; th tn kha ch c ngha lch s. mc no , tn kha phn nh vic s dng cho mi ch kha. Ch c s khc bit tht s gia ch kha v tp cc kha trong bng sau. 2 giao tc khng th gi kha ch mu thun nhau trn cng 1 bng v cng lc. (Tuy nhin mt giao tc khng bao gi xung t vi chnh n, v d: n c th kha truy cp c quyn v sau c kha chia s truy cp trn cng mt bng). Nhiu giao tc c th khng xung t ng thi, tuy nhin mt

s ch kha l t xung t (v d, mt kha ACCESS EXCLUSIVE khng th c c bi nhiu hn 1 giao tc ti 1 thi im), nhng kha khc th khng t xung t (v d, kha ACCESS SHARE c th c gi bi nhiu giao tc). 3.1.1.1 Table-Level Lock Modes 1. ACCESS SHARE Ch xung t vi kha ACCESS EXCLUSIVE. Lnh SELECT c c ch kha ny trn cc bng c cp. Ni chung, bt k truy vn no ch c m khng sa i Table s c ch kha ny. 2. ROW SHARE Xung t vi phng thc kha EXCLUSIVE v truy cp c quyn. SELECT FOR UPDATE v SELECT FOR SHARE trn cc Table cn thit. Ngoi ra kha ACCESS SHARE cng c cp trn bt k cc bng, tuy nhin cc bng ny khng c chn FOR UPDATE/ FOR SHARE. 3. ROW EXCLUSIVE Xung t vi SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE v ACCESS EXCLUSIVE. Lnh Update, Delete, v Insert c c ch kha ny trn Table yu cu. Ch kha ny c cp li khi c bt k lnh sa i d liu trong Table. 4. SHARE UPDATE EXCLUSIVE Xung t vi SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE v ACCESS EXCLUSIVE. Ch kha ny bo v khi nhng thay i ca Schema v lnh VACUUM khi thc thi. c yu cu khi VACUUM (khng phi FULL VACUUM), ANALYZE, v CREATE INDEX CONCURRENTLY. 5. SHARE Xung t vi ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE ROW EXCLUSIVE, EXCLUSIVE, v ACCESS EXCLUSIVE. Ch ny bo v Table cc thay i d liu ng thi. c yu cu khi CREATE INDEX (khng phi CONCURRENTLY). 6. SHARE ROW EXCLUSIVE Xung t vi ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, v ACCESS EXCLUSIVE. Ch kha ny khng t ng yu cu bi bt k lnh PostgreSQL no. 7. EXCLUSIVE Xung t vi ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, v ACCESS EXCLUSIVE. Ch ny ch chp nhn ng thi vi kha ACCESS SHARE.

Ch c t Table c th tin hnh song song vi cc giao tc ang d kha ny. Ch ny khng t ng yu cu trn cc bng ca ngi s dng bi bt k cu lnh PostgreSQL no. Tuy nhin n c xp vo danh mc h thng trong mt s hot ng. 8. ACCESS EXCLUSIVE Xung t vi tt c cc kha. Ch ny ch cho php giao tc ang gi kha thao tc vi Table vi bt k cch no. Cc yu cu bi ALTER TABLE, DROP TABLE, TRUNCATE, REINDEX, CLUSTER, v VACUUM FULL. y cng l ch kha mc nh cho cc cu lnh kha bng, nu n khng c khai bo r rng. Note: Sau khi cp kha, Kha thng c gi cho n khi kt thc giao tc. Tuy nhin, nu kha c cp li sau khi thit lp mt savepoint, Kha c pht hnh ngay lp tc nu savepoint c Rollback. iu ny l ph hp vi nguyn tc Rollback v hy b tt c cc nh hng t savepoint.

3.1.1.2 Row-Level Locks Ngoi Kha cp Table, ta cn c kha cp hng (Rows), c th c kha c quyn hoc chia s. Mt kha c quyn cp hng c th c cp t ng khi hng c yu cu update hay delete. Kha ny s gi cho n khi giao tc commit hay rolls back, Cng ging nh Table-level locks. Row-level locks khng nh hng n vic truy vn d liu; chng ch kha khi c hnh ng ghi ln cng hng. c c mt kha cp hng c quyn trn mt hng m khng thc s thay i hng, hy chn SELECT FOR UPDATE. Lu rng mt khi cc kha cp hng c cp. giao tc c th update trn hng nhiu ln m khng s cc xung t. c chia s kha cp hng trn mt hng, th hy chn SELECT FOR SHARE. Mt kha chia s khng ngn chn cc giao tc c c cng kha chia s. Tuy nhin, giao tc khng c php kha update, delete, hay exclusively mt hng m n c giao tc khc gi shared lock. Bt k c gng nh vy s b chn cho n khi kha chia s c th.

PostgreSQL khng nh bt k thng tin v hng sa i trong b nh, v vy khng c gii hn v s lng hng b kha mt thi gian. Tuy nhin, kha mt hng c th gy ra vic ghi xung a, v d, SELECT FOR UPDATE sa i hng la chn nh du chng b kha, v nh vy s cho kt qu trong a ghi. Ngoi ra kha Table v Row, page-level share/exclusive lock thng c s dng iu khin read/write truy xut ti Table pages trong shared bufer pool. Nhng kha ny c m trc tip sau khi mt dng c x l hay update xong. Nhng nh pht trin ng dng bnh thng th khng cn quan tm ti page-level locks, nhng chng c cp y cho y . 3.1.1.3 Deadlocks Vic s dng cc kha r rng c th lm tng kh nng deadlocks. Khi c 2 hay nhiu giao tc gi kha m giao tc khc cn. V d, nu giao tc 1 gi mt kha exclusive trn bng A v c gng c mt kha exclusive trn bng B, trong khi giao tc 2 kha c quyn trn bng B, v mun mt kha Exclusive trn bng A, th lc ny c 2 giao tc khng th tin hnh. PostgreSQL t ng pht hin cc tnh hung deadlock v gii quyt chng bng cch hy b mt trong cc giao tc c lin quan, v cho php cc giao tc khc hon thnh. (Chnh xc giao tc no s b hy b l kh d on). Lu rng Deadlock c th xy ra i vi vic kha cp hng( v n c th xy ra ngay c khi kha r rng khng s dng). Xem xt trng hp sau, trong 2 giao tc ng thi thay i trn mt Table. Giao tc u thc hin :UPDATE accounts SET balance = balance + 100.00 WHERE acctnum = 11111;

N c cp Row-level lock trn dng vi acctnum r rng. Lc ny giao tc 2 x lUPDATE accounts SET balance = balance + 100.00 WHERE acctnum = 22222; UPDATE accounts SET balance = balance - 100.00 WHERE acctnum = 11111;

Cu lnh cp nht u tin thnh cng v c cp Row-level lock trn dng , v vy n ang update trn dng , tuy nhin Update th 2 tm thy dng n ang c gng update b kha, v vy n i giao tc ang gi kha hon tt. Giao tc 2 lc ny ang i giao tc 1 c th tip tc. By gi giao tc 1 li thc hin:UPDATE accounts SET balance = balance - 100.00 WHERE acctnum = 22222;

Giao tc 1 ang c gng xin cp quyn kha dng, nhng khng th c v giao tc ang gi kha, v vy n i cho giao tc 2 hon thnh. Nh vy, giao tc 1 b kha bi giao tc 2, v giao tc 2 b kha bi giao tc 1. Mt tnh trng b tc xy ra. PostgreSQL s pht hin tnh hung ny v b qua 1 giao tc. Bo v tt nht chng li s b tc l trnh xy ra chng, hy chc chn rng tt c cc ng dng s dng kha theo mt th t nht qun. Trong v d trn, nu c 2 giao dch cp nht hng theo th t, th b tc s khng xy ra. Tuy vy khng c ngha l tnh trang b tc s c gii quyt theo cch. Mt giao dch tm kim cp kha bng, hay kha hng s phi ch i v thi hn cho cc kha m n xung t. y l mt tng ti cho cc ng dng, khi m c th c nhng giao tc thc hin rt lu. 3.1.2 Advisory Locks (Kha t vn) PostgreSQL cung cp mt cch thc xc nh ngha cho vic to cc kha ca ng dng. chng gi l advisory locks, bi v h thng khng thc thi s dng chng, m ng dng s dng chng ng hn. Advisory locks c th hu ch cho chin lc kha, l cc vn kh x trong m hnh MVCC. Sau khi c cp, Mt kha t vn c gi cho tr t do hoc phin lm vic kt thc. Khng ging nh kha tiu chun, Kha t vn khng qu coi trng ng ngha: Mt kha c cp trong sut giao tc, sau c roll back, v tng t nh vy kha c hiu lc ngay c khi cc giao tc gi sau li. Kha tng t c th s dng li nhiu ln trong qu trnh x l ca giao tc. Cho mi kha phi c p ng m kha trc khi chng t do.(Nu phin lm vic gi mt kha, yu cu b sung s lun thnh cng, ngay c khi phin lm vic ang ch kha.). Ging nh cc kha trong PostgreSQL, mt danh sch cc kha t vn c gi bi bt k phin lm vic no, bn c th tm thy trong pg_locks.