Symptomen
Wanneer u een tabelvariabele met een groot aantal rijen in een tabel samenvoegt en deze vervolgens verbindt met andere tabellen, kunt u met de query Optimizer een inefficiënt queryplan kiezen, dat kan leiden tot trage queryprestaties.
Oplossing
Nadat u deze hotfix hebt toegepast, kunt u traceringsvlag 2453 inschakelen zodat een tabelvariabele opnieuw kan worden gecompileerd wanneer voldoende rijen zijn gewijzigd. Dit kan leiden tot een efficiënter abonnement voor de query Optimizer. Het probleem is voor het eerst opgelost in de volgende cumulatieve update of/en service packs voor SQL Server.
Cumulatieve update 3 voor SQL Server 2014 /en-us/help/2984923
Elke nieuwe cumulatieve update voor SQL Server bevat alle hotfixes en alle beveiligingsoplossingen die zijn opgenomen in de vorige cumulatieve update. Bekijk de nieuwste cumulatieve updates voor SQL Server:
Service packs zijn cumulatief. Elk nieuw Service Pack bevat alle correcties in eerdere service packs, samen met eventuele nieuwe oplossingen. We raden u aan het meest recente Service Pack en de nieuwste cumulatieve update voor dat Service Pack toe te passen. U hoeft geen vorig Service Pack te installeren voordat u het nieuwste Service Pack installeert. Gebruik tabel 1 in het volgende artikel voor meer informatie over de meest recente Service Pack en de nieuwste cumulatieve update:
De versie, de editie en het update niveau van SQL Server en de bijbehorende onderdelen bepalen
Meer informatie
Wanneer u een tabelvariabele gebruikt in een batch of procedure, wordt de query gecompileerd en geoptimaliseerd voor de aanvankelijke lege status van tabelvariabelen. Als deze tabelvariabele met veel rijen tijdens de uitvoering is ingevuld, is het mogelijk dat het voorgecompileerde query-abonnement niet meer optimaal is. U kunt bijvoorbeeld een tabelvariabele met een geneste lus verbinden, aangezien de query meestal efficiënter is voor een klein aantal rijen. Dit queryplan kan onefficiënt zijn als de tabelvariabele miljoenen rijen bevat. Een hash-koppeling kan onder deze voorwaarde een betere keuze zijn. Als u een nieuw queryplan wilt maken, moet dit opnieuw worden gecompileerd. In tegenstelling tot andere gebruikers of tijdelijke tabellen, verandert de wijziging van het aantal rijen in een tabelvariabele niet als een query opnieuw wordt gecompileerd. U kunt dit meestal omzeilen met de optie optie (hercompilatie), waarvan de eigen overheadkosten gelden. De traceringsvlag 2453 biedt de voordelen van het opnieuw compileren van query's zonder optie (opnieuw COMPILERen). Deze traceringsvlag wijkt af van de optie van de optie (hercompilatie) in twee hoofd overwegingen. (1) de drempelwaarde voor het aantal rijen wordt gebruikt als andere tabellen. De query hoeft niet te worden gecompileerd voor elke optie voor het uitstellen van een uitvoering. Het compileerprogramma wordt alleen opnieuw gecompileerd wanneer de wijziging van het aantal rijen groter is dan de vooraf gedefinieerde drempelwaarde. (2) optie (opnieuw COMPILERen) zorgt ervoor dat de query parameters uitstelt en de query voor ze optimaliseert. Deze traceringsvlag dwingt geen parameter te zien.Opmerking deze traceringsvlag moet zijn ingeschakeld in runtime. U kunt deze traceringsvlag niet gebruiken met QUERYTRACEON. Deze traceringsvlag moet wees voorzichtig met het vergroten, omdat het aantal query's opnieuw kan worden gecompileerd, wat meer kosten kost dan besparingen met een betere query optimalisering.
Status
Microsoft heeft bevestigd dat dit probleem zich kan voordoen in de Microsoft-producten die worden vermeld in de sectie Van toepassing op.