[development] Advanced DB features

Larry Garfield larry at garfieldtech.com
Wed Apr 30 18:18:19 UTC 2008

On Wed, 30 Apr 2008 10:25:13 -0700, "Joshua D. Drake" <jd at commandprompt.com> wrote:

> Case in point, Drupal can easily execute 200 queries to draw a page.
> Why do we do that? It's dumb and inefficient. You lose 30ms for every
> single query just in TCP negotiation. You push that to 5 stored
> procedures that draw blocks, and you have shaved ~ 5 seconds off your
> load in just negotiation. Add a cached procedure and you could shave
> another ~ 5 seconds off. 

My queries, according to dev module, are quite rarely more than 5 ms.  I don't know where you're getting that 30 ms number from.  And, AFAIK, an open SQL connection is a persistent TCP connection, therefore it only has to negotiate the connection once.  MySQL is also really fast at that setup compared to most databases.

I agree that reducing our query count is a good thing, but not because of a 30 ms overhead per query.

>> Even if I doubt support for stored procedures is going
>> to find its way into Drupal since the core has to remain DB
>> agnostic 
> I doubt that is actually an issue. I understand that we have to dumb
> things down for the dolphin but that doesn't mean the api can't be
> smart about it.
> If Catalyst can do it...
>>and I think providing an abstraction layer to sp is hard some
>> oversight may help to see which are the features that could be more
>> relevant to support... I'm at least thinking to transactions.
> Ahh but it can. Remember that even the dolphin has stored procedures.
> Joshua D. Drake

MySQL 5 is slated as a requirement for Drupal 7, so stored procedures will be available... IF we can confirm that we have the necessary permissions to create them on a typical shared host.    SQL Views I don't think we can use due to needing additional server-level permissions to create them in the first place, but I haven't investigated it in detail.  Stored procedures may or may not have a similar issue; I really don't know yet.

At the moment I am not dealing with stored procedures for the D7 database API.  It's big enough as is. :-)  Once it lands, we can think about it then.  

The main reason we have so many queries, though, is flexibility.  Right now Drupal has "dumb modularity"; we call hooks and let them do "whatever", which usually involves queries.  To further optimize our SQL would require either smarter query preparation across hooks or some sort of super-dynamic prepared statement that gets setup by hooks instead.  Neither is a trivial task.

For example, we call path lookup once for each l() function.  That can easily eat up 100 queries right there.  If we knew which ones we'd need, a single query that builds a targeted lookup table would be enormously faster... if we knew which ones we'd need in advance, which we don't.  chx and I were discussing a possible learning/caching algorithm back in February, but I don't know that either of us will have time to do more than discuss due to being busy with other code (testing and databases, respectively, plus the registry).

--Larry Garfield

More information about the development mailing list