Opened 13 years ago

Closed 13 years ago

Last modified 13 years ago

#1552 closed defect (fixed)

DB_BUSY errors generated under load

Reported by: brucedechant Owned by: brucedechant
Priority: high Milestone: 2.3
Component: Server Version: 2.2.0
Severity: major Keywords:
Cc: External ID:

Description (last modified by brucedechant)

The server can generate DB_BUSY errors under load because the session repository used by the server to hold all of the client session information encounters too much database contention when multiple clients need their session information updated.

The DBXML database used for the session repository does not perform well under this condition and ends up locking out other threads from updating session information while the updates are done for the thread that has the database lock. The locking of the database is required in order to perform write operations and this can take longer than the server’s retry mechanism allows resulting in DB_BUSY errors being generated for the waiting threads.

The solution to address this issue is to remove the bottleneck of all session information being funneled through a single session repository. By having a session repository per created session the bottleneck is removed with the only side effect being an increase in the memory used by the server.

To allow for better control over the number of created session repositories a new serverconfi.ini property should be added to allow restricting this as needed. Also, in order to be more flexible a new serverconfig.ini property should be added to allow using the old repository solution or the new solution.

[ResourceServiceProperties]
# SessionRepositoriesConfig        Sets whether to use a single file session 
#                                  repository or a session repository file per session.
#                                       SingleFile or FilePerSession
# SessionRepositoriesLimit         The total number of active session files allowed.
#                                  This setting only works when FilePerSession
#                                  is used.
SessionRepositoriesConfig          = FilePerSession
SessionRepositoriesLimit           = 200

Change History (5)

comment:1 by brucedechant, 13 years ago

Description: modified (diff)
Owner: set to brucedechant

comment:2 by brucedechant, 13 years ago

Description: modified (diff)

comment:3 by brucedechant, 13 years ago

Description: modified (diff)

comment:4 by brucedechant, 13 years ago

Resolution: fixed
Status: newclosed

Fixed. r5455

comment:5 by brucedechant, 13 years ago

Fixed. sandbox/adsk/2.2gp r5580

Note: See TracTickets for help on using tickets.