Dear Thorpe,
There is a problem with the nsdbi* drivers when the cache used for
prepared statements runs out. The driver deallocates in such situations
a prepared statement before being able to add the new one. On a busy
server, it might run in the same, when preparing the next SQL statement,
and so on. In such situations, performance will drop drastically. The
worst are SQL statements with filled-in constants (tcl-substituted
values) or "IN" clauses.
Try to avoid these.
Some background: A few years ago, i generalized the OpenACS SQL
interface to work either with the nsdbi* driver family or with the good
old nsdb* family. On our busy OpenACS servers the dbi-driver was sooner
or later dropping due to the mentioned reasons in such (re)allocation
loops. Due to lack in resources on my side, i never tried to solve the
problem in nsdbi* to avoid such problems. We switched on on all major
installations back to nsdb*.
Since the configured cache listed below is just 1MB (which is nothing on
today's machines), i would recommend to increase it substantially (e.g.
to 10MB), unless you have good reasons for not doing so. ... and replace
".. WHERE name = '$name' ... " by ".. WHERE name = :name ... " if not
done already.
-gn
On 17.09.19 20:57, THORPE MAYES via naviserver-devel wrote:
Hi,
This happened today:
I was getting thousands of these lines in my server log:
[17/Sep/2019:07:59:07][4924.7f82467f4700][-conn:mealdeliverysoftware:19:25314-]
Notice: dbipg: prepare dbipg_6242353/0 cols 0: deallocate dbipg_6238059
[17/Sep/2019:07:59:07][4924.7f82467f4700][-conn:mealdeliverysoftware:19:25314-]
Notice: dbipg: prepare dbipg_6242354/0 cols 0: deallocate dbipg_6238060
[17/Sep/2019:07:59:07][4924.7f82467f4700][-conn:mealdeliverysoftware:19:25314-]
Notice: dbipg: prepare dbipg_6242355/0 cols 0: deallocate dbipg_6238061
I restarted the server and the problem went away (maybe).
My guess is that configuration is either wrong or not complete. Here
is the section in my config file that deals with this:
# database configuration
ns_section "ns/server/${servername}/module/xxxxx"
ns_param default true ;# This is the default pool for mds
ns_param handles 2 ;# Max open handles to db.
ns_param maxwait 10 ;# Seconds to wait if handle
unavailable.
ns_param maxidle 0 ;# Handle closed after maxidle
seconds if unused.
ns_param maxopen 0 ;# Handle closed after maxopen
seconds, regardles of use.
ns_param maxqueries 0 ;# Handle closed after maxqueries
sql queries.
ns_param checkinterval 600 ;# Check for idle handles every 10
minutes.
ns_param maxhandles 0
ns_param timeout 10
ns_param maxrows 1000
ns_param cachesize [expr1024*1024]
# The following parameters are configured at server-startup.
ns_param user “xxxxxx"
ns_param password xxxxxxx
ns_param database “xxxxxx"
ns_param datasource "user=‘xxxxx' password=‘xxxxx' dbname=‘xxxxxx’"
This is also in the config file for my legacy code:
# database pool configuration
ns_section "ns/db/pool/${default_pool}"
ns_param driver postgres
ns_param connections 40
ns_param datasource localhost:5432:${database_name}
ns_param user xxxxxx
ns_param password xxxxxx
ns_param verbose true
ns_param logsqlerrors true
ns_param extendedtableinfo true
ns_param maxidle 1000000000
ns_param maxopen 1000000000
# Database pools accessible by server
ns_section "ns/server/${servername}/db"
ns_param pools "*"
ns_param defaultpool "${default_pool}"
I will appreciate any help/direction.
Thank you,
Thorpe
Thorpe Mayes
2313 Lockhill-Selma Road, Suite 164
San Antonio, Texas 78230-3007
Phone: (512) 394-8766
_______________________________________________
naviserver-devel mailing list
naviserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/naviserver-devel