Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Qu'est-ce qui causerait le reniflage de paramètres sur un ordinateur et pas sur un autre?

En supposant que vous vouliez dire que les deux machines se connectaient au même serveur, il y avait probablement une différence de réglage qui empêchait le plan inapproprié d'être partagé entre les deux connexions.

Pour qu'une connexion puisse réutiliser un plan précédemment mis en cache, plusieurs paramètres (clés de cache de plan) doivent être identiques, y compris ANSI_NULLS , ARITHABORT , Language , DATEFIRST et le schéma par défaut (si la requête repose sur une résolution de nom implicite).

Vous pouvez les afficher en consultant sys.dm_exec_plan_attributes (ceux où is_cache_key=1 doivent être les mêmes entre les connexions).

Une liste complète des attributs où is_cache_key=1 est

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 et cursor_options sont des drapeaux binaires comprenant une variété d'options comme documenté ici . Dans mon expérimentation user_id fait en fait référence à schema_id(default_schema_name) plutôt que principal_id .