Am 09.09.2011 15:20, schrieb Klaus Darilion: > Hi! > > I have PDNS 3.0 in a slave setup (not even answering queries, just > fetching zones and writing them into a postgresql database). > > Currently ~10 000 zones are configured. Every slave-cycle-interval=60 > PDNS checks if the "refresh" is expired, thus causing 10 000 SOA > queries, taking around 5 seconds.
Seems like PDNS' slave zone checking is quite inefficient: 1. get the list of configured slave zones: "info-all-slaves-query" select id,name,master,last_check,type from domains where type='SLAVE' 2. get "refresh" from SOA of all these domains: select content,ttl,prio,type,domain_id,name, case when auth then 1 else 0 end as auth from records where type='SOA' and name=E'foo.bar' 3. calculate for every zone if zone should be refreshed if (last_check + refresh < time(0)) ... IMO it would be much more efficient if the calculation would be done when updating the domains table (instead of updating last_check also update a additional 'next_check' column). Thus, changing the "info-all-slaves-query" from: select id,name,master,last_check,type from domains where type='SLAVE' to (Postgresql syntax) select id,name,master,last_check,type from domains where type='SLAVE' and last_check!=NULL and next_check < EXTRACT(EPOCH FROM NOW()); Of course the next_check column must be updated too on SOA-Checks/AXFR. As long as PDNS doesn't to that, we can work around it by having an update-trigger on the domains table, which updates 'next_check' on 'last_check'-updates. I think this should work fine without any side-effects. Of course it would be more efficient if this could be implemented in the "update-lastcheck-query" (you can see this as a feature request :-) regards Klaus _______________________________________________ Pdns-users mailing list [email protected] http://mailman.powerdns.com/mailman/listinfo/pdns-users
