この章では、DB2 ログの関連内容の整理に基づいて、ロックの内容を整理します。ログと比較して、ロックの内容はアプリケーションに関連しており、これには関連性が高くなります。内容はあらゆる面でより複雑です。 DBMS とファイル システムの本質的な違いは、DBMS システムによってサポートされるトランザクションにあります。 ログの導入が永続性を確保することである場合、LOCK の導入はトランザクションのシリアル化を確保し、トランザクションの同時実行性を解決し、リソースの RACE CONDITION を実現することです。異なるトランザクション シナリオでは、異なる同時実行要件が定義されます。この目的のために、DBMS ごとに異なるロック メカニズムが導入されます。 DB2 のシリアル化メカニズムは、主に LOCK、LATCH、CLAIM/DRAIM によって実装され、OBJECT、SIZE、MODE、DURATION、PARTICIPANTS、PARAMETER LOCATIONS などの、特定の LOCK 関連属性と LOCK 属性のアプリケーションへの影響が紹介されています。 DBMS クラスター (DB2 の DATA SHARING GROUP および ORACLE の ORACEL RAC) が導入されたとき、異なるメンバー間のデータの一貫性を処理するために、DB2 はグローバル LOCK 競合検出を実装するために PHYSICAL LOCK と CF LOCK STRTURE を導入しました。単一の SUBSYSTEM では、主な競合は TIMEOUT と DEADLOCK です。DATASHARING GROUP では、新しい CONTENTION、XES CONTENTION、FALSE CONTENTION、および GLOBAL LOCK CONTENTION が導入されています。 LOCK の導入により、必然的に新しい OVERHEAD が発生します。DB2 は、主に IRLM、XES、CF などを介してロック リソース要求を処理します。アドレス空間ロック要求に加えて、アプリケーション自体の不合理な設計や特定のシナリオにより、多くのオーバーヘッドが発生します。これらの問題を効果的に回避するには、システムの運用保守担当者と開発者の共同の努力が必要です。
この記事の内容は、DBMS LOCK に関する私の個人的な理解レベルに基づいており、内容を整理する際の知識の広さと深さだけでなく、すべてさらなる検討が必要です。
このブログは書いてから大枠が完成するまでに2週間近くかかりましたが、今まで書いたブログの中で一番長いはずですが、それでも確認するたびに新たにやらなければいけないことが出てきます。追記、今後も私なりの理解を追記していきます。
DBMS :データの整合性を損なうことなく、複数のユーザーがデータベースに同時にアクセスできるようにします。あトランザクション (または作業単位) は、通常はアプリケーション プロセス内で単一の単位としてグループ化された 1 つ以上の SQL 操作の回復可能なシーケンスです。
DB2 がデータの一貫性を保つために使用するメカニズムの 1 つがトランザクションです。トランザクション (別名作業単位) は、通常はアプリケーション プロセス内で単一の単位としてグループ化された 1 つ以上の SQL 操作の回復可能なシーケンスです。単一トランザクションの開始と終了によって、データベース内のデータの一貫性のポイントが定義されます。トランザクション内で実行されたすべての SQL 操作の効果がデータベースに適用されて永続化 (コミット) されるか、実行されたすべての SQL 操作の効果が完全に「元に戻されて」破棄 (ロールバック) されます。
トランザクション時に見られる現象同時実行
Transaction 1 and Transaction 2 read the same row of data and both calculate new values for that row based upon the original values read. If Transaction 1 updates the row with its new value and Transaction 2 then updates the same row, the update operation performed by Transaction 1 is lost
Transaction 1 changes a row of data and Transaction 2 reads the changed row before Transaction 1 commits the change. If Transaction 1 rolls back the change, Transaction 2 will have read data that theoretically, never existed.
Occurs when a transaction executes the same query multiple times and gets different results with each execution
Transaction 1 reads a row of data, then Transaction 2 modifies or deletes that row and commits the change. When Transaction 1 attempts to reread the row, it will retrieve different data values
Occurs when a row of data that matches some search criteria is not seen initially
Transaction 1 retrieves a set of rows that satisfy some search criteria, then Transaction 2 inserts a new row that contains matching search criteria for Transaction 1’s query. If Transaction 1 re-executes the query that produced the original set of rows, a different set of rows will be retrieved – the new row added by Transaction 2 will now be included in the set of rows returned
这里的object是指锁所施加的对象,不同的锁所能适用的对象是不同的。如PAGE LOCK的对象肯定是PAGE.
OWNER 表示谁持有锁,有的是TRAN,有的是DB2 MEMBER
LOCK PARTICIPANTS
Locking is a complex interaction of many parts.
Page/Row locks are not compatible with tablespace locks The solution is "Intent Locking" Regardless of the locksize, DB2 will always start with a tablespace lock
S | U | |||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
X | N | N | ||||||||||||||||||||||||||||||||||||
ZPARM | 意味 |
---|---|
URCHKTH | UR チェックポイント頻度しきい値 |
URLGWTH | UR ログ書き込みしきい値 |
LRDRTHLD | 長時間実行リーダー |
RELCURHL | 保持されているロックを解除 |
EVALUNC | コミットされていないものを評価 |
SKIPUNCI | コミットされていない挿入をスキップ |
RRULOCK | RR/RS用Uロック |
XLKUPDLT | X検索された U/D のロック |
NUMLKTS | テーブル(スペース)ごとのロック |
NUMLKUS | ユーザーごとのロック |
BETWEEN SQL AND SQL:DB2 USE LOCKS
BETWEEN UTILITY AND SQL:DB2 USE CLAIM AND DRAIN
BASE:
FOR EACH OBJECT(TABLESPACE,PARTITION,TABLE,IDNEXSPACE),THERE IS A CLAIM-COUNT
WHICH IS INCREASED 1 AT START AND DECREASE BY 1 AT COMMIT
A utility starts with a Drain
No new Claims are allowed (wait, maybe timeout)
If the Claim-count >0 the utility waits (maybe timeout)
When the Claim-count reaches zero, the utility can continue
Two important situations:
A claim is a notification to DB2 that a particular object is currently being accessed. Claims usually do not continue to exist beyond the commit point one exception being a Cursor with Hold. In order to access the DB2 object within the next unit of work, an application needs to make a new claim.Claims notify DB2 that there is current interest in or activity on a DB2 object.Even if Uncommitted Read doesn’t take any locks, a claim is taken. As long as there are any claims on a DB2 object, no drains may be taken on the object until those claims are released.
A drain is the action of obtaining access to a DB2 object, by:Preventing any new claims against the object.Waiting for all existing claims on the object to be released.
A drain on a DB2 object causes DB2 to quiesce all applications currently claiming that resource, by allowing them to reach a commit point but preventing them (or any other application process) from making a new claim.A drain lock also prevents conflicting processes from trying to drain the same object at the same time.
Utilities detect claimers are present and wait
Drain Write waits for all write claims to be released
Drain All waits for claims on all classes to be released
SHRLEVEL(CHANGE) Utilities are CLAIMers
Latches – managed by DB2
? BM page latching for index and data pages
? DB2 internal latching (many latches grouped into 32 latch classes)
? Latches – managed by IRLM
? Internal IRLM serialization
虽然标题是advanced topics,其实涉及的内容并没有本质的区别,只不过我们在看待问题,分析问题时需要从单个DB2 SUBSYSTEM的视角上升到DBMS CLUSTER的高度,即DATA SHARING GROUP的高度。为了处理不同的member之间共享数据的COHERENCY问题,DB2引入P-LOCK,区别主要在于单个DB2 SUBSYSTEM中的LOCK owner均为tran,而P-LOCK的owner为DB2 SUBSYSTEM.因此这里的内容按照这种分类进行介绍L-LOCK,P-LOCK,RETAINED LOCK,这几种锁之间的区别需要了解。
特点:
THE KIND YOU HAVE IN BOTH DATA SHARING AND NON DATA SHARING SUBSYTEM THEN CONTROL DATA CONCRRRENCY OF ACCESS TO OBJECTS THEN CAN BE LOCAL OR GLOBAL THEY ASSOTIATED WITH PROGRAMS
WHY IS HIERACHICAL
SO THE MEMBER DB2 SUBSYSTEM WILL NOT PROPAGATE L-LOCKS TO THE CF UNNECESSARILY
特点:
EXCLUSIVE TO DATA SHARING
ARE ONLY GLOBAL
USED TO MAINTAIN DATA COHERENCY IN DATA SHARING
ALSO USED TO MAINTAIN EDMPOOL CONSISTENCY AMONG MEMBERS
ASSOTIATED BY(OWNED BY) DB2 MEMBERS
P-LOCK CAN BE NEGOTIATTED BETWEEN DB2 MEMBERS
NO TIMEOUT OR DEADLOCK DETECTION
分类
<img src="http://www.bkjia.com/uploads/allimg/160227/11433Q233-1.png" style="max-width:90%" style="max-width:90%" alt="">The ONLY way to clear retained locks is by estarting the failed DB2 subsystem.
A LOCK THAT A DB2 SHARING DB2 MEMBERHAS TOMAKE KNOWN TO OTHERS MEMBERS OF THIS DATA SHARING GROUP
THE IRLM VIA XES,PROPAGATE TO THES LOCKS TO THE STRUCTURE IN THE CF
XCF,XES的内容在XES contention部分介绍。
HOW ARE GLOBAL LOCK REQUESTS MADE KNOWN TO OTHER DB2 MEMBERS?
THEY ARE PROPAGATED TO DB2 LOCK STRUCTURE
与APPLICATION LOCK不同的是,PHYSCIAL LOCK 可以做Page Set P-Lock Negotiation。
上图展示了INERDB2 READ/WRITE INTEREST场景下的PAGE SET P-LOCK NEGOTIATION。所谓的negotiation就是锁请求方以及锁申请方将锁请求均DOWNGRADE,从而达到compatible的目的。需要注意的是,PAGE SET P-LOCK STATE状态的变化需要涉及IRLM以及XCF通讯机制。PAGE SET P-LOCK对GLOBAL BUFFER POOL起一种标志作用,
对于READ的DB2 SUBSYSTEM, must register its
interest in read pages in the GBP directory
对于UPDATER的DB2 SUBSYSTEM,must write updated pages to the group buffer pool and register those updated pages in the GBP directory
DEVIDE INTO TWO PARTS OF CF LOCK STRUCTURE RATIO OF LAST TWO COMPONETS DEFAULT ROUGHLY 50%CAN BE ALTERED BY IRLM PARAMETER
OVERVIEW OF MRL STRUCTURE
ACTIVEstatus of active means that the DB2 system is running.
Retained, on the other hand, means that a DB2 and/or its associated IRLM has failed
CONTAINS ENTRIES FOR ALL CRURENTLY HELD MODIFY LOCKS
IN THE EVENT OF DB2 FAILTURE ENSURE THAT OTHER MEMBER OF DB2 KNOW WHICH LOCKS MUST BERETIANED
It is essentially a list structure that lists all the update or modify locks in the data sharing group
DISPLAY GROUP ; Display “LIST ENTRIES IN USE”
NUMBER LIST ENTRIES : 7353, LIST ENTRIES IN USE: 1834
WARNING: When the LIST ENTRIES IN USE catches up to the NUMBER LIST ENTRIES, new modify lock requests will not be granted, and transactions will begin to fail with -904s.
A 'POOL' OF HASH POINTERS
CONTAINS ENTRIES FOR ALL READ AND MODIFY LOCKS
USED FOR GLOBAL LOCK CONTENTION
It is very difficult to keep track of how full a randomly populated table is, so the only way to track its utilization is indirectly. In DB2 data sharing, that tracking mechanism is false contention
SIZE OF EACH INDIVIDUAL ENTRY SET BY MAXUSRS PARAMETER IN IRLMPROC OF FIRST IRLM JOIN THE GROUP
NUMBER OF MEMBER IN THE GROUP
其实主要的目的就是提供INTER-SUBSYTEM之间通讯的API,主要的功能有三个:
STAE CHANGE | ||
---|---|---|
NONE->R/O | 疑似OPEN | |
R/O->R/W | PSEDUO CLOSE | |
R/W->R/O | Physical CLOSE | |
R /O->なし | XES 競合 |