티스토리 뷰

카테고리 없음

Oracle, DB2 locking 메커니즘

쌀맛나는세상 2009. 5. 13. 11:22
 RDBMS 아키텍처 심층 (4) OracleとDB2、ロッキング・メカニズムはこれだけ違う Page 1 Oracle 및 DB2, 잠금 메커니즘은 이것이 다르다 Page 1

アクセンチュア・テクノロジー・ソリューションズ 액센츄어 테크놀로지 솔루션
阿尾操 著/安間裕 監修 阿尾작동 지음 /安間Nakano 감수
2004/10/6 2004/10/6
本連載はOracleを使ったデータベースシステムの開発・運用管理にある程度の知識を持つ読者を対象に、Oracle以外の商用RDBMSであるMicrosoft SQL ServerとIBM DB2とのアーキテクチャの違いを明らかにし、マルチベンダに対応できるデータベースシステムの設計・開発・運用ノウハウを紹介していく。 본 연재는 Oracle을 사용한 데이타베이스 시스템의 개발 관리에 어느 정도의 지식을 가진 독자를 대상으로 Oracle 이외의 상용 RDBMS이다 Microsoft SQL Server와 IBM DB2과 아키텍처의 차이를 분명히하고, 다중 공급 업체에 대응할 수있는 데이터베이스 시스템의 설계 개발 관리 노하우를 소개하고 간다. (編集局) (편집국)

はじめに 개요

主な内容 주요 내용
--Page 1-- - Page 1 -
はじめに 개요
今回扱うRDBMSとその対象内容 이번 대우 RDBMS와 대상 내용
分離レベル 격리 수준
--Page 2-- - Page 2 -
ロックの制御 자물쇠 통제
ロック待機への対処 잠금 대기에 대처
ロック・エスカレーション 잠금 에스 컬 레이션
今回のまとめ 이번 요약

本連載の第2回「 OracleとDB2、アーキテクチャはこれだけ違う 」において、OracleとDB2のアーキテクチャの違いについて解説しました。 본 연재 제 2 회 "Oracle과 DB2 아키텍처는 이것이 다르다"에서 Oracle과 DB2의 아키텍처의 차이에 대해 설명했습니다. 同じRDBMSでも、アーキテクチャは随分と異なることが理解できたと思います。 같은 RDBMS하지만 아키텍처는 충분히 달라질 수 이해할 수 있다고 생각합니다. 当然ながら、アーキテクチャが異なれば、RDBMSを利用するアプリケーションの振る舞いも異なります。 물론 구조가 다르면, RDBMS를 사용하는 응용 프로그램의 동작도 다릅니다. 今回は、その中でも、Oracle経験者がDB2を扱った場合に、最も戸惑うと思われる「分離レベルとロッキング・メカニズム」を取り上げます。 이번에는 그중에서도 Oracle 경험자가 DB2을 취급할 경우, 가장 당황한 것으로 보인다 "격리 수준과 잠금 메커니즘"에 대해 설명합니다.

なお、以降の説明では、特に断りのない限り、「Oracle」はOracle9i Enterprise Edition、および「DB2」はDB2 Universal Database V8.1 Enterprise Server Editionの各製品に関する説明とします。 게다가 나중에 설명은, 특히 거절이없는 한, "Oracle"Oracle9i Enterprise Edition 및 "DB2"DB2 Universal Database V8.1 Enterprise Server Edition의 각 제품에 대한 설명합니다.

今回扱うRDBMSとその対象内容 이번 대우 RDBMS와 대상 내용

今回は、すでにOracleでのアプリケーション開発経験があり、今後、DB2の導入を検討しているアプリケーション開発者向けに、「分離レベルとロッキング・メカニズム」の観点から、アプリケーション並行性の改善に役立つ内容を解説します(図1)。 이번에는 이미 Oracle 애플 리케이션 개발 경험이 있고 앞으로 DB2 도입을 검토하는 응용 프로그램 개발자를 위해 "격리 수준과 잠금 메커니즘"의 입장에서, 애플 리케이션 동시성을 개선하는 데 도움이되는 내용을 설명합니다 (그림 1).

図1 今回扱うRDBMSとその対象内容 그림 1 이번 대우 RDBMS와 대상 내용

