Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was würde dazu führen, dass Parameter auf einem Computer und nicht auf einem anderen geschnüffelt werden?

Angenommen, Sie meinen, dass sich beide Computer mit demselben Server verbinden, dann gab es wahrscheinlich einen Einstellungsunterschied, der dazu führte, dass der unangemessene Plan nicht zwischen den beiden Verbindungen geteilt wurde.

Damit eine Verbindung einen zuvor zwischengespeicherten Plan wiederverwenden kann, müssen einige Einstellungen (Plan-Cache-Schlüssel) gleich sein, einschließlich ANSI_NULLS , ARITHABORT , Language , DATEFIRST und Standardschema (wenn die Abfrage auf einer impliziten Namensauflösung beruht).

Sie können diese anzeigen, indem Sie sich sys.dm_exec_plan_attributes ansehen (diejenigen, bei denen is_cache_key=1 müssen zwischen den Verbindungen gleich sein).

Eine vollständige Liste der Attribute, bei denen is_cache_key=1 ist ist

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 und cursor_options sind Bit-Flags, die eine Vielzahl von Optionen umfassen wie hier dokumentiert . In meinem Experiment user_id bezieht sich tatsächlich auf schema_id(default_schema_name) statt principal_id .