PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

pgFincore 1.2, rozszerzenie PostgreSQL

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ę.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyczerpano dozwolony rozmiar pamięci 8589934592 bajtów

  2. Odejmij tygodnie od daty w PostgreSQL

  3. Czy funkcje PostgreSQL są transakcyjne?

  4. Oblicz Max of Sum pola z adnotacjami w pogrupowanym zapytaniu w Django ORM?

  5. Dodawanie obiektu dict do postgresql