Helion


Szczegóły ebooka

Wysoko wydajny PostgreSQL 9.0

Wysoko wydajny PostgreSQL 9.0


Poznaj najlepsze techniki zwiększania wydajności PostgreSQL i sprawdzone rozwiązania najczęściej spotykanych problemów!

  • Jak dobierać komponenty serwera, aby maksymalnie wykorzystać jego możliwości?
  • Jak przeprowadzać testy wydajności całego systemu, od sprzętu po aplikację?
  • Jak skutecznie indeksować bazę danych i optymalizować zapytania?

Mający za sobą już ponad piętnaście lat rozwoju PostgreSQL jest dziś potężnym systemem baz danych typu open source, o sprawdzonej architekturze i reputacji narzędzia niezawodnego oraz nieprzeciętnie wydajnego. Współdziała on ze wszystkimi popularnymi systemami operacyjnymi i jest w pełni zgodny z warunkami ACID. Te zalety sprawiają, że można go używać jako magazynu danych dla aplikacji oraz jako bazy danych dla aplikacji sieciowych. Jednak osiągnięcie maksymalnej wydajności PostgreSQL nie jest wcale zadaniem łatwym, a w trakcie korzystania z jego serwerów można napotkać powtarzające się trudności, zwłaszcza gdy wzrasta obciążenie serwera, a wymagania stają się coraz większe. Jeśli zatem nie chcesz tygodniami dochodzić do właściwych rozwiązań swoich problemów – oto książka, w której znajdziesz całą potrzebną Ci wiedzę.

Masz w rękach kompletny podręcznik, przeznaczony dla średnio i bardzo zaawansowanych administratorów baz danych, którzy już używają PostgreSQL lub dopiero zamierzają to zrobić. Najpierw zapoznasz się z najnowszymi wersjami tej platformy oraz dowiesz się, jak dobierać komponenty serwera, aby optymalnie wykorzystać możliwości systemu. Zobaczysz, jak testować wydajność sprzętu dla bazy danych oraz konfigurować dyski i system plików, aby zwiększać ich efektywność. Poznasz także parametry, których zmiana może powodować problemy, a ponadto najważniejsze ustawienia, ich znaczenie i zasady prawidłowego stosowania. Przeczytasz o tym, jak uzyskać użyteczne wyniki testów wydajności, a także o skutecznym indeksowaniu bazy danych, optymalizacji zapytań i partycjonowaniu danych na podzbiory. Na koniec dowiesz się, jak unikać najczęściej spotykanych problemów i rozwiązywać je, gdy już się pojawią.

Dzięki tej książce:
  • poznasz najlepsze praktyki pozwalające na obsłużenie wymagających aplikacji
  • odkryjesz, dlaczego sprzęt komputerowy nadaje się (lub nie) dla wysoko wydajnych aplikacji bazodanowych
  • zrozumiesz, na czym polegają kompromisy związane z szybkością i niezawodnością działania
  • zoptymalizujesz system operacyjny, aby osiągnąć najlepszą wydajność bazy danych
  • przeprowadzisz testy wydajności całego systemu, od sprzętu komputerowego po aplikację
  • przeanalizujesz rzeczywiste przykłady, co pozwoli Ci poznać wpływ różnych ustawień parametrów serwera na wydajność
  • będziesz skutecznie monitorować zdarzenia zachodzące na serwerze, zarówno w bazie danych, jak i poza nią
  • znajdziesz najlepsze dodatki, rozszerzające podstawowe możliwości bazy danych PostgreSQL
  • dowiesz się, jak przygotować replikację systemów za pomocą najnowszych funkcji wprowadzonych w PostgreSQL 9.0

Zoptymalizuj swój serwer PostgreSQL i unikaj problemów, które mogą zmniejszyć jego wydajność!

O autorze (13)

O recenzentach (15)

Wprowadzenie (17)

Rozdział 1. Wersje PostgreSQL (21)

  • Wydajność we wcześniejszych wydaniach PostgreSQL (22)
    • Wybór odpowiedniej wersji (23)
    • Uaktualnienie do nowszej głównej wersji (23)
  • PostgreSQL czy inna baza danych? (26)
  • Narzędzia PostgreSQL (27)
    • Moduły contrib w PostgreSQL (27)
    • pgFoundry (30)
    • Dodatkowe oprogramowanie związane z PostgreSQL (30)
  • Cykl życiowy aplikacji PostgreSQL (31)
  • Optymalizacja wydajności w praktyce (32)
  • Podsumowanie (34)

