[OpenSIPS-Devel] [NEW] Database Optimisation - multi-row insert DB ops

Vlad Paiu vladpaiu at opensips.org
Wed Jun 22 17:52:03 CEST 2011


Hello all,

As we have seen from previous performance tests, database operations are 
very costly, and have a serious impact on the performance of the proxy, 
so, whenever possible, we should try to decrease the number of DB 
queries that OpenSIPS has to do.

The solution is to merge multiple rows into a single query - instead of 
inserting rows one by one into the database (one row per insert query), 
OpenSIPS will now cache rows in memory, and only insert them to DB when 
a certain number of rows have piled up in cache. The flushing of the 
rows will be done within a single SQL command.

So, as the existing design does not allow asynchronous DB queries (so to 
optimize the  query itself), this new features tries to reduce the 
number of queries by combining several DB ops in a single query (for 
insert operations).

Two new parameters have been added to the OpenSIPS core :
     query_buffer_size - number of rows that will be flushed at once to 
the database. [1]
     query_flush_time - if a query is being held in memory longer that 
this number of seconds, it will be forcefully flushed to the database by 
a timer. This is done to preserve real-time synchronization with the DB. [2]

The feature has been currently integrated with accounting, siptrace and 
avpops, as well as with the write-back timers in the dialog and usrloc 
modules.

For more in detail explanations of how this works and how much does this 
new feature influence performance, see [3].

[1] http://www.opensips.org/Resources/DocsCoreFcn#toc67
[2] http://www.opensips.org/Resources/DocsCoreFcn#toc68
[3] http://www.opensips.org/Resources/InsertBuffering


Regards,

-- 
Vlad Paiu
OpenSIPS Developer




More information about the Devel mailing list