sql >> Databáze >  >> RDS >> Sqlserver

Co by způsobilo sniffování parametrů na jednom počítači a na druhém ne?

Za předpokladu, že máte na mysli, že se oba stroje připojovaly ke stejnému serveru, pak pravděpodobně existoval rozdíl v nastavení, který způsobil, že nevhodný plán nebyl sdílen mezi dvěma připojeními.

Aby připojení znovu použilo dříve uložený plán, musí být několik nastavení (klíče mezipaměti plánu) stejných, včetně ANSI_NULLS , ARITHABORT , Language , DATEFIRST a výchozí schéma (pokud se dotaz spoléhá na jakýkoli implicitní překlad názvů).

Můžete je zobrazit v sys.dm_exec_plan_attributes (ty, kde is_cache_key=1 mezi připojeními musí být stejné).

Úplný seznam atributů, kde is_cache_key=1 je

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 a cursor_options jsou bitové příznaky obsahující různé možnosti jak je zdokumentováno zde . V mém experimentu user_id ve skutečnosti odkazuje na schema_id(default_schema_name) spíše než principal_id .




  1. Jak porovnat dva sloupce a najít neshodné záznamy v MySQL

  2. Použití kurzoru ve smyčce uložené procedury

  3. Jak získat počet konkrétních řádků z jiné tabulky v poddotazu

  4. Cizí klíče, blokování a konflikty aktualizací