Rozdział 2. Sprzęt dla bazy danych (35)

  • Zrównoważenie wydatków na zakup sprzętu (35)
    • Procesor (36)
    • Pamięć (37)
    • Dyski twarde (37)
    • Kontrolery dysków (43)
  • Niezawodne kontrolery i konfiguracja dysków (48)
    • Bufor zapisu (49)
    • Wpływ bufora bez wstrzymywania zapisu na wydajność (52)
  • Podsumowanie (53)

Rozdział 3. Testy wydajności sprzętu dla bazy danych (55)

  • Testy wydajności procesora i pamięci (55)
    • memtest86+ (56)
    • Testowanie pamięci za pomocą narzędzia STREAM (56)
    • Testy wydajności procesora (59)
    • Powody wolnego działania procesora i pamięci (60)
  • Fizyczna wydajność dysku (61)
    • Swobodny dostęp i liczba operacji wejścia-wyjścia na sekundę (61)
    • Dostęp sekwencyjny i ZCAV (63)
    • Liczba wykonywanych operacji zatwierdzania (64)
  • Narzędzia do testowania wydajności dysku (65)
    • hdtune (65)
    • dd (69)
    • bonnie++ (70)
    • sysbench (75)
    • Skomplikowane testy wydajności dysku twardego (77)
  • Przykładowe wyniki testu wydajności dysku (78)
    • Oczekiwana wydajność dysku (80)
  • Podsumowanie (83)

Rozdział 4. Konfiguracja dysków (85)

  • Maksymalna wielkość systemu plików (85)
  • Odzyskiwanie danych po awarii systemu plików (86)
    • Systemy plików z księgowaniem (87)
  • Systemy plików w Linuksie (88)
    • ext2 (88)
    • ext3 (89)
    • ext4 (91)
    • XFS (91)
    • Inne systemy plików w Linuksie (93)
    • Bariery zapisu (94)
    • Ogólne dostrajanie systemów plików w Linuksie (96)
  • Systemy plików Solaris i FreeBSD (102)
    • Solaris UFS (102)
    • FreeBSD UFS2 (104)
    • ZFS (105)
  • Systemy plików w Windows (107)
    • FAT32 (107)
    • NTFS (107)
  • Konfiguracja dysku dla PostgreSQL (108)
    • Dowiązania symboliczne (108)
    • Tablespace (109)
    • Drzewo katalogów bazy danych (109)
    • Macierze dyskowe, RAID i konfiguracja dysków (112)
  • Podsumowanie (115)

Rozdział 5. Pamięć dla bufora bazy danych (117)

  • Jednostki pamięci w pliku konfiguracyjnym postgresql.conf (118)
  • Zwiększenie parametrów pamięci współdzielonej w systemie Unix w celu zdefiniowania większego bufora (119)
    • Semafory jądra (120)
    • Oszacowanie wielkości pamięci współdzielonej (121)
  • Przegląd bufora bazy danych (122)
    • Instalacja pg_buffercache w bazie danych (123)
    • Konfiguracja układu dysków (124)
    • Utworzenie nowego bloku w bazie danych (126)
    • Zapis zmodyfikowanych bloków na dysku (127)
  • Naprawa bazy danych po awarii a wielkość bufora (128)
    • Podstawy przetwarzania punktów kontrolnych (128)
    • Dziennik zapisu z wyprzedzeniem a proces naprawy po awarii (128)
    • Tworzenie punktów kontrolnych (129)
    • Cykl życia bloku bazy danych (131)
  • Bufor bazy danych kontra bufor systemu operacyjnego (132)
    • Podwójnie buforowane dane (133)
    • Przeciążenie punktu kontrolnego (134)
    • Początkowe wskazówki dotyczące wielkości (135)
  • Analiza zawartości bufora (136)
    • Zapytania pozwalające na przegląd zawartości bufora (137)
    • Przegląd wielkości bufora i jej dostosowanie (141)
  • Podsumowanie (141)