分離レベル 격리 수준

DB2は、ANSI/ISO標準のトランザクション分離レベルをすべてサポートしています。 DB2는 ANSI / ISO 표준 고립 수준을 모두 지원합니다. それに対し、Oracleは、Read Committed、Serializableの2つをサポートしています(表1)。 반면 Oracle은 Read Committed, Serializable 2 개를 지원합니다 (표 1). OracleもDB2もデフォルトのトランザクション分離レベルはRead Committedです。 Oracle도 DB2도 기본 고립 수준은 Read Committed. Read Committedとは、コミットされたデータのみ参照が許されることでデータの一貫性を保証するものです。 Read Committed은 커밋된 데이 터만 참조가 허용되는 데이터의 무결성을 보장합니다. まず、OracleとDB2のデフォルト分離レベルであるRead Committedについて、両者の振る舞いの違いを見ていきます。 먼저, Oracle과 DB2의 기본 격리 수준이다 Read Committed 대해 양측 행태의 차이를 살펴 봅니다.

ANSI/ISO標準トランザクション分離レベル ANSI / ISO 표준 고립 수준 Oracle Oracle DB2 DB2
Uncommitted Read(未コミット読み取り) Uncommitted Read (커밋되지 않은 읽기) 未サポート 지원하지 않음
Read Committed(コミット読み取り) Read Committed (커밋 읽기)
(デフォルト) (기본값)

(デフォルト) (기본값)
Repeatable Read(繰り返し可能読み取り) Repeatable Read (반복 가능 읽기) 未サポート 지원하지 않음
Serializable(直列可能) Serializable (직렬 가능)
表1 OracleとDB2がサポートする分離レベルの違い 표 1 Oracle과 DB2가 지원하는 격리 수준의 차이

OracleとDB2では、このトランザクション制御の実装の仕方が異なるため、同じRead Committedであっても、トランザクションの振る舞いが異なります。 Oracle 및 DB2는이 트랜잭션 제어를 구현하는 방법이 다르기 때문에 같은 Read Committed에서도 거래의 동작이 다릅니다.

最も大きな違いは、更新中のデータに対して検索を行った場合です。 가장 큰 차이점은 업데이 트되는 데이터에 대한 검색을 실시했을 경우입니다. DB2では、検索時に共有ロックをかけます。 DB2는 검색할 때 공유 잠금을 겁니다. しかし、読み取るデータが更新中の場合は、すでにそのデータに排他ロックがかかっているため、共有ロックをかけることができません。 그러나 읽을 데이터가 업데이 트되는 경우에는 이미 데이터에 단독 잠금이 걸려 있기 때문에 공유 잠금을 걸 수없습니다. つまり、DB2では更新中のデータに読み手はアクセスできず、検索処理が待たされます。 즉, DB2는 업데이 트되는 데이터에 독자는 액세스할 수없고, 검색 작업이 보류됩니다. 一方、Oracleでは、マルチ・バージョン一貫性制御により、UNDO表領域に保持された更新前の情報を読み込むため、読み取るデータが更新中であっても検索処理が待たされることはありません。 반면, Oracle은 멀티 버전 일관성 제어를 통해 UNDO 테이블 공간에 저장된 업데이트 정보를 가져오기 위해 읽기 자료를 업데이 트하는 동안이라도 검색 작업이 보류되는 것은 아닙니다. この両者の癖を理解していないと、アプリケーション開発者は、パフォーマンス劣化やデッド・ロックなどのトラブルに見舞われることになります(図2)。 이 두 사람의 습관을 이해하지 않으면 응용 프로그램 개발자는 성능 저하 및 교착 상태와 같은 문제가 발생하게됩니다 (그림 2).

図2 更新中のデータに対して検索を行った場合のOracleとDB2の比較 그림 2 업데이 트되는 데이터에 대한 검색을 실시했을 경우의 Oracle과 DB2의 비교

DB2において、更新中のデータが確定されるまで検索処理が待たされる振る舞いは、複数アプリケーション間の同時実行性を損ないます。 DB2에서 업데이 트되는 데이터가 확정될 때까지 검색 작업이 보류되는 동작은 여러 응용 프로그램의 동시성을 손상. これに対しては、「未コミット読み取り」という、ダーティー・リードを許す方法がありますが、実用的なアプリケーションで適用できるケースはごくまれであるため、ここでは取り上げません。 이것에 대해서는 "커밋되지 않은 읽기", 다티 리드를 용서하는 방법이 있지만, 실제적인 응용 프로그램에 적용할 수있는 사례는 매우 드문이기 때문에 여기서는 다루지 않습니다.

