Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Co spowodowałoby podsłuchiwanie parametrów na jednym komputerze, a nie na drugim?

Zakładając, że masz na myśli, że obie maszyny łączyły się z tym samym serwerem, prawdopodobnie istniała różnica w ustawieniach, która spowodowała, że ​​nieodpowiedni plan nie został udostępniony między dwoma połączeniami.

Aby połączenie mogło ponownie wykorzystać wcześniej zbuforowany plan, kilka ustawień (klucze pamięci podręcznej planu) musi być takich samych, w tym ANSI_NULLS , ARITHABORT , Language , DATEFIRST i domyślny schemat (jeśli zapytanie opiera się na niejawnym rozpoznawaniu nazw).

Możesz je zobaczyć, patrząc na sys.dm_exec_plan_attributes (te, w których is_cache_key=1 muszą być takie same między połączeniami).

Pełna lista atrybutów, w których is_cache_key=1 jest

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 i cursor_options to flagi bitowe zawierające różne opcje jak udokumentowano tutaj . W moim eksperymencie user_id faktycznie odnosi się do schema_id(default_schema_name) zamiast principal_id .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę wyłączyć aktualizację tabeli dla wszystkich użytkowników?

  2. Count(*) zwraca wartość null

  3. Połącz XML bez rzutowania typu na ciąg

  4. Sprawdź zmiany we wszystkich innych kolumnach na podstawie podobieństw w jednej kolumnie

  5. Manipulowanie strukturą stołu