Höga CPU- eller minnestillslag kan uppstå med frågor som använder optimerad kapslad loop eller batchsortering
Den här artikeln hjälper dig att lösa problemet med hög CPU-användning när du kör frågor i SQL Server.
Gäller för: SQL Server
Ursprungligt KB-nummer: 2009160
Symptom
När du använder Microsoft SQL Server som har en mycket samtidig arbetsbelastning kan du märka några prestandaproblem i frågor. Det här beteendet kan visas som medelhög till hög CPU-användning eller extrema begäranden om minnesbidrag.
Du kan också uppleva andra biverkningar, till exempel OOM-tillstånd, minnestryck för plancacheavhysning eller oväntade RESOURCE_SEMAPHORE
väntetider.
Dessutom kanske du märker att frågeplaner för frågor som förbrukar mycket CPU eller minnen har attributet OPTIMIZED för en kapslad loopkopplingsoperator inställd på True.
Orsak
Det här problemet kan inträffa i vissa fall där SQL Server-frågeprocessorn introducerar en valfri sorteringsåtgärd för att förbättra prestanda. Den här åtgärden kallas för "Optimerad kapslad loop" eller "Batch-sortering" och frågeoptimeraren avgör när operatorerna ska introduceras bäst. I sällsynta fall berör frågan bara några rader, men installationskostnaden för sorteringsåtgärden är så betydande att kostnaden för den optimerade kapslade loopen överväger dess fördelar. I dessa fall kan du därför se långsammare prestanda jämfört med vad som förväntas.
Åtgärd
Spårningsflagga 2340
Åtgärda problemet genom att använda spårningsflagga 2340 för att inaktivera optimeringen. Spårningsflagga 2340 instruerar frågeprocessorn att inte använda en sorteringsåtgärd (batchsortering) för optimerade kapslade loopkopplingar när en frågeplan genereras. Detta påverkar hela instansen.
Innan du aktiverar den här spårningsflaggan kan du testa dina program noggrant för att se till att du får de förväntade prestandafördelarna när du inaktiverar den här optimeringen. Det beror på att sorteringsoptimeringen kan vara till hjälp när det finns en stor ökning av antalet rader som berörs av planen.
Mer information finns i DBCC TRACEON – Trace Flags (Transact-SQL).
Ändra kod för att använda DISABLE_OPTIMIZED_NESTED_LOOP tips
Du kan också använda följande DISABLE_OPTIMIZED_NESTED_LOOP
frågetips för att inaktivera optimeringen på frågenivå.
SELECT * FROM Person.Address
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION (USE HINT (DISABLE_OPTIMIZED_NESTED_LOOP));
Mer information finns i DISABLE_OPTIMIZED_NESTED_LOOP.
Mer information
Startalternativ för databasmotortjänsten
Gäller för
- SQL Server 2005 via SQL Server 2019