ここでは、いかにしてダーティー・リードを使わずにDB2で優れた同時実行性を実現すればよいかを考えます。 여기서는 어떻게하고 다티 리드를 사용하지 않고 DB2에서 뛰어난 동시성을 제공해야하는지 생각해 볼 수있습니다. ポイントはロック取得時間(ほかのトランザクションからの更新を許さない時間)を短くするような排他制御のアプリケーション設計を行うことです。 포인트는 자물쇠 포획 시간 (다른 거래에서 갱신을 용서하지 않는 시간)을 단축하는 독점 제어 애플 리케이션 디자인을합니다. ロック取得時間が短ければ、検索処理と重複する機会を減らすことができます。 자물쇠 포획 시간이 짧은 경우, 검색 작업과 중복되는 경우를 줄일 수있습니다. これには、オプティミスティック・ロック(楽観的ロック)と呼ばれる実装方法をよく用います。 이것은 낙관적 잠금 (낙관적 잠금)라는 구현하는 방법을 잘 사용합니다. オプティミスティック・ロックのフローは以下のようになります。 낙관적 잠금의 흐름은 다음과 같습니다.

クライアントサーバシステムのプログラミング例 쿠라이안토사바시스테무 프로그램보기
  1. ロックを取得せずにデータを読み込む。 자물쇠를 검색하지 않고 데이터를로드.
  2. 読み込んだデータをアプリケーション上(画面上)で変更する。 가져온 데이터를 응용 프로그램 (화면)으로 변경한다.
  3. UPDATE実行のタイミングで、ロックをかけて再度データを読み込む。 UPDATE 실행 타이밍에 잠금을 걸고 다시 데이터를로드.
  4. データベース上でデータ変更の有無を列データの更新時間などを利用して確認する。 데이터베이스에서 데이터 수정 여부를 열 데이터 업데이트 시간 등을 이용하여 확인한다.
  5. ほかのユーザーによってデータが変更されていなければ、コミット処理を行い、更新を確定する。 다른 사용자에 의해 데이터가 변경되지 않는 한, 커밋 프로세스를 실행하고 업데이 트를 확정한다.
    もし、ほかのユーザーによってデータが変更されていれば、ロールバック処理を行う。 만일 다른 사용자에 의해 데이터가 변경되는 경우에 롤백 처리를 실행한다. アプリケーション上での変更データは破棄して、ユーザーに再入力を促す。 응용 프로그램의 변경 데이터를 삭제하고 사용자에게 다시 입력하라는.

ただし、オプティミスティック・ロックは、頻繁に複数ユーザーが同時に同一データを変更するようなシステムだと、更新に失敗し、ユーザーに再入力を促す確率が高くなるため、利便性が低くなる場合があります。 그러나 낙관적 잠금은 수시로 여러 사용자가 동시에 동일한 데이터를 변경하는 시스템이라고 갱신에 실패하고 사용자에게 다시 입력하라는 확률이 높고 인해 편의가 낮아질 수있습니다 . そういった場合においては、1回目の読み込み時(上記(1)のタイミング)でロックをかける設計も検討するべきでしょう。 그러한 경우에는, 1 차 가져올 때 (상기 (1) 타이밍)에 잠금을 걸 디자인도 검토하는 것이 좋습니다. また加えて、データにロックをかけて画面表示するような場合は、画面を表示したまま放置することがないよう、一定時間内に画面上から入力がなければ、取り込んだデータを自動的に破棄するようなアプリケーションの設計にする必要があります。 또한 이외에 데이터에 자물쇠를 걸어 화면 표시하는 경우, 화면을 채 방치하지 않도록 일정 시간 내에 화면에서 입력이 없으면, 가져온 데이터를 자동으로 삭제 하는 응용 프로그램을 설계해야합니다.

