From: Michael S. <Mic...@lr...> - 2007-02-28 15:39:43
|
On Wed, 28 Feb 2007, Dan Faerch wrote: > Michael Storz wrote: > > > db_cleandelay seconds longer than the strict one. Taking the default this > > means it is just half an hour longer, which is at least not noticeable for > > the AWLs. > > > > > Well. We cant really assume what ppl use for db_cleandelay.. I use 60 > seconds. Someone might do it once every week. You never know ;). We use 1 hour. I think, because as you said, we do not know what people are using for db_cleandelay, we should either provide a strict implementation or the possibility for the user to choose which implementation he wants. As I said in another email, I think I will be able to provide a patch for such a choice. > > > In the next step this select statement will hit the > > query cache as long as the table involved hasn't changed. This could give > > us a second gain especially for the tables from_awl or domain_awl which do > > not change often. > > > You mean the query-cache like the one build into newer MySql's? Right, since version 4.0.1 MySQL has a query cache. > I dont know excactly how thoose work, but why should there be any > difference when the actual where statement doenst change. I dont see > anywhere that ie. a timestamp is stuck into the statement. Its all > static information and thus, in my head, should still hit the query cache. > > Most select needs a WHERE statment. Eg. WHERE sender_name =, WHERE src > =, ect.ect. So i dont see how adding the max_connect_age, > reconnect_delay or awl_age values (which is static) will change how the > cache works. > The query cache uses the select statement as a "text" key. That means, using 'select' or 'SELECT' is already a different statement. If we implement strict expiration time, then every select of the is_in or count subroutines will have a timestamp: Example from sub is_in_from_awl: my $sth = $self->prepare("SELECT 1 FROM $from_awl " . 'WHERE sender_name = ? ' . 'AND sender_domain = ? ' . 'AND src = ? ' . 'AND last_seen > ' . $self->past_tstamp($self->{sqlgrey}{awl_age}, 'DAY') ); If now() is 2007-02-28 16:41:08, for MySQL you will get the statement SELECT 1 FROM from_awl WHERE sender_name = ? AND sender_domain = ? AND src = ? AND last_seen > timestamp '2007-02-28 16:11:08' - INTERVAL 36 DAY One second later, now changes to 2007-02-28 16:41:09 and you have a textual different select statement. For a loose implementation the part 'AND last_seen > timestamp '2007-02-28 16:11:08' - INTERVAL 36 DAY' will be ommitted and you always get the same statement (for the same src and sender). > > - Dan > > ps. Based on this, are you saying i shouldnt apply the "is_active" patch > you made? As I said, I'm thinking about providing a more elaborated patch :-) Michael Storz -- ====================================================== Leibniz-Rechenzentrum | <mailto:St...@lr...> Boltzmannstr. 1 | Fax: +49 89 35831-9700 85748 Garching / Germany | Tel: +49 89 35831-8840 ====================================================== |