Rozdział 6. Optymalizacja konfiguracji serwera (143)

  • Interakcja z używaną konfiguracją (144)
    • Ustawienia domyślne i sposoby ich zerowania (144)
    • Dozwolony kontekst do przeprowadzania zmian (144)
    • Ponowne wczytywanie pliku konfiguracyjnego (146)
  • Ustawienia na poziomie serwera (147)
    • Połączenia z bazą danych (147)
    • Pamięć współdzielona (149)
    • Rejestrowanie zdarzeń (150)
    • Polecenie VACUUM i dane statystyczne (152)
    • Punkty kontrolne (155)
    • Ustawienia mechanizmu WAL (156)
    • Replikacja WAL i PITR (159)
  • Ustawienia na poziomie klienta (159)
    • Optymalizacje niezalecane (162)
  • Optymalizacja ustawień nowego serwera (164)
  • Wskazówki dotyczące serwerów dedykowanych (164)
  • Wskazówki dotyczące serwerów współdzielonych (165)
  • pgtune (166)
  • Podsumowanie (166)

Rozdział 7. Rutynowa konserwacja (167)

  • Widoczność transakcji wraz z kontrolą współbieżności (167)
    • Wewnętrzne mechanizmy określające widoczność (168)
    • Uaktualnienia (169)
    • Konflikty podczas blokowania rekordów (171)
    • Usunięcie (173)
    • Zalety mechanizmu MVCC (174)
    • Wady mechanizmu MVCC (174)
    • Wyzerowanie identyfikatora transakcji (174)
  • Vacuum (176)
    • Implementacja procesu vacuum (177)
    • Operacja czyszczenia na podstawie kosztów (179)
    • Demon autovacuum (181)
    • Powszechnie spotykane problemy z vacuum i autovacuum (185)
  • Automatyczna analiza (190)
  • Nadmuchane indeksy (191)
    • Pomiar nadmuchania indeksu (191)
  • Szczegółowe monitorowanie stron indeksu i danych (193)
  • Monitorowanie dzienników zdarzeń zapytań (194)
    • Podstawowa konfiguracja rejestracji zdarzeń w PostgreSQL (194)
    • Rejestrowanie trudnych zapytań (199)
    • Analiza pliku dziennika zdarzeń (200)
  • Podsumowanie (207)

Rozdział 8. Sprawdzanie wydajności bazy danych (209)

  • Domyślne testy pgbench (209)
    • Definicja tabeli (210)
    • Wykrywanie skali wielkości bazy danych (210)
    • Definicja skryptu zapytania (211)
    • Konfiguracja serwera bazy danych pod kątem pgbench (213)
  • Ręczne uruchamianie pgbench (214)
  • Wyniki graficzne generowane za pomocą pgbench-tools (216)
    • Konfiguracja pgbench-tools (216)
  • Przykładowe wyniki testów pgbench (217)
    • Test przeprowadzający jedynie zapytania SELECT (217)
    • Test transakcji TPC-B-like (218)
    • Analiza opóźnienia (219)
  • Powody otrzymywania błędnych wyników i różnic (222)
    • Programistyczne wersje PostgreSQL (223)
    • Wątki worker i ograniczenia programu pgbench (224)
  • Własne testy pgbench (225)
    • Test szybkości wstawiania danych (225)
  • Testy wydajności Transaction Processing Performance Council (226)
  • Podsumowanie (228)

Rozdział 9. Indeksowanie bazy danych (229)

  • Przegląd sposobów indeksowania (230)
    • Dane statystyczne służące do pomiaru wielkości zapytania na dysku i bloku indeksu (230)
    • Uruchomienie przykładu (231)
    • Konfiguracja przykładowych danych (232)
    • Proste wyszukiwania za pomocą indeksów (233)
    • Pełne skanowanie tabeli (234)
    • Tworzenie indeksu (235)
    • Wyszukiwanie za pomocą nieefektywnego indeksu (235)
    • Łączenie indeksów (237)
    • Przejście ze skanowania indeksowanego na sekwencyjne (238)
    • Klastry kontra indeksy (239)
    • Polecenie Explain oraz liczniki bufora (241)
  • Tworzenie indeksu i jego obsługa (241)
    • Zapewnienie unikalności indeksów (242)
    • Współbieżne tworzenie indeksu (243)
    • Klastrowanie indeksu (243)
    • Ponowne indeksowanie (244)
  • Rodzaje indeksów (245)
    • B-tree (245)
    • Hash (246)
    • GIN (246)
    • GiST (247)
  • Zaawansowane sposoby korzystania z indeksów (247)
    • Indeksy wielokolumnowe (248)
    • Indeksy dla operacji sortowania (248)
    • Indeksy częściowe (249)
    • Indeksy bazujące na wyrażeniu (249)
    • Indeksowanie na potrzeby wyszukiwania pełnego tekstu (250)
  • Podsumowanie (250)

