PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

pgFincore 1.2, разширение PostgreSQL

pgFincore 1.2 е разширение на PostgreSQL за одит и манипулиране на кеша на страниците с данни на операционната система. Разширението вече има 7-годишна история на използване, с промени, съответстващи на производствените нужди.

Изтеглете тук най-новата версия 1.2, съвместима с PostgreSQL 9.6.

Кеш на данни

Кеширането на страници с данни е операция, която се случва "естествено", на няколко нива в управлението на данни. Обектът е прост:множество слоеве се наслагват между данните, физически записани на диска, и връщането на потребителя. Понастоящем почти всеки слой данни има абстракция за по-бързо обслужване на команди за четене и запис. По този начин повечето твърди дискове предлагат кеш за запис, който забавя физическото писане, и кеш за четене, който ви позволява да предвиждате бъдещи заявки и да обслужвате данните по-бързо. Еквивалентна система съществува в SAN, RAID карти, операционни системи, софтуер и др.

PostgreSQL, разбира се, има собствена система за управление за запис и четене, споделените буфери , което може да бъде одитирано с разширението pg_buffercache.

Възможен е одит на кеша на операционната система със системни инструменти и pgFincore пренесете това в PostgreSQL.

Прочетете напред

Повечето операционни системи оптимизират пътеките на данните, като предоставят прозорец за четене напред, което позволява предварително зареждане на данни в кеш и по този начин го предоставят по-бързо на приложенията. PostgreSQL съдържа няколко оптимизации, които благоприятстват това поведение на системно ниво, а също така носи подобна функционалност с опцията за ефективна_io_concurrency.

Едно решение за улесняване на тези оптимизации е използването на системни повиквания POSIX_FADVISE. Отново pgFincore пренесете това решение в PostgreSQL.

pgFincore 1.2

Следователно това разширение позволява:

  • за да получите точна информация за заемането на таблица или индекс (и някои други файлове, използвани от PostgreSQL) в кеша на системата, поддържаща POSIX (linux, BSD, ...),
  • за да манипулирате този кеш:направете му карта и го възстановете по-късно или на друг сървър,
  • за да оптимизирате пътищата чрез извиквания на posix_fadvise.

Вземете pgFincore

Пакетите Debian и Red Hat, налични в дистрибуциите и за всяка версия на PostgreSQL в хранилищата на Apt PGDG и RPM PGDG.

И източниците на pgfincore git хранилище.

Имате нужда от помощ?

В допълнение към поддръжката на общността, можете да се свържете с 2ndQuadrant.

Примери за употреба

Настройка

$ sudo apt-get install postgresql-9.6-pgfincore
$ psql -c 'CREATE EXTENSION pgfincore;'

Системна информация

# select * from pgsysconf_pretty();
 os_page_size | os_pages_free | os_total_pages 
--------------+---------------+----------------
 4096 bytes   | 314 MB        | 16 GB

Оптимизиране на произволното движение (намаляване на прозореца за четене напред)

# select * from pgfadvise_random('pgbench_accounts_pkey');
          relpath | os_page_size | rel_os_pages | os_pages_free 
------------------+--------------+--------------+---------------
 base/16385/24980 | 4096         | 2            | 1853808

Оптимизиране на последователното преминаване (увеличаване на прозореца за четене напред)

# select * from pgfadvise_sequential('pgbench_accounts');
 relpath          | os_page_size | rel_os_pages | os_pages_free 
------------------+--------------+--------------+---------------
 base/16385/25676 | 4096         | 3176         | 1829288

Одит на кеша

# 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 | 

Заредете таблица в паметта

# 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

Изчистете кеша на таблица

# 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

Възстановяване на кеширани страници

Тук използваме параметър от типа на битов низ, представляващ страниците за зареждане и разтоварване от паметта.

# 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

ЗАБЕЛЕЖКА:за демонстрацията само 6 страници с данни се обработват по-горе, 1 зарежда страницата, 0 разтоварва страницата.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да пишем с главни букви първата буква на всяка дума в PostgreSQL

  2. Как timeofday() работи в PostgreSQL

  3. Странно съобщение за грешка в SQLAlchemy:TypeError:обектът 'dict' не поддържа индексиране

  4. PostgreSQL еквивалент на групово събиране на Oracle

  5. Как to_char() работи в PostgreSQL