Skip to Main Content

Berkeley DB Family

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

[BDB TDS] Very bad concurrent write performance due to too many deadlocks

600261Jul 17 2009 — edited Jul 28 2009
Hi, all,

I put some 1K key-value pairs(1M) into two btree database with multiple threads(10 threads) concurrently, But, I got too many deadlocks, the write performance is very very poor even I can not put this into to production!

Db::put: DB_LOCK_DEADLOCK: Locker killed to resolve a deadlock
Db::put: DB_LOCK_DEADLOCK: Locker killed to resolve a deadlock
Db::put: DB_LOCK_DEADLOCK: Locker killed to resolve a deadlock
Db::put: DB_LOCK_DEADLOCK: Locker killed to resolve a deadlock
...

here is the thread worker logic:

txn->start
DB_A->put(key,value) // main db
DB_B->put(value, key) // index db
txn->commit

my environment:
db 4.7.25, BDB TDS, C++ API, Btree Access Method, Duplicated value, page size: 4K.
run deadlock detecting every 100 msec in a separate thread.

By running "db_stats -Co", I see the detail lock table:

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Lock REGINFO information:
Lock Region type
5 Region ID
__db.005 Region name
0x19a2c000 Original region address
0x19a2c000 Region address
0x19a2c0c0 Region primary address
0 Region maximum allocation
0 Region allocated
Region allocations: 300009 allocations, 0 failures, 0 frees, 1 longest
REGION_JOIN_OK Region flags
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Locks grouped by object:
Locker Mode Count Status ----------------- Object ---------------
80001209 WRITE 1 HELD 01234567890123456789>Quer page 524

5 READ 1 HELD 01234567890123456789>Quer handle 4

80001201 WRITE 1 HELD 01234567890123456789>Quer page 7
800011fd WRITE 1 WAIT 01234567890123456789>Quer page 7
800011fe READ 1 WAIT 01234567890123456789>Quer page 7
80001204 READ 1 WAIT 01234567890123456789>Quer page 7
80001205 WRITE 1 WAIT 01234567890123456789>Quer page 7
800011fc READ 1 WAIT 01234567890123456789>Quer page 7
80001200 READ 1 WAIT 01234567890123456789>Quer page 7
80001209 READ 1 WAIT 01234567890123456789>Quer page 7
80001208 WRITE 1 WAIT 01234567890123456789>Quer page 7
80001207 READ 1 WAIT 01234567890123456789>Quer page 7

9 READ 1 HELD 01234567890123456789>Quer handle 6

80001209 WRITE 1 HELD 01234567890123456789>Quer page 0
80001201 WRITE 1 WAIT 01234567890123456789>Quer page 0

1 READ 1 HELD 01234567890123456789>Quer handle 0
9 READ 2 HELD 01234567890123456789>Quer handle 0

1 READ 1 HELD 01234567890123456789>Quer handle 2

80001205 WRITE 1 HELD 01234567890123456789>Quer page 197

80001209 WRITE 2 HELD 01234567890123456789>Quer page 136

800011fd WRITE 1 HELD 01234567890123456789>Quer page 128

80001208 WRITE 1 HELD 01234567890123456789>Quer page 158

80001209 WRITE 1 HELD 01234567890123456789>Quer page 269

80001207 WRITE 1 HELD 01234567890123456789>Quer page 282

80001201 WRITE 1 HELD 01234567890123456789>Quer page 475

80001200 WRITE 1 HELD 01234567890123456789>Quer page 465

80001204 WRITE 1 HELD 01234567890123456789>Quer page 483

800011fc WRITE 1 HELD 01234567890123456789>Quer page 404

80001209 WRITE 1 HELD 01234567890123456789>Quer page 420

800011fe WRITE 1 HELD 01234567890123456789>Quer page 432

When I run it by single thread, it works well with a good write performance. The test case has not read operations.

Any advice is appreciated.

Steve
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Aug 25 2009
Added on Jul 17 2009
9 comments
3,195 views