Qualche tempo fa ho ricevuto una query che ho eseguito molto per uno dei miei utenti. Si stava ancora evolvendo e ottimizzando, ma alla fine si è stabilizzato e ha funzionato abbastanza velocemente, quindi abbiamo creato una procedura memorizzata da esso.Parametro Sniffing (o Spoofing) in SQL Server
Finora, così normale.
La procedura memorizzata, tuttavia, era cane lento. Nessuna differenza sostanziale tra la query e il proc, ma il cambio di velocità è stato enorme.
[Sfondo, siamo in esecuzione SQL Server 2005.]
Un DBA accogliente locale (che non lavora più qui) ha preso uno sguardo alla stored procedure e ha detto "parametro spoofing!" (Edit: anche se sembra che sia possibilmente anche conosciuto come 'il parametro sniffing', il che potrebbe spiegare la scarsità di Google colpisce quando ho provato a cercare fuori.)
Abbiamo avulse alcune delle stored procedure per un il secondo, avvolse la chiamata a questo nuovo proc interiore in quello esterno preesistente, chiamato quello esterno e, presto, fu veloce come la query originale.
Quindi, cosa dà? Qualcuno può spiegare lo spoofing dei parametri?
credito Bonus per
- evidenziando come evitarlo
- suggerendo come riconoscere possibile causa
- discutere strategie alternative, per esempio statistiche, indici, chiavi, per mitigare la situazione
Non è solo una possibilità, è una certezza - non esiste una cosa come lo spoofing dei parametri. È il parametro che annusa. – ErikE