Oracle Database 12c
Problemy i rozwiązania
Oracle to jedna z najpopularniejszych baz danych na świecie i znajduje zastosowanie w
wielu firmach. W jej tabelach przechowywane są gigantyczne ilości danych. Zasoby te są
każdego dnia przetwarzane na wiele sposobów, a szybkość dostępu do rezultatów w
sposób kluczowy wpływa na efektywność pracy całej masy ludzi. Jeżeli dostęp do
danych jest utrudniony, to administrator bazy musi błyskawicznie zlokalizować i
rozwiązać problem.
Dzięki tej książce będziesz przygotowany na najbardziej stresujące sytuacje spotykane
w codziennej pracy administratora. W trakcie lektury opanujesz techniki optymalizacji
wykorzystania pamięci i dysków, czasu trwania zapytań SQL oraz wydajności. Znajdziesz
tu również liczne opisy problemów z życia wziętych oraz najlepsze sposoby ich
rozwiązywania. Ponadto nauczysz się monitorować pracę systemu i zidentyfikujesz
problemy, zanim dotkną one jego użytkowników. Przekonasz się, jak kluczową rolę
pełnią właściwie dobrane indeksy. Książka ta jest obowiązkową pozycją dla
każdego administratora bazy danych!
Dzięki tej książce:
zapoznasz się z możliwymi przyczynami problemów z bazą
zoptymalizujesz zużycie pamięci RAM i dysków twardych
stworzysz indeksy, które poprawią wydajność Twojej bazy
będziesz automatycznie regulować i stabilizować zapytania za pomocą
narzędzi SQL Tuning Advisor i SQL Plan Baselines
skutecznie przeanalizujesz wolne zapytania SQL
będziesz przygotowany na problemy z bazą
O autorach (13)
O korektorach merytorycznych (15)
Podziękowania (17)
Wprowadzenie (19)
Rozdział 1. Optymalizacja wydajności tabel (21)
- 1.1. Tworzenie maksymalnie wydajnej bazy danych (22)
- 1.2. Tworzenie przestrzeni tabel i maksymalizacja wydajności (26)
- 1.3. Dobór typów tabel do wymagań biznesowych (28)
- 1.4. Dobór cech tabel zwiększających wydajność (29)
- 1.5. Właściwy dobór typów danych (31)
- 1.6. Zapobieganie opóźnieniom przydzielania rozszerzeń podczas tworzenia tabel (35)
- 1.7. Maksymalizacja prędkości ładowania danych (37)
- 1.8. Wydajne usuwanie danych z tabel (39)
- 1.9. Wyświetlanie automatycznych zaleceń narzędzia Segment Advisor (42)
- 1.10. Ręczne generowanie zaleceń narzędzia Segment Advisor (44)
- 1.11. Automatyczne wysyłanie pocztą e-mail zaleceń narzędzia Segment Advisor (48)
- 1.12. Przebudowa wierszy obejmujących kilka bloków (49)
- 1.13. Wykrywanie łańcuchowania i migracji wierszy (53)
- 1.14. Odróżnienie migracji od łańcuchowania wierszy (54)
- 1.15. Proaktywne zapobieganie migracji/łańcuchowaniu wierszy (55)
- 1.16. Wykrywanie niewykorzystanego miejsca w tabeli (56)
- 1.17. Śledzenie i wykrywanie miejsca poniżej wskaźnika zajętości (57)
- 1.18. Zastosowanie pakietu DBMS_SPACE do wykrywania wolnego miejsca poniżej wskaźnika
zajętości (59)
- 1.19. Zwalnianie niewykorzystanego miejsca w tabelach (60)
- 1.20. Kompresja danych podczas ładowania za pomocą bezpośredniej ścieżki (61)
- 1.21. Kompresja danych dla wszystkich instrukcji DML (64)
- 1.22. Kompresja danych na poziomie kolumny (65)
Rozdział 2. Dobór i optymalizacja indeksów (67)
- 2.1. Czym są B-drzewa? (69)
- 2.2. Wybór kolumn do indeksowania (75)
- 2.3. Tworzenie ograniczenia klucza podstawowego i indeksu (78)
- 2.4. Zapewnienie unikatowości wartości w kolumnie (80)
- 2.5. Indeksowanie kolumn z kluczami obcymi (82)
- 2.6. Kiedy stosować indeks łączony (85)
- 2.7. Zmniejszenie wielkości indeksu za pomocą kompresji (87)
- 2.8. Implementacja indeksu funkcyjnego (89)
- 2.9. Indeksowanie kolumny wirtualnej (91)
- 2.10. Ograniczenie rywalizacji o miejsce w indeksie podczas kilku równoległych
procesów umieszczania danych (92)
- 2.11. Przełączanie widoczności indeksu dla optymalizatora (93)
- 2.12. Tworzenie indeksu bitmapowego dla schematu gwiaździstego (95)
- 2.13. Tworzenie łączonego indeksu bitmapowego (97)
- 2.14. Tworzenie tabeli indeksowej (98)
- 2.15. Monitorowanie wykorzystania indeksów (100)
- 2.16. Maksymalizacja szybkości tworzenia indeksu (101)
- 2.17. Odzyskiwanie niewykorzystanego miejsca indeksu (103)
Rozdział 3. Optymalizacja pamięci instancji bazy danych (107)
- 3.1. Automatyczne zarządzanie pamięcią (107)
- 3.2. Zarządzanie wieloma buforami (110)
- 3.3. Określenie minimalnych wielkości pamięci (112)
- 3.4. Kontrola operacji zmiany wielkości pamięci (113)
- 3.5. Optymalizacja wykorzystania pamięci (114)
- 3.6. Regulacja przydziału pamięci obszarowi PGA (115)
- 3.7. Konfiguracja pamięci podręcznej serwera (118)
- 3.8. Zarządzanie pamięcią podręczną serwera (120)
- 3.9. Zapamiętywanie wyników zapytań SQL (122)
- 3.10. Zapisywanie wyników w pamięci podręcznej klienta (125)
- 3.11. Zapamiętywanie wyników funkcji PL/SQL (127)
- 3.12. Konfiguracja pamięci podręcznej Smart Flash (130)
- 3.13. Regulacja bufora dziennika powtórzeń (131)
- 3.14. Ograniczenie przydziału pamięci obszaru PGA (133)
Rozdział 4. Monitoring wydajności systemu (135)
- 4.1. Implementacja repozytorium AWR (136)
- 4.2. Zmiana interwału zbierania i okresu przechowywania statystyk (137)
- 4.3. Ręczne tworzenie raportów AWR (139)
- 4.4. Tworzenie raportów AWR za pomocą aplikacji Enterprise Manager (142)
- 4.5. Tworzenie raportu AWR dla wybranego zapytania SQL (143)
- 4.6. Tworzenie statystyk odniesienia bazy danych (145)
- 4.7. Zarządzanie statystykami odniesienia za pomocą aplikacji Enterprise Manager (148)
- 4.8. Zarządzanie repozytorium statystyk AWR (149)
- 4.9. Automatyczne tworzenie statystyk odniesienia (151)
- 4.10. Szybka analiza raportów AWR (153)
- 4.11. Ręczne pozyskiwanie informacji o aktywnych sesjach (154)
- 4.12. Pozyskiwanie informacji ASH z aplikacji Enterprise Manager (159)
- 4.13. Pozyskiwanie informacji ASH ze słownika danych (160)
Rozdział 5. Minimalizacja rywalizacji o zasoby (165)
- 5.1. Czas odpowiedzi bazy (165)
- 5.2. Identyfikacja najdłużej oczekujących zapytań SQL (168)
- 5.3. Analiza zdarzeń oczekiwania (169)
- 5.4. Klasy zdarzeń oczekiwania (170)
- 5.5. Badanie zdarzeń oczekiwania sesji (171)
- 5.6. Badanie zdarzeń oczekiwania według klas (173)
- 5.7. Rozwiązywanie problemu oczekiwania na zajęty bufor (175)
- 5.8. Rozwiązywanie problemu oczekiwania na synchronizację pliku dziennika (177)
- 5.9. Minimalizacja czasu oczekiwania na odczyt danych w innej sesji (178)
- 5.10. Zmniejszenie liczby zdarzeń oczekiwania na bezpośredni odczyt pliku (179)
- 5.11. Minimalizacja czasu oczekiwania na proces Recovery Writer (181)
- 5.12. Wyszukiwanie przyczyny blokady (182)
- 5.13. Identyfikacja sesji blokowanych i blokujących (183)
- 5.14. Obsługa blokad (185)
- 5.15. Identyfikacja zablokowanego obiektu (186)
- 5.16. Obsługa zdarzeń enq: TM - contention (187)
- 5.17. Identyfikacja ostatnio zablokowanych sesji (189)
- 5.18. Analiza ostatnich zdarzeń oczekiwania w bazie danych (192)
- 5.19. Określenie czasu oczekiwania spowodowanego blokadą (193)
- 5.20. Minimalizacja czasu oczekiwania na zatrzaski (195)
Rozdział 6. Analiza wydajności systemu operacyjnego (199)
- 6.1. Wykrywanie problemów z miejscem na dysku (201)
- 6.2. Identyfikacja słabych punktów systemu (203)
- 6.3. Określenie procesów wykorzystujących najwięcej zasobów systemu (205)
- 6.4. Wykrywanie problemów z procesorem (207)
- 6.5. Identyfikacja procesów zajmujących procesor i pamięć (209)
- 6.6. Identyfikacja problemów z dyskami (210)
- 6.7. Wykrywanie procesów obciążających sieć (213)
- 6.8. Kojarzenie procesu zajmującego zasoby z bazą danych (214)
- 6.9. Przerywanie procesu zajmującego dużo zasobów systemu (217)
Rozdział 7. Rozwiązywanie problemów z bazą danych (219)
- 7.1. Określenie optymalnego okresu przechowywania danych o wycofaniach transakcji (219)
- 7.2. Wyszukiwanie obiektów zajmujących najwięcej miejsca w przestrzeni wycofań (224)
- 7.3. Eliminacja błędu ORA-01555 (225)
- 7.4. Kontrola wykorzystania tymczasowej przestrzeni (227)
- 7.5. Identyfikacja obiektów zajmujących przestrzeń tymczasową (228)
- 7.6. Eliminacja błędu "Unable to Extend Temp Segment" (229)
- 7.7. Eliminacja błędów otwartego kursora (231)
- 7.8. Odblokowanie zawieszonej bazy danych (233)
- 7.9. Korzystanie z interpretera ADRCI (237)
- 7.10. Przeglądanie logu alarmów za pomocą poleceń ADRCI (240)
- 7.11. Przeglądanie incydentów za pomocą interpretera ADRCI (242)
- 7.12. Pakowanie incydentów dla zespołu pomocy technicznej Oracle (243)
- 7.13. Wykonanie testu stanu bazy danych (245)
- 7.14. Tworzenie testu SQL (247)
- 7.15. Tworzenie raportu AWR (249)
- 7.16. Porównywanie wydajności bazy z dwóch okresów (252)
- 7.17. Analiza raportu AWR (253)
Rozdział 8. Tworzenie wydajnych zapytań SQL (259)
- 8.1. Odczytywanie wszystkich wierszy tabeli (260)
- 8.2. Odczytywanie zestawu wierszy tabeli (261)
- 8.3. Łączenie tabel odpowiednimi wierszami (263)
- 8.4. Łączenie tabel z brakującymi wierszami (266)
- 8.5. Tworzenie prostych podzapytań (269)
- 8.6. Tworzenie podzapytań skorelowanych (272)
- 8.7. Porównywanie dwóch tabel z brakującymi wierszami (274)
- 8.8. Porównywanie dwóch tabel i wyszukiwanie wspólnych wierszy (276)
- 8.9. Łączenie wyników podobnych zapytań SELECT (277)
- 8.10. Przeszukiwanie zakresu wartości (279)
- 8.11. Przetwarzanie wartości NULL (282)
- 8.12. Wyszukiwanie fragmentów wartości w kolumnach (285)
- 8.13. Wielokrotne użycie zapytań zapisanych we współdzielonym buforze (288)
- 8.14. Zapobieganie przypadkowemu pełnemu skanowaniu tabeli (292)
- 8.15. Tworzenie wydajnych widoków tymczasowych (294)
- 8.16. Unikanie operatora NOT (296)
- 8.17. Sterowanie wielkością transakcji (298)
Rozdział 9. Ręczna regulacja zapytań SQL (301)
- 9.1. Wyświetlenie planu wykonania zapytania (302)
- 9.2. Dostosowanie zawartości planu wykonania (304)
- 9.3. Graficzne przedstawienie planu wykonania (307)
- 9.4. Jak czytać plan wykonania (308)
- 9.5. Obserwacja długotrwałych zapytań SQL (310)
- 9.6. Wyszukiwanie bieżących zapytań SQL zajmujących najwięcej zasobów (311)
- 9.7. Wyświetlanie statystyk dotyczących bieżących zapytań SQL (313)
- 9.8. Obserwacja postępu realizacji planu wykonania zapytania SQL (315)
- 9.9. Wyszukiwanie wykonanych w przeszłości zapytań SQL zajmujących najwięcej
zasobów (318)
- 9.10. Porównywanie wydajności zapytań SQL po wprowadzeniu zmian w systemie (320)
Rozdział 10. Śledzenie realizacji zapytań SQL (327)
- 10.1. Przygotowanie środowiska (327)
- 10.2. Śledzenie wybranego zapytania SQL (329)
- 10.3. Włączenie śledzenia zapytań we własnej sesji (331)
- 10.4. Wyszukiwanie plików śledzenia (331)
- 10.5. Badanie surowego pliku śledzenia zapytania SQL (332)
- 10.6. Analiza plików śledzenia (333)
- 10.7. Formatowanie plików śledzenia za pomocą narzędzia TKPROF (334)
- 10.8. Analiza pliku wynikowego narzędzia TKPROF (335)
- 10.9. Analiza plików śledzenia za pomocą narzędzia Oracle Trace Analyzer (338)
- 10.10. Śledzenie zapytań równoległych (341)
- 10.11. Śledzenie wybranego wątku zapytania równoległego (342)
- 10.12. Śledzenie zapytań równoległych w środowisku RAC (343)
- 10.13. Scalanie kilku plików śledzenia (344)
- 10.14. Określenie sesji do śledzenia (345)
- 10.15. Śledzenie całych sesji (345)
- 10.16. Śledzenie sesji na podstawie identyfikatora procesu (347)
- 10.17. Śledzenie kilku sesji (348)
- 10.18. Śledzenie instancji bazy danych (349)
- 10.19. Wywoływanie zdarzenia 10046 śledzącego sesję (350)
- 10.20. Wywoływanie zdarzenia 10046 w instancji bazy (351)
- 10.21. Włączenie śledzenia trwającej sesji (352)
- 10.22. Włączenie śledzenia sesji po zalogowaniu (353)
- 10.23. Śledzenie ścieżki optymalizatora (354)
- 10.24. Tworzenie automatycznych plików śledzenia błędów (356)
- 10.25. Śledzenie procesów działających w tle (357)
- 10.26. Śledzenie procesu nasłuchu (358)
- 10.27. Śledzenie aktywności archiwum w środowisku Data Guard (359)
Rozdział 11. Automatyczna regulacja zapytań SQL (361)
- 11.1. Wyświetlenie szczegółów zadania automatycznej regulacji zapytania SQL (363)
- 11.2. Wyświetlenie zaleceń narzędzia Automatic SQL Tuning Advisor (365)
- 11.3. Tworzenie skryptu SQL implementującego automatyczne zalecenie (368)
- 11.4. Modyfikacja funkcjonalności automatycznej regulacji zapytań SQL (369)
- 11.5. Włączanie i wyłączanie automatycznej regulacji zapytań SQL (371)
- 11.6. Zmiana atrybutów okna serwisowego (373)
- 11.7. Tworzenie zestawu regulacyjnego SQL (374)
- 11.8. Przeglądanie najbardziej obciążających bazę zapytań SQL w repozytorium AWR
(375)
- 11.9. Wypełnianie zestawów regulacyjnych SQL danymi z repozytorium AWR (378)
- 11.10. Przeglądanie najbardziej obciążających system zapytań SQL zapisanych w
pamięci (379)
- 11.11. Wypełnianie zestawu regulacyjnego informacjami o zapytaniach zapisanych w
pamięci (381)
- 11.12. Wypełnianie zestawu regulacyjnego SQL informacjami o wszystkich zapytaniach
zapisanych w pamięci (382)
- 11.13. Wyświetlenie zawartości zestawu regulacyjnego SQL (384)
- 11.14. Wybiórcze usuwanie zapytań z zestawu regulacyjnego (385)
- 11.15. Przenoszenie zestawu regulacyjnego SQL (386)
- 11.16. Tworzenie zadania regulacyjnego (388)
- 11.17. Uruchomienie narzędzia SQL Tuning Advisor (391)
- 11.18. Przygotowywanie zaleceń regulacji zapytań SQL za pomocą narzędzia ADDM (394)
Rozdział 12. Optymalizacja i ujednolicenie planu wykonania zapytania (397)
- Podstawowe informacje (397)
- Całościowy obraz (399)
- 12.1. Tworzenie i zatwierdzanie profili SQL (402)
- 12.2. Sprawdzenie, czy profil SQL zapytania jest wykorzystywany (405)
- 12.3. Automatyczne zatwierdzanie profili SQL (406)
- 12.4. Wyświetlanie informacji o profilu SQL (408)
- 12.5. Wybiórcze testowanie profili SQL (410)
- 12.6. Przenoszenie profilu SQL do innej bazy danych (411)
- 12.7. Blokowanie profilu SQL (413)
- 12.8. Usuwanie profilu SQL (414)
- 12.9. Tworzenie wzorca planu dla zapytania zapisanego w pamięci (415)
- 12.10. Tworzenie wzorca planu dla zapytań zapisanych w zestawie regulacyjnym (417)
- 12.11. Automatyczne tworzenie wzorców planów (419)
- 12.12. Zmiana wzorca planu (420)
- 12.13. Sprawdzenie dostępności wzorca planu (422)
- 12.14. Sprawdzenie, czy wzorzec planu jest wykorzystywany (423)
- 12.15. Wyświetlenie planów wykonania we wzorcu planu (424)
- 12.16. Ręczne dodawanie planu wykonania do wzorca planu (425)
- 12.17. Przełączanie automatycznego zatwierdzania nowych planów wykonania (428)
- 12.18. Blokowanie wzorca planu (429)
- 12.19. Usuwanie wzorca planu (430)
- 12.20. Przenoszenie wzorców planów (431)
Rozdział 13. Konfiguracja optymalizatora zapytań (433)
- 13.1. Określenie celu optymalizatora (434)
- 13.2. Włączenie automatycznego zbierania statystyk (435)
- 13.3. Ustawianie preferencji zadania zbierania statystyk (437)
- 13.4. Ręczne zbieranie statystyk (441)
- 13.5. Blokowanie statystyk (443)
- 13.6. Kompensacja brakujących statystyk (444)
- 13.7. Eksport statystyk (446)
- 13.8. Odtwarzanie wcześniejszych wersji statystyk (447)
- 13.9. Zbieranie statystyk systemowych (448)
- 13.10. Weryfikacja nowych statystyk (450)
- 13.11. Narzucenie optymalizatorowi użycia indeksu (452)
- 13.12. Włączanie funkcjonalności optymalizatora zapytań (453)
- 13.13. Zapobieganie tworzeniu histogramów przez bazę danych (455)
- 13.14. Zwiększenie wydajności zapytań bez zmiennych powiązanych (456)
- 13.15. Adaptacyjne współdzielenie kursora (458)
- 13.16. Tworzenie statystyk dla wyrażeń (463)
- 13.17. Zbieranie statystyk dla skorelowanych kolumn (464)
- 13.18. Automatyczne tworzenie grup kolumn (465)
- 13.19. Zbieranie statystyk dla partycjonowanych tabel (467)
- 13.20. Równoległe zbieranie statystyk dla dużych tabel (468)
- 13.21. Ustalanie aktualności statystyk (470)
- 13.22. Przeglądanie obiektów do objęcia statystykami (471)
Rozdział 14. Implementacja wskazówek w zapytaniach (473)
- 14.1. Tworzenie wskazówki (474)
- 14.2. Zmiana ścieżki dostępu do danych (475)
- 14.3. Zmiana kolejności łączenia tabel (478)
- 14.4. Zmiana metody łączenia tabel (480)
- 14.5. Zmiana wersji optymalizatora (482)
- 14.6. Wybór między szybką odpowiedzią a ogólną optymalizacją zapytania (483)
- 14.7. Umieszczanie danych za pomocą bezpośredniej ścieżki do pliku (486)
- 14.8. Umieszczanie wskazówek w widokach (489)
- 14.9. Zapisywanie wyników zapytania w pamięci podręcznej (491)
- 14.10. Kierowanie rozproszonego zapytania do określonej bazy danych (495)
- 14.11. Zbieranie rozszerzonych statystyk realizacji zapytania (498)
- 14.12. Aktywacja przekształcenia zapytania (500)
- 14.13. Zwiększenie wydajności zapytań wykorzystujących gwiaździsty schemat danych
(502)
Rozdział 15. Równoległe wykonywanie zapytań (505)
- 15.1. Zastosowanie równoległości w wybranym zapytaniu (506)
- 15.2. Konfiguracja równoległości podczas tworzenia obiektów (509)
- 15.3. Konfiguracja równoległości dla istniejących obiektów (510)
- 15.4. Implementacja równoległych operacji DML (511)
- 15.5. Równoległe tworzenie tabel (514)
- 15.6. Równoległe tworzenie indeksów (516)
- 15.7. Równoległe przebudowywanie indeksu (517)
- 15.8. Równoległe przenoszenie partycji (519)
- 15.9. Równoległe dzielenie partycji (521)
- 15.10. Konfiguracja automatycznego stopnia równoległości (522)
- 15.11. Badanie planu wykonania zapytania (525)
- 15.12. Kontrola równoległych operacji (528)
- 15.13. Wyszukiwanie słabych punktów procesów równoległych (530)
- 15.14. Uzyskiwanie szczegółowych informacji o równoległych sesjach (531)
Skorowidz (535)
552 stron, Format: 17.0x24.0cm, oprawa miękka