sql >> Database >  >> RDS >> Sqlserver

Parametersnuiven (of spoofen) in SQL Server

Ter info - je moet je bewust zijn van iets anders wanneer je werkt met SQL 2005 en opgeslagen processen met parameters.

SQL Server compileert het uitvoeringsplan van het opgeslagen proces met de eerste parameter die wordt gebruikt. Dus als je dit uitvoert:

usp_QueryMyDataByState 'Rhode Island'

Het uitvoeringsplan werkt het beste met de gegevens van een kleine staat. Maar als iemand zich omdraait en wegrent:

usp_QueryMyDataByState 'Texas'

Het uitvoeringsplan dat is ontworpen voor gegevens ter grootte van Rhode-Island is mogelijk niet zo efficiënt met gegevens ter grootte van Texas. Dit kan verrassende resultaten opleveren wanneer de server opnieuw wordt opgestart, omdat het nieuw gegenereerde uitvoeringsplan is gericht op de parameter die het eerst wordt gebruikt - niet noodzakelijk de beste. Het plan wordt pas opnieuw gecompileerd als er een grote reden voor is, bijvoorbeeld als de statistieken opnieuw worden opgebouwd.

Dit is waar queryplannen van pas komen en SQL Server 2008 biedt veel nieuwe functies die DBA's helpen een bepaald queryplan op de lange termijn vast te zetten, ongeacht welke parameters als eerste worden aangeroepen.

Mijn zorg is dat toen je je opgeslagen proces opnieuw opbouwde, je het uitvoeringsplan dwong om opnieuw te compileren. Je noemde het met je favoriete parameter, en toen was het natuurlijk snel - maar het probleem was misschien niet het opgeslagen proces. Het kan zijn dat het opgeslagen proces op een bepaald moment opnieuw is gecompileerd met een ongebruikelijke set parameters en dus een inefficiënt queryplan. Mogelijk hebt u niets opgelost en krijgt u mogelijk hetzelfde probleem de volgende keer dat de server opnieuw wordt opgestart of het queryplan opnieuw wordt gecompileerd.



  1. PostgreSQL-procesnamen op Solaris

  2. SQL Server - transacties worden teruggedraaid bij fout?

  3. UTF-16/Unicode-gegevens opslaan in SQL Server

  4. MS-Access-basisklasse en afgeleide objecten