sql >> Database >  >> RDS >> Sqlserver

Wat zou ervoor zorgen dat parameters de ene computer snuiven en niet de andere?

Ervan uitgaande dat u bedoelt dat beide machines verbinding maakten met dezelfde server, was er waarschijnlijk een instellingsverschil waardoor het ongepaste plan niet werd gedeeld tussen de twee verbindingen.

Om ervoor te zorgen dat een verbinding een eerder in de cache opgeslagen plan opnieuw kan gebruiken, moeten nogal wat instellingen (cachesleutels van het plan) hetzelfde zijn, waaronder ANSI_NULLS , ARITHABORT , Language , DATEFIRST en standaardschema (als de query afhankelijk is van een impliciete naamomzetting).

U kunt deze bekijken door te kijken naar sys.dm_exec_plan_attributes (degene waar is_cache_key=1 moeten hetzelfde zijn tussen verbindingen).

Een volledige lijst van de attributen waar is_cache_key=1 is

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 en cursor_options zijn bitvlaggen met een verscheidenheid aan opties zoals hier gedocumenteerd . In mijn experiment user_id verwijst eigenlijk naar schema_id(default_schema_name) in plaats van principal_id .




  1. Hoe u uw Access-databases ultrasnel kunt maken!

  2. De HAProxy-statistieken voor MySQL en PostgreSQL begrijpen

  3. Oracle-uitvoeringsplannen bij gebruik van de LIKE-operator met een DETERMINISTIC-functie

  4. SQL Server 2008:Kan geen nieuwe kolom in de middelste positie invoegen en gegevenstype wijzigen