Rozdział 10. Optymalizacja zapytań (253)

  • Przykładowe zbiory danych (253)
    • Pagila (254)
    • Dell Store 2 (254)
  • Podstawy polecenia EXPLAIN (256)
    • Obciążenie związane z pomiarem (256)
    • Zachowanie przy zimnym i rozgrzanym buforze (257)
  • Struktura węzłów planu zapytania (259)
    • Podstawy obliczania kosztu (260)
  • Narzędzia analizy danych polecenia EXPLAIN (262)
    • Graficzne przedstawienie danych EXPLAIN (262)
    • Rozbudowane dane wyjściowe (263)
    • Dane wyjściowe EXPLAIN w postaci czytelnej dla komputera (263)
    • Narzędzia służące do analizy planu (264)
  • Łączenie zbiorów rekordów (265)
    • Identyfikator krotki (265)
    • Skanowanie sekwencyjne (266)
    • Skanowanie indeksu (266)
    • Mapa bitowa i skanowanie indeksu (267)
  • Przetwarzanie węzłów (268)
    • Węzeł Sort (268)
    • Węzeł Limit (270)
    • Węzeł Aggregate (271)
    • Węzeł HashAggregate (272)
    • Węzeł Unique (273)
    • Węzeł Result (274)
    • Węzeł Append (275)
    • Węzeł Group (276)
    • Węzły Subquery Scan i Subplan (277)
    • Operacje ustawiania (278)
    • Materializacja (279)
    • Skanowanie CTE (280)
  • Złączenia (281)
    • Pętle zagnieżdżone (281)
    • Złączenie Merge Join (283)
    • Złączenia Hash Join (285)
  • Dane statystyczne (290)
    • Przeglądanie i szacowanie za pomocą danych statystycznych (290)
    • Cele danych statystycznych (293)
    • Obszary trudne do oszacowania (295)
  • Inne parametry planowania zapytania (295)
    • effective_cache_size (295)
    • work_mem (297)
    • constraint_exclusion (298)
    • cursor_tuple_fraction (298)
  • Wykonywanie innych typów zapytań (298)
  • Poprawianie zapytań (299)
    • Optymalizacja dla w pełni buforowanych zbiorów danych (300)
    • Poszukiwanie odpowiednika zapytania (300)
    • Wyłączanie funkcji optymalizatora (301)
    • Rozwiązywanie błędów optymalizatora (305)
    • Unikanie planu restrukturyzacji za pomocą OFFSET (306)
    • Zewnętrzne źródła problemów (309)
  • Ograniczenia SQL (309)
    • Numerowanie rekordów w SQL (309)
    • Używanie funkcji Window do numerowania (311)
    • Używanie funkcji Window do kumulowania wyniku (311)
  • Podsumowanie (313)

Rozdział 11. Dane statystyczne i działanie bazy danych (315)

  • Widoki danych statystycznych (315)
  • Widoki kumulacyjne i żywe (317)
  • Dane statystyczne tabel (318)
    • Operacje wejścia-wyjścia tabel (320)
  • Dane statystyczne indeksu (322)
    • Operacje wejścia-wyjścia indeksu (323)
  • Dane statystyczne dotyczące całej bazy danych (324)
  • Połączenia i aktywność (324)
  • Blokady (325)
    • Transakcje wirtualne (326)
    • Dekodowanie informacji o blokadzie (327)
    • Oczekiwanie na blokadę transakcji (330)
    • Oczekiwanie na blokadę tabeli (331)
    • Rejestrowanie informacji o blokadach (332)
  • Wykorzystanie dysku (333)
  • Bufor, zapis w tle oraz aktywność tworzenia punktu kontrolnego (335)
    • Zapis migawek pg_stat_bgwriter (337)
    • Optymalizacja z użyciem danych statystycznych dotyczących zapisu w tle (339)
  • Podsumowanie (341)