つまり、DB2の場合、オプティミスティック・ロックによる実装が並行性の改善には有効ですが、オプティミスティック・ロックによる画一的な設計でよいというわけではありません。 즉, DB2의 경우 낙관적 잠금 통해 구현이 병행 성의 개선에 유효하지만 낙관적 잠금에 의한 획일적인 디자인에 좋다는 것은없습니다. アプリケーションの要件、ユーザーの利便性を満たす排他制御方法を選択する必要があります。 응용 프로그램 요구 사항, 사용자의 편의를 위탁 독점 통제 방법을 선택해야합니다. 次ページに続く) (다음 페이지에서 계속)

Point Point
OracleもDB2もデフォルト分離レベルは、コミットされたデータのみを取得するRead Committedであるが、その振る舞いが異なる。 Oracle도 DB2도 기본 격리 수준은 커밋된 데이터를 검색하는 Read Committed이다, 그 동작이 다르다. DB2では更新中のデータに読み手はアクセスできずに検索処理が待たされる。 DB2는 업데이 트되는 데이터에 독자는 접근하지 못하고 검색 작업을 기다려야한다. 一方、Oracleでは、マルチ・バージョン一貫性制御により、UNDO表領域に保持された更新前の情報を読み込むため、読み取るデータが更新中であっても検索処理で待たされることはない。 반면, Oracle은 멀티 버전 일관성 제어를 통해 UNDO 테이블 공간에 저장된 업데이트 정보를 가져오기 위해 읽기 자료를 업데이 트하는 동안이라도 검색 프로세스에서 보류되는 것은 아니다.
DB2では、ロック取得時間(ほかのトランザクションからの更新を許さない時間)を短くし、検索処理と重複する機会を減らすために、オプティミスティック・ロック(楽観的ロック)の導入を検討する。 DB2는 자물쇠 포획 시간 (다른 거래에서 갱신을 용서하지 않는 시간)을 단축하고, 검색 작업과 중복되는 경우를 줄이기 위해 낙관적 잠금 (낙관적 잠금) 도입을 검토한다.


Oracle 및 DB2, 잠금 메커니즘은 이것이 다르다 Page 2

アクセンチュア・テクノロジー・ソリューションズ 액센츄어 테크놀로지 솔루션
阿尾操 著/安間裕 監修 阿尾작동 지음 /安間Nakano 감수
2004/10/6 2004/10/6

ロックの制御 자물쇠 통제

Oracleでは、リードロックを取得しません。 Oracle에서는 리드 잠금을 얻지 않습니다. 一方、DB2では、システム側で常にリードロックを取得します。 반면 DB2는 시스템 옆에 항상 리드 잠금을 가져옵니다. デフォルトでは、ロックがかかるタイミングは、カーソルが行の上にある間です(図3)。 기본적으로, 자물쇠가 걸리는 시간은 커서가 라인 위에있는 동안 (그림 3).

図3 DB2の行ロック(デフォルト) 그림 3 DB2 행 잠금 (기본값)

Oracleで更新を前提としたデータの読み取りを行う場合には、ユーザーが明示的に行ロックを取得するために、FOR UPDATE句を用います。 Oracle에서 업데이 트를 전제로 한 데이터를 읽을 경우에는 사용자가 명시적으로 행 잠금을 얻으려면 FOR UPDATE 절을 사용합니다. これによって、トランザクション終了まで検索結果行にロックをかけ、ほかのトランザクションからの更新を防ぎます。 이에 따라 거래 종료까지 검색 결과가에 자물쇠를 걸고 다른 거래에서 업데이 트를 방지합니다.

SELECT * FROM TABLE FOR UPDATE
リスト1 OracleのFOR UPDATE句 목록 1 Oracle의 FOR UPDATE 어구

一方、DB2では、デフォルトのリードロックだけではほかのトランザクションからの更新を禁止するには十分ではありません。 한편 DB2에서는 기본 리드 잠금만으로는 다른 거래에서 업데이 트를 해제하려면 충분하지 않습니다. そこで、分離レベルを「繰返し可能読み取り」もしくは「直列可能」に変更する必要があります。 따라서 격리 수준을 "반복 가능 읽기"또는 "직렬 허용"으로 변경해야합니다. これによって、検索結果行にはCOMMITあるいはROLLBACK時までロックをかけ、ほかのトランザクションからの更新を防ぎます。 이에 따라 검색 결과 줄은 COMMIT 또는 ROLLBACK까지는 자물쇠를 걸고 다른 거래에서 업데이 트를 방지합니다.

