[asterisk-dev] voicemail: AST_LIST_LOCK in find_user necessary when using realtime?

Tobias Engel t-asterisk-dev at tobias.org
Thu Oct 25 06:06:37 CDT 2007


Hi,

I am currently evaluating the performance of voicemail when using ODBC
voicemail storage and ODBC realtime voicemail config.

When there are about 100 parallel connections to asterisk (1.4.11, btw),
all leaving voicemails, the peformance becomes really abysmal:
Connections take over a minute before they are even accepted, etc.

Since this does not happen when just using realtime for the voicemail
config, but storing the messages itself on the local harddisk, I assumed
some db (Oracle) or ODBC bottleneck (the CPU usage never goes over 20%).
But a few hundred added debug statements and some tcpdump sessions
later, to my surprise I found out that most of the time is spent waiting
for a lock on the "users" list in "find_user".

So far I couldn't find out why this only happens with ODBC message
storage, but since this users list is - as far as I can see from the
source - unused when using realtime, do I even need this lock?

When the user data is fetched from the db, the operation should be
atomic - either it's there or it's not there, right?

So do you think it is safe to remove the AST_LIST_LOCK call for realtime
usage?

And does anybody have any insights on these performance issues? (I also
found out that it takes sometimes up to 6 seconds from the SQLExecute
call in res_odbc until the call is really forwarded to the database -
but I assume this is an ODBC issue)

Thanks for your help,
-Tobias



More information about the asterisk-dev mailing list