12

Zgodnie z reference documentation flaga transakcji READ ONLY przydaje się inaczej niż przy transakcjach DEFERRABLE?Czy PostgreSQL uruchamia niektóre optymalizacje wydajności dla transakcji tylko do odczytu?

SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY; 

Właściwość transakcja odroczeniu nie ma żadnego wpływu, chyba że transakcja jest również SERIALIZABLE i tylko do odczytu. Gdy wszystkie trzy z tych właściwości są wybrane dla transakcji, transakcja może blokować po pierwszym pobraniu jej migawki, po czym jest w stanie uruchomić bez normalnego narzutu transakcji SERIALIZABLE i bez żadnego ryzyka wniesienia wkładu w anulowane przez błąd serializacji . Ten tryb jest dobrze dostosowany do długotrwałych raportów lub kopii zapasowych.

Czy silnik bazy danych uruchamia inne optymalizacje dla transakcji tylko do odczytu?

+1

Rozumiem, że transakcje odczytu i zapisu wiążą się z pewnymi kosztami, ale nie obciążają tego, dopóki faktycznie coś nie napiszesz. Innymi słowy, jeśli chodzi o wydajność, transakcja 'TYLKO ODCZYT" powinna być taka sama jak transakcja 'READ WRITE', która zawiera tylko odczyty. Wynika to ze sposobu, w jaki Postgres obsługuje przypisanie XID (niektóre informacje na ten temat [tutaj] (https://wiki.postgresql.org/wiki/Hint_Bits)). –

+0

@NickBarnes To również pasuje do mojego zrozumienia. "TYLKO ODCZYTAJ" to naprawdę coś bardziej bezpiecznego. –

+0

Dzięki. Tak więc odroczone transakcje są jedyną znaczącą optymalizacją. –

Odpowiedz

5

Podsumowując komentarze Nick Barnes and Craig Ringer w komentarzach pytanie:

  1. READ_ONLY flag niekoniecznie zapewnia żadnej optymalizacji
  2. Główną zaletą ustawienie flagi TYLKO_ODCZYT jest zapewnienie, że krotka nie będzie modyfikowana