排他制御が必要な場面でその都度、個々のSQL文にWITH句を用いて分離レベルを指定してください。 독점 통제가 필요한 장면에 매번 개별 SQL 문장에 WITH 어구를 사용하여 격리 수준을 지정합니다. 例えば、上図3の場合は、以下のSQL文をカーソルオープン前に発行することで、レコードA~Dは、COMMITあるいはROLLBACK時までロックされた状態になります。 예를 들어, 위의 그림 3의 경우 다음 SQL 문을 커서 오픈 전에 게시함으로써 레코드 A ~ D, COMMIT 또는 ROLLBACK 분 잠긴 상태가됩니다.

SELECT * FROM TABLE FOR UPDATE WITH RS
リスト2 DB2のWITH RS句 목록 2 DB2의 WITH RS 어구

WITH句に付いているRSとは、ANSI/ISO標準トランザクション分離レベルでいう「繰り返し可能読み取り」分離レベルのことです。 WITH 어구를 가진 RS는 ANSI / ISO 표준 고립 수준에서 말하는 "반복 가능 읽기"격리 수준을 말합니다. 「直列可能」分離レベル(FOR UPDATE WITH RR)の場合、トランザクションが読み取ったレコードすべてに対してロックを取得するため、「繰り返し可能読み取り」分離レベルよりも、多くのロックを取得します。 "직렬 가능"격리 수준 (FOR UPDATE WITH RR)의 경우 트랜잭션이 읽은 레코드에 대해 잠금을 가져오기 위해 "반복 가능 읽기"격리 수준보다 많은 자물쇠를 가져옵니다. そのため「直列可能」分離レベルは、同時実行性が低下します。 따라서 "직렬 가능"격리 수준은 동시성이 저하됩니다.

Point Point
DB2では、SQLステートメント単位の行ロックは、FOR UPDATE WITH句を使う。 DB2는 SQL 문 단위 행 자물쇠는 FOR UPDATE WITH 어구를 사용한다.

ロック待機への対処 잠금 대기의 극복

OracleとDB2では、ロック待機への対処も異なります。 Oracle 및 DB2는 잠금 대기에 대처도 달라집니다. ロック待機をせず、すぐに制御を戻す場合、Oracleでは、「SELECT~FOR UPDATE」に「NOWAIT」オプションを指定します。 잠금 대기하지 않고 즉시 통제를 되돌릴 경우 Oracle에서 "SELECT ~ FOR UPDATE" "NOWAIT"옵션을 지정합니다. 一方、DB2では「NOWAIT」オプションに対応する機能をサポートしていません。 반면 DB2는 "NOWAIT"옵션에 해당하는 기능을 지원하지 않습니다. DB2ではロック待機する時間を「LOCKTIMEOUT(単位:秒)」パラメータで指定し、ロック待機時間がLOCKTIMEOUTに達した場合、ロック待機しているトランザクションがロールバックされます(図4)。 DB2는 잠금 대기 시간을 "LOCKTIMEOUT (단위 : 초)"파라미터로하고 잠금 대기 시간이 LOCKTIMEOUT에 도달하면 잠금 대기중인 트랜잭션이 롤백됩니다 (그림 4).

図4 ロック待機処理の比較 그림 4 잠금 대기 처리 비교

DB2で、Oracleの「NOWAIT」オプションと同じ振る舞いを実現させるためには、LOCKTIMEOUTを0秒に設定します。 DB2, Oracle "NOWAIT"옵션과 동일한 동작을 실현하기 위하여는, LOCKTIMEOUT 0 초로 설정합니다. このパラメータはデータベース単位の設定であり、すべてのトランザクションに一律に影響するため注意が必要です。 이 매개 변수는 데이터베이스 단위 설정이고 모든 거래에 일률적으로 영향을 주의해야합니다. 実際のオペレーションを基にしたベンチマークや、アプリケーションの仕様を検討したうえで、このパラメータをチューニングしてください。 실제 작업을 기반으로하는 벤치 마크 및 응용 프로그램의 사양을 검토하는 데이 매개 변수를 조정하십시오. 例えば、10秒でロック・タイムアウトさせるように変更するコマンドは以下のようになります。 예를 들면, 10 초 잠금 시간 제한하도록 변경하는 명령은 다음과 같습니다.

