pgFincore 1.2 to rozszerzenie PostgreSQL do audytu i manipulowania pamięcią podręczną stron danych systemu operacyjnego. Rozszerzenie ma już 7-letnią historię użytkowania, z ewolucjami odpowiadającymi potrzebom produkcyjnym.
Pobierz tutaj najnowszą wersję 1.2, zgodną z PostgreSQL 9.6.
Pamięć podręczna danych
Buforowanie stron danych to operacja, która odbywa się „naturalnie”, na kilku poziomach zarządzania danymi. Cel jest prosty:wiele warstw nakłada się na dane fizycznie zapisane na dysku i przywracanie ich użytkownikowi. Obecnie prawie każda warstwa danych ma abstrakcję, aby szybciej obsługiwać polecenia odczytu i zapisu. Dlatego większość dysków twardych oferuje pamięć podręczną zapisu, która opóźnia fizyczny zapis, oraz pamięć podręczną odczytu, która pozwala przewidywać przyszłe żądania i szybciej obsługiwać dane. Równoważny system istnieje w sieciach SAN, kartach RAID, systemach operacyjnych, oprogramowaniu itp.
PostgreSQL ma oczywiście własny system zarządzania zapisami i odczytami, współdzielone bufory , które można kontrolować za pomocą rozszerzenia pg_buffercache.
Możliwe jest kontrolowanie pamięci podręcznej systemu operacyjnego za pomocą narzędzi systemowych i pgFincore przenieś to w PostgreSQL.
Czytaj z wyprzedzeniem
Większość systemów operacyjnych optymalizuje ścieżki danych, udostępniając okno odczytu z wyprzedzeniem, co umożliwia wstępne ładowanie danych do cache, a tym samym szybciej dostarczać go aplikacjom. PostgreSQL zawiera kilka optymalizacji, które sprzyjają takiemu zachowaniu na poziomie systemu, a także posiada podobną funkcjonalność z opcją Effective_io_concurrency.
Jednym z rozwiązań ułatwiających te optymalizacje jest użycie wywołań systemowych POSIX_FADVISE. Znowu pgFincore przenieś to rozwiązanie w PostgreSQL.
pgFincore 1.2
To rozszerzenie umożliwia zatem:
- uzyskać dokładne informacje o zajętości tabeli lub indeksu (i niektórych innych plików używanych przez PostgreSQL) w pamięci podręcznej systemu obsługującego POSIX (linux, BSD, …),
- aby manipulować tą pamięcią podręczną:zrób jej mapę i przywróć ją później lub na innym serwerze,
- do optymalizacji ścieżek za pomocą wywołań posix_fadvise.
Pobierz pgFincore
Pakiety Debian i Red Hat dostępne w dystrybucjach oraz dla każdej wersji PostgreSQL w repozytoriach Apt PGDG i RPM PGDG.
Oraz źródła w repozytorium git pgfincore.
Potrzebujesz pomocy?
Oprócz wsparcia społeczności możesz skontaktować się z 2ndQuadrant.
Przykłady użycia
Konfiguracja
$ sudo apt-get install postgresql-9.6-pgfincore $ psql -c 'CREATE EXTENSION pgfincore;'
Informacje o systemie
# select * from pgsysconf_pretty(); os_page_size | os_pages_free | os_total_pages --------------+---------------+---------------- 4096 bytes | 314 MB | 16 GB
Zoptymalizuj błądzenie losowe (zmniejsz okno odczytu z wyprzedzeniem)
# select * from pgfadvise_random('pgbench_accounts_pkey'); relpath | os_page_size | rel_os_pages | os_pages_free ------------------+--------------+--------------+--------------- base/16385/24980 | 4096 | 2 | 1853808
Zoptymalizuj przechodzenie sekwencyjne (zwiększenie okna odczytu z wyprzedzeniem)
# select * from pgfadvise_sequential('pgbench_accounts'); relpath | os_page_size | rel_os_pages | os_pages_free ------------------+--------------+--------------+--------------- base/16385/25676 | 4096 | 3176 | 1829288
Kontrola pamięci podręcznej
# select * from pgfincore('pgbench_accounts'); relpath | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit --------------------+---------+--------------+--------------+-----------+-----------+---------------+--------- base/11874/16447 | 0 | 4096 | 262144 | 3 | 1 | 408444 | base/11874/16447.1 | 1 | 4096 | 65726 | 0 | 0 | 408444 |
Załaduj tabelę do pamięci
# select * from pgfadvise_willneed('pgbench_accounts'); relpath | os_page_size | rel_os_pages | os_pages_free --------------------+--------------+--------------+--------------- base/11874/16447 | 4096 | 262144 | 80650 base/11874/16447.1 | 4096 | 65726 | 80650
Wyczyść pamięć podręczną tabeli
# select * from pgfadvise_dontneed('pgbench_accounts'); relpath | os_page_size | rel_os_pages | os_pages_free --------------------+--------------+--------------+--------------- base/11874/16447 | 4096 | 262144 | 342071 base/11874/16447.1 | 4096 | 65726 | 408103
Przywróć strony z pamięci podręcznej
Tutaj używamy parametru typu bit-string reprezentującego strony do załadowania i wyładowania z pamięci.
# select * from pgfadvise_loader('pgbench_accounts', 0, true, true, B'101001'); -- Varbit décrivant les pages à manipuler relpath | os_page_size | os_pages_free | pages_loaded | pages_unloaded ------------------+--------------+---------------+--------------+---------------- base/11874/16447 | 4096 | 408376 | 3 | 3
UWAGA:w przypadku wersji demonstracyjnej powyżej obsługiwanych jest tylko 6 stron danych, 1 ładuje stronę, 0 rozładowuje stronę.