[ic] interchange and SQL DBMSes: /scan/ fetches anything?!
Steffen Dettmer
steffen at dett.de
Sat Aug 23 17:58:08 EDT 2003
Hi,
this week I upgraded on a test system to current stable IC
version. The old server took 10 seconds to render a HTML page
with two products. The new server (four times CPU power) bought
down the performance even more; it took 30 seconds. Unusable of
course. I wondered why my full text search returning some hunderd
matches just takes 1 second...
I enabled "DataTrace 1" in "interchange.cfg" and got 134.000
lines logfile for a single request returning 2 (two) product
items build via "/scan/" like foundation does. It queried for a
particular product category (as foundation does) containing two
items.
In the log the most interesting line for me was:
dbd_st_prepare: statement = >select * from products <
and:
<- execute= 10944 at DBI.pm line 1468
Why the heck this?! The rest shows up heaps of addtionaly queries:
$ grep "dbd_st_execute" /tmp/icdebug |wc -l
11447
("select shop_id from products where sku = 'xx:xxxxx'")
hum. Each SKU gets fetched, I guess because I use a field more
("shop_id"). But anyway, a select * from products returns that
field already, and there is a WHERE clause missing.
But the nice thing I learned: my DBMS takes 400 queries per
second :-) (PostgreSQL)
If I'd queried *all* products for all ("virutal") shops, this
would be reasonable:
xxxxxxxxx-shop=> select count(*) from products;
count
-------
10944
(1 row)
but I just wanted two. I replaced the /scan/ with a simple
"[query]" using a WHERE clause asking for the category and the
shop identifier. This reduced render time from 30 secs to
somewhat around half a second.
Is this a bug in /scan/? Did I something wrong? Or does /scan/ is
implemented to verify the condition by itself after fetching
*any* possibly needed date from the DBMS?
oki,
Steffen
--
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.
More information about the interchange-users
mailing list