db2 UPDATE DB CFG FOR dbname USING LOCKTIMEOUT 10
リスト3 DB2でロック・タイムアウトを10秒に設定 목록 3 DB2에 잠금 시간 제한을 10 초로 설정

また、タイムアウト発生時、リトライすることにより、エラーになった処理が問題なく実行される場合は、リターン・コードを利用して、アプリケーションにリトライ・ロジックを組み込む方法もあります。 또 타임아웃 발생시 재시도하면 오류가 된 프로세스가 문제없이 실행되는 경우에는 반환 코드를 사용하여 응용 프로그램에 재시도 논리를 통합하는 방법도있습니다. その際には、トランザクションがデータベース・マネージャによってロールバックされないよう、レジストリ変数でDB2LOCK_TO_RB=STATEMENTを指定しておく必要があります。 이 경우에는 거래가 데이터베이스 관리자가 롤백되지 않도록 레지스트리 변수 DB2LOCK_TO_RB = STATEMENT를 지정해야합니다. ちなみに、データベース・マネージャによって、ロールバックされた場合は、「SQL0911N」のリターン・コードですが、STATEMENTを指定すると、「SQL0913N」が返されます。 덧붙여서 데이터베이스 관리자가 롤백되면, "SQL0911N"반환 코드입니다. STATEMENT를 지정하면 "SQL0913N"이 반환됩니다.

なお、LOCKTIMEOUTは、デフォルトは「-1」で、ロック・タイムアウトを検出せず、永遠に解放を待ち続ける設定となっていますが、同時実行性の低下、デッド・ロックの発生につながりますので、必ずチューニングするようにしてください。 게다가, LOCKTIMEOUT, 기본값은 "-1"잠금 시간 제한을 찾지 못해 영원히 방출을 기다리는 유지 설정이되어 있지만, 동시성 하락, 교착 상태의 발생에 연결되므로, 언제나 조정하도록합니다.

Point Point
DB2では、Oracleの「NOWAIT」オプションに対応する機能がない。 DB2에서는 Oracle "NOWAIT"옵션에 해당하는 기능이 없다.
DB2では、ロック待機する時間を「LOCKTIMEOUT」パラメータで調整する。 DB2는 잠금 대기 시간을 "LOCKTIMEOUT"매개 변수로 조정한다.

ロック・エスカレーション 잠금 에스 컬 레이션

ここではOracleとの比較という話から外れますが、DB2で発生し得るロック・エスカレーションについて説明します。 여기에서는 Oracle과의 차이는 얘기에서 벗어난 있지만 DB2에서 발생할 수있는 잠금 에스 컬 레이션에 대해 설명합니다. ロック・エスカレーションとは、1つのアプリケーションが多量の行ロックでロック用メモリ領域を占有することを防ごうとする働きで、一種の縮退運転の機能です。 잠금 에스 컬 레이션은 1 개의 응용 프로그램이 풍부 행 잠금 고정 용 메모리 공간을 점유하는 것을 막으려는 일에 일종의縮退운전 기능입니다. 多数の行ロックを1つの表ロックに代えてロックの量を一挙に減らします。 많은 행 잠금을 1 개의 테이블 잠금 대신 고정 양을 한꺼번에 줄입니다. ロック用メモリ領域の大きさは、「LOCKLIST」(データベース構成パラメータ)により決定します。 고정 용 메모리 영역의 크기는 "LOCKLIST"(데이터베이스 구성 매개 변수)에 의해 결정됩니다. この領域の大きさ以上にロック情報が格納されるか、あるいは、単一アプリケーションが「MAXLOCKS」(データベース構成パラメータ)以上の割合でLOCKLISTを使用した場合に、ロック・エスカレーションが発生します(図5)。 이 영역의 크기 이상으로 고정 정보를 저장하거나, 혹은 단일 응용 프로그램이 "MAXLOCKS"(데이터베이스 구성 매개 변수) 이상의 비율로 LOCKLIST을 사용하면 잠금 에스 컬 레이션이 발생합니다 (그림 5 ).

