PostgreSQL i wydajność
Wydajność jest jednym z kluczowych wymagań w projektowaniu architektury oprogramowania i od samego początku skupiała się na programistach PostgreSQL, co pokazano również w następującym zatwierdzeniu źródeł PostgreSQL Git:
commit d31084e9d1118b25fd16580d9d8c2924b5740dff
Author: Marc G. Fournier <[email protected]>
Date: Tue Jul 9 06:22:35 1996 +0000
Postgres95 1.01 Distribution - Virgin Sources
[...]
diff --git a/src/backend/access/heap/stats.c b/src/backend/access/heap/stats.c
new file mode 100644
index 0000000000..d41d01ac1b
--- /dev/null
+++ b/src/backend/access/heap/stats.c
@@ -0,0 +1,329 @@
+/*-------------------------------------------------------------------------
+ *
+ * stats.c--
+ * heap access method debugging statistic collection routines
+ *
+ * Copyright (c) 1994, Regents of the University of California
[...]
+ * Also note that this routine probably shouldn't have to exist, and does
+ * screw up the call graph rather badly, but we are wasting so much time and
+ * system resources being massively general that we are losing badly in our
+ * performance benchmarks.
+ */
PostgreSQL osiąga wydajność poprzez implementację różnych funkcji:
- Kilka typów indeksów
- Planer zapytań i optymalizator, który może korzystać z systemów wieloprocesorowych
- MVCC
- Podział tabeli
Wybór środowiska
Dzięki wielu dostępnym dzisiaj opcjom pojawia się wiele pytań:
- Na miejscu czy w chmurze?
- Goły metal czy zwirtualizowany?
- Sprzęt oznaczony marką lub zbuduj własny?
- Jak funkcje niskiego poziomu PostgreSQL lub fsync wpływają na wydajność sprzętu?
- Dysk lokalny czy pamięć współdzielona?
- Jakie opcje dostrajania systemu operacyjnego należy ustawić?
Ponownie, wiki PostgreSQL jest bardzo dobrym punktem wyjścia dla wszystkich rzeczy związanych z wydajnością.
Jakie są kluczowe rzeczy, których należy szukać?
Ponieważ istnieje mnóstwo literatury dotyczącej różnych aspektów dostrajania wydajności PostgreSQL i projektowania systemu (wskazówka:wyszukaj na stronie xfs), ten blog nie ma na celu głębokiego zagłębienia się w którykolwiek z już omówionych tematów, ale raczej perspektywa sysadmin na temat tego, od czego zacząć, gdy głównym celem jest unikanie rywalizacji o zasoby. Wskażę również wiele odniesień, które bardziej szczegółowo dotyczą konkretnych zagadnień. Porady ekspertów we wszystkich obszarach krytycznych dla wydajności PostgreSQL są dostępne za pośrednictwem wielu firm oferujących usługi profesjonalne.
Zacznijmy!
Gromadzenie informacji
Zakładając domyślną instalację i wiedząc, że PostgreSQL nie stara się być dobrze dostrojony po wyjęciu z pudełka, a nawet mogą wystąpić pewne dziwactwa, ten krok obejmuje skonfigurowanie niezbędnych narzędzi do monitorowania.
Dobre monitorowanie ma kluczowe znaczenie dla zrozumienia aplikacji i umożliwienia szybkiego śledzenia zasobów, których dotyczy problem, a dotyczy to w szczególności dostawców chmury, w przypadku których dostęp do hosta bazy danych może nie być dostępny w celu przeprowadzenia testów porównawczych dla procesora lub we/wy:
Rys.1 — SlideShare, Jignesh Shah, najlepsze praktyki z zarządzanym PostgreSQL w chmurzeReagowanie na alerty wydajności systemu
Narzędzia monitorujące będą tworzyć wykresy i ostrzegać o wskaźnikach wydajności systemu:
Procesor:
- Alert — Wysokie użycie wskazuje na długotrwałe zapytanie.
- Wpływ — czas odpowiedzi aplikacji.
- Akcja — Przejrzyj metryki statystyk bazy danych, aby zidentyfikować zapytania, które wymagają dostrojenia.
We/Wy:
- Alert — Wysoka liczba lub odczyty.
- Wpływ — czas odpowiedzi aplikacji.
- Działanie — Dodaj kolejną replikę do odczytu. Przejrzyj metryki statystyk bazy danych, aby zidentyfikować długo działające zapytania.
- Alert — Duża liczba zapisów.
- Wpływ — czas odpowiedzi aplikacji.
- Działanie — Dostosuj parametry GUC shared_buffers, work_mem i maintenance_work_mem. Dostrój wskaźnik kontrolny i upewnij się, że automatyczne odkurzanie jest prawidłowo dostrojone. Jeśli PostgreSQL jest zainstalowany na własnym sprzęcie, skonfiguruj obszary tabel i/lub rozważ sharding, ale zrozum ograniczenia dotyczące shardowania.
Pamięć:
- Alert — Wysokie użycie pamięci.
- Wpływ — wydajność we/wy.
- Akcja — Przejrzyj metryki statystyk bazy danych, aby zidentyfikować zapytania, które wymagają dostrojenia.
Sieć:
- Alert — duże opóźnienie. Zwykle jest to problem z DBaaS.
- Wpływ — klienci, replikacja.
- Działanie — Przenieś hosty bazy danych bliżej serwerów frontendowych.
- Alert — Duża liczba połączeń.
- Wpływ — Klienci.
- Działanie — Rozważ użycie odpytywania połączeń.
Wewnętrzne wskaźniki wydajności bazy danych
Widoki pg_* są oknem na wydajność silnika bazy danych, a aplikacje do zarządzania PostgreSQL zostały napisane, aby pomóc w korelowaniu bogactwa informacji dostępnych w inny sposób za pośrednictwem różnych zapytań SQL. Istnieją dodatkowe rozszerzenia, które często są zintegrowane lub dostępne jako wtyczki.
Korzystanie z takich narzędzi upraszcza zadanie DBA i zapewnia przestrzeganie najlepszych praktyk podczas konfigurowania i konfigurowania klastra bazy danych.
Statystyki bazy danych
Narzędzia monitorujące, takie jak ClusterControl, wykorzystują statystyki aktywności bazy danych, aby pomóc administratorowi w dostrajaniu wydajności:
Rys.2 — Kilka dziewiątek, kluczowe rzeczy do monitorowania w PostgreSQL — Analiza obciążenia Pobierz oficjalny dokument dzisiaj — Zarządzanie i automatyzacja PostgreSQL z ClusterControlDowiedz się, co musisz wiedzieć, aby wdrażać, monitorować, zarządzać i skalować PostgreSQLPobierz raportDostrajanie zapytań
Począwszy od wersji 9.5 PostgreSQL zawiera znaczne ulepszenia wydajności zapytań, takie jak indeksy BRIN i zapytania równoległe:
Rys.3 — 2. kwadrant, Thomas Vondra, ulepszenia wydajności w PostgreSQL 9.5 (i nie tylko)Blokowanie
Kontroli współbieżności poświęcono cały rozdział dokumentacji PostgreSQL. Użyj narzędzi do monitorowania, aby otrzymywać alerty, gdy liczba blokad lub czas trwania blokady przekroczy próg, i rozwiąż problem, szukając brakujących indeksów, przeglądając kod aplikacji lub przełączając się na odpytywanie połączeń.
Ładowanie zbiorcze
synchronous_commit można wyłączyć podczas importowania dużych ilości danych. Więcej opcji omówiono w sekcji dokumentacji PostgreSQL Zapełnianie bazy danych.
Wniosek
Dostrajanie wydajności PostgreSQL to złożone zadanie. Złożoność wynika z wielu dostępnych strojów, co jest mocnym argumentem przemawiającym za PostgreSQL. Nie ma złotego środka na rozwiązywanie problemów z wydajnością, raczej specyfika aplikacji ostatecznie dyktuje wymagania dotyczące strojenia. Dlatego narzędzia monitorujące mogą pomóc w uzyskaniu wglądu w wydajność w stosunku do wydajności systemu i dalej pozwalają zidentyfikować specyficzne obszary PostgreSQL, które wymagają dostrojenia, a także zapytania SQL, które wymagają optymalizacji. Dodatkowo systemy zarządzania bazami danych mogą pomóc w konfiguracji i administrowaniu PostgreSQL w celu zapewnienia przestrzegania najlepszych praktyk.