Rozdział 12. Monitorowanie i trendy (343)

  • Narzędzia monitorujące w systemie Unix (343)
    • Przykładowa konfiguracja (344)
    • vmstat (344)
    • iostat (347)
    • top (355)
    • sysstat i sar (357)
  • Narzędzia monitorujące dla Windows (360)
    • Menedżer zadań (360)
    • Monitor systemu Windows (360)
  • Oprogramowanie trendów (362)
    • Rodzaje monitorowania i oprogramowanie trendów (363)
    • Nagios (364)
    • Cacti (366)
    • Munin (366)
    • Inne pakiety trendów (367)
  • Podsumowanie (369)

Rozdział 13. Pula połączeń i buforowanie (371)

  • Pula połączeń (371)
    • Liczniki puli połączeń (372)
    • pgpool-II (373)
    • pgBouncer (374)
  • Buforowanie bazy danych (376)
    • memcached (376)
    • pgmemcache (377)
  • Podsumowanie (378)

Rozdział 14. Skalowanie za pomocą replikacji (381)

  • Hot Standby (381)
    • Terminologia (382)
    • Konfiguracja przekazywania danych mechanizmu WAL (383)
    • Protokół Streaming Replication (384)
    • Optymalizacja funkcji Hot Standby (384)
  • Menedżery kolejki replikacji (386)
    • Slony (387)
    • Londiste (387)
    • Skalowanie odczytu za pomocą oprogramowania replikacji bazującego na kolejce (388)
  • Wymagania aplikacji specjalnych (388)
    • Bucardo (388)
    • pgpool-II (389)
  • Inne interesujące projekty replikacji (389)
  • Podsumowanie (391)

Rozdział 15. Partycjonowanie danych (393)

  • Partycjonowanie o zasięgu tabeli (393)
    • Określenie pola klucza używanego do partycjonowania (394)
    • Wielkości partycji (395)
    • Tworzenie partycji (396)
    • Przekierowywanie poleceń INSERT do partycji (397)
    • Plany zapytań dla pustej partycji (399)
    • Zmiana daty i uaktualnianie wyzwalacza (400)
    • Migracja partycjonowanej używanej tabeli (401)
    • Zapytania partycjonowane (403)
    • Tworzenie nowych partycji (405)
    • Zalety partycjonowania (406)
    • Błędy często popełniane podczas partycjonowania (407)
  • Partycjonowanie poziome za pomocą PL/Proxy (408)
    • Generowanie wartości hash (408)
    • Skalowanie za pomocą PL/Proxy (410)
    • Skalowanie za pomocą GridSQL (411)
  • Podsumowanie (412)

Rozdział 16. Unikanie najczęściej spotykanych problemów (415)

  • Operacja bulk-loading (415)
    • Metody wczytywania danych (416)
    • Optymalizacja operacji bulk-loading (417)
    • Pominięcie optymalizacji mechanizmu WAL (418)
    • Ponowne utworzenie indeksów i dodanie ograniczeń (419)
    • Przywracanie równoległe (419)
    • Czyszczenie po operacji wczytania danych (420)
  • Najczęstsze problemy związane z wydajnością (421)
    • Zliczanie rekordów (421)
    • Niewyjaśnione operacje zapisu (422)
    • Wolne wykonywanie funkcji i poleceń składowanych (423)
    • Testy wydajności PL/pgSQL (424)
    • Ogromne przeciążenie klucza zewnętrznego (424)
    • Użycie pamięci przez wyzwalacz (425)
    • Ogromne przeciążenie mechanizmu zbierającego dane statystyczne (426)
    • Zmaterializowane widoki (427)
  • Profilowanie bazy danych (427)
    • gprof (427)
    • OProfile (428)
    • Visual Studio (428)
    • DTrace (428)
  • Problemy wydajności w poszczególnych wersjach (429)
    • Agresywne uaktualnienia PostgreSQL (430)
    • 8.1 (431)
    • 8.2 (432)
    • 8.3 (432)
    • 8.4 (434)
    • 9.0 (436)
  • Podsumowanie (441)

Skorowidz (443)