Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Nie daj się zwieść kałuży strumieni

Czasami konwencjonalna mądrość nie jest tak konwencjonalna lub powszechna. Na przykład administratorzy baz danych mogą uważać, że pula STREAMS jest zarezerwowana wyłącznie dla procesów strumieniowych. Tak nie jest, ponieważ inne narzędzia Oracle, takie jak Data Pump i GoldenGate, korzystają z tej puli. Oczywiście, decydując się na użycie dynamicznego zarządzania, automatycznie przydzieli wymaganą pamięć, gdy pojawi się żądanie, jednak pamięć ta musi skądś pochodzić. Oracle „ukradnie” to, czego potrzebuje, z bufora pamięci podręcznej i nie zostanie natychmiast zastąpiony. Spójrzmy na przykład, który to potwierdza, używając Data Pump.

„Ofiarą” będzie baza danych Oracle 12.1.0.2 skonfigurowana z parametrem streams_pool_size ustawionym na 0 (ponieważ strumienie nie są skonfigurowane, oczekuje się, że pula nie będzie używana) oraz skonfigurowane automatyczne zarządzanie pamięcią współdzieloną (parametry sga_target i sga_max_size są ustawione na wartości niezerowe):

SQL> --SQL> -- Pula strumieni NIE jest przeznaczona tylko dla SQL> -- StreamsSQL> --SQL> -- Pompa danych i GoldenGate używają SQL> -- itSQL> --SQL> -- Brak ustawiania rozmiaru dla streamsSQL> -- pula może powodować problemy, gdy jest isSQL> -- po raz pierwszy użyta SQL> --SQL> --SQL> -- Patrząc na parametry bazy danychSQL> -- sprawdź parametry sgaSQL> -- aby zmienić rozmiarSQL> --SQL> pokaż parametr sgaNAME TYP WARTOŚĆ---------------------------------------- -------- --- ------------------------------lock_sga boolean FALSEpre_page_sga boolean TRUEsga_max_size duża liczba całkowita 600Msga_target duża liczba całkowita 600Munified_audit_sga_queue_size liczba całkowita 1048576

Sprawdzając widok V$SGA_DYNAMIC_COMPONENTS pod kątem komponentów o niezerowych bieżących rozmiarach, zwracane są następujące wyniki:

SQL> SQL> format komponentu kolumny a29SQL> set linesize 300 numwidth 12SQL> SQL> select component, current_size, min_size, max_size, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, last_oper_time, granule_size 3 od v$sga_current_sizes 4 gdzie> 0;COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE USER_SPEC_SZ OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER GRANULE_SIZE--------------------------------- -------- ---- ------------ ------------ ------------ ---------- -- ------------- --------- --------- ------------ pula współdzielona 176160768 146800640 176160768 0 6 GROW DEFERRED 15-OCT-19 4194304duża pula 8388608 8388608 125829120 0 1 SHRINK DEFERRED 15-OCT-19 4194304java pool 4194304 4194304 4194304 0 0 STATYCZNE 4194304DEFAULT bufor bufora 411041792 301989888 419430400 0 8 SHRINK DEFERRED 15-OCT-19 4194304Shared IO Pool 20971520 0 20971520 0 1 GROW IMMEDIATE 15-OCT-19 4194304SQL> 

Sprawdzanie, czy streams_pool_size jest ustawione na 0:

SQL> SQL> --SQL> -- Sprawdź, czy pula strumieni jest ustawiona na SQL> -- 0SQL> --SQL> pokaż parametr streamsNAZWA TYP WARTOŚĆ---------------- -------------------- ----------- ------------------- -----------streams_pool_size duża liczba całkowita 0SQL> 

Wykonywany jest eksport Data Pump, a następnie komponenty pamięci dynamicznej są sprawdzane pod kątem rozmiaru:

