Eftersom statistik verkar vara ett hett ämne just nu :-) ... så tänkte jag spinna…
När ska man använda databasinställningen Auto Update Statistics Asynchronously som finns under databasoption i Management Studio?
Inställningen gäller för index- och kolumnstatistik samt SQL-kommandot UPDATE STATISTICS.
Innebörden är att när en query kommer till optimizern kontrolleras om statistiken är aktuell eller inte. Om den inte är aktuell triggas statistiken att uppdateras. Detta är en synkron systemprocess som gör att kompileringen väntar tills statistiken uppdaterats.
Detta kan ta en ansenlig tid om tabellen/tabellerna är stora och kan leda till att t ex klienten timar ut. När man sätter Auto Update Statitics Asynchronously så väntar inte optimizern på att uppdateringen ska gå klart utan kompilerar med den gamla statistiken.
Så hur ska man tänka om man funderar på om man ska sätta denna option? Det passar i regel i ett OLTP-system med många queries och/eller SP:er som körs kontinuerligt. D.v.s ett system där det är viktigt med stabila svarstider och inga batch-laddningar av stora mängder data eller trunkeringar förekommer som kan påverka optimizern att helt byta strategi.
Ett typiskt scenarie är där man har schemalagda jobb som kör nattetid för uppdatering av statistiken. Om det inte är så att man av rent prestandaskäl gör det så kan det kanske vara läge att sätta Auto Update Statistics Asynchronously. För OLAP-system som laddas batchvis är denna option vanligtvis inget alternativ.
Observera att detta gäller inte In-Memory tabeller där full scan alltid måste göras och sker bara när natively kompilerande procedurer kompileras eller då SQL Server startas om.
Ett klargörande: Både Auto Update Statitics och Auto Update Statitics Asynchronously ska alltså sättas under option.