sql >> Databáze >  >> RDS >> Sqlserver

Parametr Sniffing (nebo Spoofing) v SQL Server

Pro informaci – když pracujete s SQL 2005 a uloženými procesy s parametry, musíte si být vědomi něčeho jiného.

SQL Server zkompiluje plán provádění uloženého procesu s prvním použitým parametrem. Takže pokud spustíte toto:

usp_QueryMyDataByState 'Rhode Island'

Prováděcí plán bude nejlépe fungovat s daty malého státu. Ale když se někdo otočí a běží:

usp_QueryMyDataByState 'Texas'

Prováděcí plán navržený pro data velikosti Rhode-Island nemusí být tak efektivní s daty velikosti Texas. To může přinést překvapivé výsledky, když je server restartován, protože nově vygenerovaný plán provádění bude zaměřen na jakýkoli parametr, který se použije jako první – ne nutně ten nejlepší. Plán nebude znovu zkompilován, dokud k tomu nebude mít velký důvod, například když se přebudují statistiky.

Zde přichází na řadu plány dotazů a SQL Server 2008 nabízí spoustu nových funkcí, které správcům databází pomáhají dlouhodobě zavádět konkrétní plán dotazů bez ohledu na to, jaké parametry jsou volány jako první.

Obávám se, že když jste přestavěli svůj uložený proces, vynutili jste si rekompilaci exekučního plánu. Zavolali jste to svým oblíbeným parametrem a pak to bylo samozřejmě rychlé - ale problém možná nebyl v uloženém proc. Mohlo se stát, že uložený proces byl v určitém okamžiku znovu zkompilován s neobvyklou sadou parametrů, a tedy neefektivním plánem dotazů. Je možné, že jste nic neopravili a můžete se setkat se stejným problémem při příštím restartu serveru nebo rekompilaci plánu dotazů.



  1. PSQLException:ERROR:vztah TABLE_NAME neexistuje

  2. Jak vygenerovat balíček API tabulky v Oracle SQL Developer?

  3. AKTUALIZACE MySQL:5 nejlepších tipů pro vývojáře T-SQL

  4. Jak mohu zobrazit plán provádění SQL v Oracle?