図5 DB2でロックを管理するメモリ領域 그림 5 DB2에 자물쇠를 관리하는 메모리 영역

しかし、ロック・エスカレーションは、アプリケーションの並行性に影響します。 그러나 잠금 에스 컬 레이션은 응용 프로그램의 동시성에 영향을줍니다. 例えば、アプリケーションがロック・エスカレーションの発生によって、ある表の共用ロックを保持した場合、ほかのアプリケーションはその表内の行の更新はできなくなります。 예를 들면, 응용 프로그램이 잠금 에스 컬 레이션을 생성하 한 표 공유 잠금을 유지하는 경우, 다른 응용 프로그램은 테이블에서 행을 업데이 트는 수없습니다. 同様に、アプリケーションが表の排他ロックを保持した場合、ほかのアプリケーションはその表内の行の読み取りや更新ができません。 마찬가지로 응용 프로그램이 테이블의 단독 잠금을 유지하는 경우, 다른 응용 프로그램은 테이블에서 행을 읽고 업데이트할 수없습니다.

そこで、通常DB2のアプリケーション設計としては、ロック・エスカレーションを発生させないようにLOCKLISTとMAXLOCKSのパラメータをチューニングします。 그래서 보통 DB2 애플 리케이션 디자인으로 잠금 에스 컬 레이션을 생성하지 않도록 LOCKLIST과 MAXLOCKS 매개 변수를 조정합니다. チューニングする際には、その使用環境でどれだけLOCKLISTが使われているかをモニタリングし、最適値を導き出します。 튜닝 때는 사용 환경에서 얼마나 LOCKLIST이 사용하고있는지를 감시하고, 최적 값을導き出し. LOCKLISTとMAXLOCKSのデフォルト値は非常に小さいので、必ず大きくする必要があると考えるべきでしょう。 LOCKLIST과 MAXLOCKS의 기본값은 아주 작기 때문에 반드시 늘릴 필요가 있다고 생각해야합니다.

Point Point
ロック・エスカレーションは、アプリケーションが多量の行ロックにより、ロック用メモリ領域を占有することを防ぐために、多数の行ロックを1つの表ロックに代える働き。 잠금 에스 컬 레이션은 응용 프로그램이 풍부 행 고정하여 고정 용 메모리 공간을 점유하는 것을 방지하기 위해 많은 행을 잠금을 1 개의 테이블 자물쇠에代える일.
ロック・エスカレーションが発生しないようにロック用メモリ領域を管理するデータベース構成パラメータ(LOCKLIST、MAXLOCKS)をチューニングする。 잠금 에스 컬 레이션이 발생하지 않도록 고정 용 메모리 공간을 관리하는 데이터베이스 구성 매개 변수 (LOCKLIST, MAXLOCKS)를 조정한다.

今回のまとめ 이번 요약

今回は、OracleとDB2の「分離レベルとロッキング・メカニズム」の違い、およびそれによる両者の振る舞いの違いを解説しました。 이번에는 Oracle과 DB2 "격리 수준과 잠금 메커니즘"의 차이와 그에 따른 양측 행태의 차이를 설명했습니다. これらの違いは、あくまでも各ベンダの設計思想の違いです。 이 차이는 어디 까지나 각 공급 업체의 설계 개념의 차이입니다. 決して、どちらが優れているというわけではありません。 결코 어느 쪽이 뛰어나다라는 것은없습니다. 開発者がロッキング・メカニズムの差異を理解することは、最終的には、ユーザーに優しく実用的なシステムを構築することにつながります。 개발자가 잠금 메커니즘의 차이를 이해하는 것은 궁극적으로 사용자에게 좋아하게 실제적인 시스템을 구축하는 데 도움이됩니다. 今回の内容を参考に、それぞれのRDBMSの癖を理解して、そのRDBMSの性能をうまく引き出してください。 이번 내용을 참고로 각 RDBMS 버릇을 이해하고 그 RDBMS 성능을 잘 이끌어주십시오.

次回は、OracleとSQL Serverのパフォーマンス・チューニング方法の比較について同様に解説します。 다음은 Oracle 및 SQL Server 성능 조정 방법의 비교를 유사하게 설명합니다. (次回に続く) (다음에 계속)