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

Hvad ville forårsage parameter sniffing én computer og ikke en anden?

Hvis du antager, at begge maskiner oprettede forbindelse til den samme server, var der sandsynligvis en indstillingsforskel, der gjorde, at den upassende plan ikke blev delt mellem de to forbindelser.

For at en forbindelse kan genbruge et tidligere cachelagret plan, skal en hel del indstillinger (plancache-nøgler) være de samme inklusive ANSI_NULLS , ARITHABORT , Language , DATEFIRST og standardskema (hvis forespørgslen er afhængig af en implicit navneopløsning).

Du kan se disse ved at se på sys.dm_exec_plan_attributes (dem hvor is_cache_key=1 skal være ens mellem forbindelser).

En komplet liste over de attributter, hvor is_cache_key=1 er

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 og cursor_options er bitflag, der omfatter en række muligheder som dokumenteret her . I mit forsøg user_id refererer faktisk til schema_id(default_schema_name) i stedet for principal_id .




  1. Hvordan laver man union alle SQL-SQLite forespørgsler efter case-sætning?

  2. Brug af forberedte udsagn med markør

  3. Forbedre SQL INSERT-forespørgsel for at undgå sql-injektioner

  4. Undslippende enkelte anførselstegn i PHP/MySQL-indsæt virker ikke