SQL> SQL> --SQL> -- Uruchom zadanie eksportu danych Pump SQL> -- i zobacz, co stanie się ze streamsSQL> -- pool sizeSQL> --SQL> !expdp parfile=expdp_test.parSQL> SQL> kolumna format komponentu a29SQL> ustaw rozmiar linii 300 numwidth 12SQL> SQL> wybierz komponent, current_size, min_size, max_size, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, last_oper_time, granule_size 3 z v$sga_dynamic_components 4 gdzie current_IZE_SPENTIZE_RRECS_COM OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER GRANULE_SIZE ----------------------------- ------------ ---- -------- ------------ ------------ ------------ ------ ------- --------- --------- ------------ pula wspólna 197132288 146800640 197132288 0 11 WZROST NATYCHMIASTOWY 15-PAŹ- 19 4194304duży basen 8388608 8388608 125829120 0 1 SKURCZ ODROCZONY 15-OCT-19 4194304java pool 4194304 4194304 4194304 0 0 STATIC 4194304pulastreams 8388608 0 8388608 0 2 GROW IMMEDIATE 15-OCT-19 4194304DEFAULT bufor bufora 381681664 301989888 419430400 0 15 SHRINK IMMEDIATE 15-OCT-19 4194304201520 0 1IO Pula 2097 ROZWÓJ NATYCHMIAST 15-OCT-19 41943046 wierszy zaznaczone.SQL> 

Zwróć uwagę, że rozmiar pamięci podręcznej bufora DEFAULT został zmniejszony do 381681664 z początkowego ustawienia 411041792, częściowo po to, aby pomóc „zasilić” pulę strumieni. Testując ten pomysł, streams_pool_size jest ustawiony na 8M (wartość Oracle ustawia ją na dynamiczną) i, aby testy były jak najbardziej równe, baza danych jest zamykana i uruchamiana:

SQL> SQL> --SQL> -- Ustaw wartość streams_pool_size na bieżący SQL> -- valueSQL> --SQL> -- Wyłącz i uruchom bazę danychSQL> --SQL> zmień zestaw systemowy streams_pool_size=8M scope=spfile; Zmieniony system.SQL> SQL> zamknięcie natychmiastowej bazy danych.Odmontowana baza danych.Instancja ORACLE zamknięta.Instancja ORACLE uruchomiona.Całkowity obszar globalny systemu 629145600 bajtów Naprawiono rozmiar 2927528 bajtówZmienny rozmiar 289408088 bajtówBufory bazy danych 331350016 bajtów Bufory Redo 5459968 bajtówZamontowano bazę danych. pre> 

Parametry pamięci dynamicznej sprawdzane pod kątem wartości początkowych:

SQL> SQL> --SQL> -- Sprawdź dynamiczny rozmiar komponentów SGASQL> --SQL> format kolumny komponentu a29SQL> ustaw rozmiar linii 300 numwidth 12SQL> SQL> wybierz komponent, current_size, min_size, max_size, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, last_oper_time, granule_size 3 z v$sga_dynamic_components 4 gdzie current_size> 0;COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE USER_SPEC_SZ OPER_COUNT LAST_OPER_TYP LAST_OPER_TYP LAST_OPER-LEAST_O --------- ------------ ------------ ------------ ----- ------- ------------ ------------- --------- --------- ------------ pula współdzielona 155189248 146800640 155189248 0 2 WZROST NATYCHMIASTOWY 15-OCT-19 4194304duża pula 125829120 125829120 125829120 0 0 STATYCZNE 4194304java pula 4194304 4194304 419430 4 0 0 STATIC 4194304 pula strumieni 8388608 8388608 8388608 8388608 0 STATIC 4194304DEFAULT bufor bufora 327155712 327155712 335544320 0 2 SHRINK IMMEDIATE 15-OCT-19 4194304SQL> SQL> --SQL> -- Usuń poprzedni plik zrzutu SQL> --SQL> !/bin /rm /u01/app/oracle/admin/orcl/dpdump/scott.*

Uruchom ponownie zadanie Data Pump z dostosowanymi ustawieniami puli pamięci:

