[bind10-dev] b10-auth stops responding for several tens of seconds after receiving IXFR

Naoki Kambe kambe at jprs.co.jp
Wed Jan 9 09:29:30 UTC 2013


Hello,

As Stephen-san suggested below, could this performance issue be
improved by setting as below?

  https://lists.isc.org/pipermail/bind10-dev/2010-November/001573.html

   PRAGMA synchronous = OFF
   PRAGMA journal_mode = MEMORY

>From my quick look, I couldn't find any other codes setting these than
dhcp-ubench tool.  However this setting might cause a risk of data
loss.  Otherwise could we consider other tips in the article
mentioned in the above mail?

Regards,

Naoki Kambe

From: JINMEI Tatuya / 神明達哉 <jinmei at isc.org>
Subject: Re: [bind10-dev] b10-auth stops responding for several tens of seconds after receiving IXFR
Date: Tue, 08 Jan 2013 19:29:50 -0800

> At Tue, 08 Jan 2013 18:01:41 +0900,
> Yoshitaka Aharen <aharen at jprs.co.jp> wrote:
> 
> > > without this, this SQL query should take very long time:
> > > > SELECT rdtype, ttl, sigtype, rdata, name FROM records WHERE zone_id = XX ORDER BY rname, rdtype;
> > > (where "XX" is the zone ID value of the jp zone in your experiment),
> > > while it will be reasonably fast after adding the indexes.
> > It takes 16 seconds with the index (sorry I forgot to measure it before
> > adding the index).
> > 
> > > I'd be interested in whether it can also affect the query handling
> > > during the reload period.
> > It works. With the index, b10-auth does not stop responding to queries
> > while reloading. Thank you for your suggestion.
> > However it slows down xfrin processing. It takes about 1.5 times longer
> > than without the index.
> 
> I'd first suggest checking if it's really IXFR (i.e., it doesn't fall
> back to AXFR, e.g., because xfrin cannot find the given).  In any
> case, we need to discuss the acceptable scalability level with
> SQLite3, and the conclusion is probably just to support other DB
> backends for higher scalability.  Until then, I think we need to work
> this around with the additional indexes at the cost of increased size
> of DB file and longer update time (but, again, it's surprising if it
> really matters for IXFR with a small number of updates).
> 
> Another thing: I think I figured out where the block happens.  The
> builder thread needs to acquire a lock shared with the other auth
> thread in the preparation of a zone reload to avoid a tricky race
> condition.  The assumption here is the preparation is not time
> consuming, but it involves creating a data source iterator with
> sending an SQL query, and in this SQLite3 case, the query handling is
> really time consuming as we now know.  We should probably delay the
> first query so that we can guarantee the iterator creation is not a
> "blocking" operation (whether it's the restrictive SQLite3 or other
> server-based DB systems).  If we do this, I guess this particular
> problem of yours will be resolved (although the iteration query is
> still heavy so it'd still take unnecessarily long).  If you're
> interested, a quick hack workaround is the patch copied below.  If my
> guess is correct, it will also solve the blocking problem even without
> the additional indexes (of course, this patch is a quick hack and is
> not correct in that it simply removes the necessary lock.  but it
> should be safe in your setup where auth only refers to the SQLite3
> data source for loading, not for serving).
> 
> ---
> JINMEI, Tatuya
> Internet Systems Consortium, Inc.
> 
> diff --git a/src/bin/auth/datasrc_clients_mgr.h b/src/bin/auth/datasrc_clients_mgr.h
> index 5bbdb99..05df8b0 100644
> --- a/src/bin/auth/datasrc_clients_mgr.h
> +++ b/src/bin/auth/datasrc_clients_mgr.h
> @@ -622,7 +622,9 @@ DataSrcClientsBuilderBase<MutexType, CondVarType>::getZoneWriter(
>      // source for lookup.  So we need to protect the access here.
>      datasrc::ConfigurableClientList::ZoneWriterPair writerpair;
>      {
> +#if 0                           // experimentally disabled
>          typename MutexType::Locker locker(*map_mutex_);
> +#endif
>          writerpair = client_list.getCachedZoneWriter(origin);
>      }
>  
> _______________________________________________
> bind10-dev mailing list
> bind10-dev at lists.isc.org
> https://lists.isc.org/mailman/listinfo/bind10-dev
> 


More information about the bind10-dev mailing list