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 разтоварва страницата.