SQL> SQL> --SQL> -- Uruchom zadanie eksportu danych Pump SQL> -- i zobacz, co stanie się ze streamsSQL> -- pool sizeSQL> --SQL> !expdp parfile=expdp_test.parSQL> SQL> kolumna format komponentu a29SQL> ustaw rozmiar linii 300 numwidth 12SQL> SQL> wybierz komponent, current_size, min_size, max_size, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, last_oper_time, granule_size 3 z v$sga_dynamic_components 4 gdzie current_IZE_SPENTIZE_RRECS_COM OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER GRANULE_SIZE ----------------------------- ------------ ---- -------- ------------ ------------ ------------ ------ ------- --------- --------- ------------ pula współdzielona 197132288 146800640 197132288 0 12 WZROST NATYCHMIASTOWY 15-PAŹ- 19 4194304duży basen 8388608 8388608 125829120 0 1 SKURCZ ODROCZONY 15-OCT-19 4194304java pool 4194304 4194304 4194304 0 0 STATIC 4194304Pula strumieni 8388608 8388608 8388608 8388608 0 STATIC 4194304DEFAULT bufor pamięci podręcznej 381681664 264241152 381681664 0 14 GROW DEFERRED 15-OCT-19 4194304Udostępniona pula we/wy 209715IMMEDIATE 0 Wybrano 19 41943046 wierszy.SQL> 

Zauważ, że bufor DEFAULT bufora został zwiększony, a nie zmniejszony, jak w poprzednim przykładzie. Żadna pamięć nie została „skradziona” z bufora pamięci podręcznej, więc wydajność nie ucierpiała z powodu dynamicznego przesuwania zasobów. Możliwym problemem z ustawieniem streams_pool_size na 0 może być spadek wydajności w momencie alokacji puli strumieni, ponieważ bufor bufora uległ zmniejszeniu w tym samym czasie, kiedy pula strumieni się powiększała. Może to być szczególnie zauważalne w systemach, w których obciążenie użytkownikami jest na początku dość duże.

Jak wspomniano wcześniej, GoldenGate również korzysta z puli strumieni i ze względu na dużą aktywność zatwierdzania w momencie uruchamiania procesu wyodrębniania, może wykazywać potencjalnie alarmującą degradację usługi, która trwa do momentu zakończenia działań związanych z uruchamianiem procesu wyodrębniania. [Inne procesy generowane przez GoldenGate przyczyniają się do spowolnienia, takie jak globalna synchronizacja plików dziennika w celu usunięcia zatwierdzonych danych do dzienników przeróbek.] Jeden system ucierpiał tak bardzo, gdy rozpoczęto proces wyodrębniania, że ​​logowanie do systemu operacyjnego nie było możliwe w przydzielonym czas, powodując, że oprogramowanie monitorujące innej firmy zgłaszało, że bazy danych działające na tym serwerze nie były już dostępne. Ustawienie streams_pool_size na wartość niezerową znacznie przyczyniło się do poprawy ogólnej wydajności podczas uruchamiania procesów wyodrębniania.

Powszechna wiedza może być mieczem obosiecznym; dla każdego przypadku, w którym powszechna wiedza jest prawdziwa, może istnieć jeden lub więcej przypadków, w których tak nie jest. Jedynym realnym rozwiązaniem jest przetestowanie takiej „mądrości”, aby zweryfikować jej dokładność. O wiele lepiej jest wpływać na test, rozwój lub system „piaskownicy” takimi badaniami, niż brać taką „wiedzę” jak „ewangelia” tylko po to, by odkryć, że założenia, na których ta „mądrość” była oparta, były błędne. Wiedza jest lepsza niż zgadywanie; trochę czasu spędzonego na dochodzeniu może przynieść ogromne korzyści, gdy przyjdzie czas na wdrożenie nowego procesu z udziałem Oracle.

# # #

Zobacz artykuły Davida Fitzjarrella


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. gdzie mam umieścić zasoby instalatora (plik wxs, skrypt dmg, ikona) i jak skonfigurować maven antrun podczas wdrażania samodzielnej aplikacji

  2. Jak używać zmiennych w Oracle SQL Developer?

  3. jak sprawdzić, czy baza danych jest spójna po niepełnym odzyskaniu

  4. Importowanie plików w Oracle Apex za pomocą wwv_flow_files

  5. Problem z porównaniem ciągów Oracle PL/SQL