Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Cosa causerebbe lo sniffamento dei parametri su un computer e non su un altro?

Supponendo che tu intenda che entrambe le macchine si stavano connettendo allo stesso server, probabilmente c'era una differenza di impostazione che ha impedito la condivisione del piano inappropriato tra le due connessioni.

Affinché una connessione possa riutilizzare un piano precedentemente memorizzato nella cache, alcune impostazioni (chiavi della cache del piano) devono essere le stesse, incluso ANSI_NULLS , ARITHABORT , Language , DATEFIRST e schema predefinito (se la query si basa su una risoluzione dei nomi implicita).

Puoi visualizzarli guardando sys.dm_exec_plan_attributes (quelli dove is_cache_key=1 devono essere gli stessi tra le connessioni).

Un elenco completo degli attributi in cui is_cache_key=1 è

dbid_execute
required_cursor_options
compat_level
parent_plan_handle
date_format
language_id
status
merge_action_type
is_replication_specific
objectid
acceptable_cursor_options
date_first
set_options
user_id
dbid
optional_spid
optional_clr_trigger_objid
optional_clr_trigger_dbid

set_options e cursor_options sono bit flag che comprendono una varietà di opzioni come documentato qui . Nella mia sperimentazione user_id in realtà si riferisce a schema_id(default_schema_name) anziché principal_id .