2

このページには、「ハッシュアクセスメソッドの場合、必要なロックオブジェクトは1つだけです」と記載されています。

http://www.oracle.com/technology/documentation/berkeley-db/db/programmer_reference/lock_max.html

これは、データベースにアクセスするすべてのプロセス/スレッドが同じロックオブジェクトをロックしようとすることを意味しますか?それは非常に高いロック競合を引き起こしませんか?

ありがとう!

-ミチ

4

1 に答える 1

2

ここで説明しているのは、アプリケーションに必要なロックオブジェクトの数を計算する方法ですが、通常はデフォルトのロックオブジェクト構成(1000)で十分です。これは、特定の単一のデータアクセス操作に必要なロックオブジェクトの数を示しているため、同時データアクセス操作の数を掛けて、ロックオブジェクトの数を適切に構成できます。それは実際にはロックの競合について話しているのではありません。

HASHアクセス方式の場合、指定されたキー値はハッシュバケットに直接マップされます。データにアクセスするために確認(およびロック)する必要があるページは1つだけです。これは、Btree(データにアクセスするために内部インデックスノードをトラバースする必要がある)およびQueue(各レコードとレコードが存在するページをロックする必要がある)とは異なります。

最近のリリースでは、実際には不要なロックをいくつか削除したため、より簡単な方法は次のようになります。

各データベース操作には、

  • アクセスされているページ(Btree、Hash、またはRecno)またはレコード(Queue)の1つのロックオブジェクト、
  • プラスメタデータページ用の1つのロックオブジェクト、
  • プラスBtreeページ分割が必要な場合は1つのロックオブジェクト、
  • 加えて、キューが使用されている場合は、ページごとに1つのロックオブジェクト

基本的に、通常、データアクセスごとに2〜3個のロックオブジェクトがあります。トランザクションは、トランザクションが完了するまでロックオブジェクトを蓄積するため、アプリケーションのトランザクションが通常10レコードにアクセスする場合、そのトランザクションには20〜30個のロックオブジェクトが必要になります。アプリケーションに最大10個の同時スレッドを含めることができる場合は、約300個のロックオブジェクトを持つようにシステムを構成する必要があります。不足しないように、またロックオブジェクトの過剰割り当てによるメモリオーバーヘッドが最小限に抑えられるように、必要以上に構成することをお勧めします(これらは小さな構造です)。

それがお役に立てば幸いです。

デイブ

于 2010-08-16T20:28:39.830 に答える