1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-PgFincore

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

PgFincore


Набор функций для управления страницами в памяти из PostgreSQL

Набор функций для низкоуровневого управления отношениями с использованием mincore для исследования кэш-памяти.

ОПИСАНИЕ

В PostgreSQL каждая таблица или индекс разбивается на сегменты размером обычно 1 ГБ, а каждый сегмент разбивается на страницы в памяти, а затем на блоки для файловой системы.

Эти функции позволяют узнать, какие и сколько блоков диска из отношения находятся в кэше страниц операционной системы. Результат может быть представлен в виде VarBit и сохранён в таблице. Затем, используя эту таблицу, можно восстановить состояние кэша страниц для каждого блока отношения даже на другом сервере благодаря потоковой репликации.

Другие функции используются для установки флага POSIX_FADVISE для всего отношения (каждого сегмента). Вероятно, более полезными являются WILLNEED и DONTNEED, которые выталкивают и извлекают блоки каждого сегмента отношения из кэша страниц соответственно.

Каждая функция вызывается как минимум с именем таблицы или индексом (или oid) в качестве параметра и проходит по каждому сегменту отношения.

СКАЧАТЬ

Вы можете получить последний код с помощью git:

git clone git://git.postgresql.org/git/pgfincore.git
или
git://github.com/klando/pgfincore.git

Проект также доступен на pgfoundry: http://pgfoundry.org/projects/pgfincore

УСТАНОВИТЬ

Из исходного кода:

make clean
make
su
make install

Для PostgreSQL >= 9.1 войдите в свою базу данных и:

mydb=# CREATE EXTENSION pgfincore;

Для других версий создайте функции из скрипта SQL (он должен находиться в вашем каталоге contrib):

psql mydb -f pgfincore.sql

PgFincore также поставляется с Debian-скриптами для создания собственного пакета:

aptitude install debhelper postgresql-server-dev-all postgresql-server-dev-9.1
# или postgresql-server-dev-8.4|postgresql-server-dev-9.0
make deb
dpkg -i ../postgresql-9.1-pgfincore_1.1.1-1_amd64.deb

PgFincore упакован для RPM по адресу http://yum.postgresql.org/, а также для debian по адресу http://pgapt.debian.net/.

ПРИМЕРЫ

Вот несколько примеров использования. Если вам нужны дополнительные сведения, обратитесь к документации.

Получение текущего состояния отношения

Может быть полезно:

cedric=# select * from pgfincore('pgbench_accounts');
      relpath       | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit | pages_dirty | group_dirty 
--------------------+---------+--------------+--------------+-----------+-----------+---------------+---------+-------------+-------------
 base/11874/16447   |       0 |         4096 |       262144 |    262144 |         1 |         81016 |         |           0 |           0
 base/11874/16447.1 |       1 |         4096 |        65726 |     65726 |         1 |         81016 |         |           0 |           0
(2 rows)

Time: 31.563 ms

Загрузка таблицы или индекса в буфер страниц ОС

Возможно, вы захотите сохранить таблицу или индекс в буфере страниц ОС или предварительно загрузить таблицу перед выполнением хорошо известного большого запроса (сокращая время запроса).

Чтобы сделать это, просто выполните следующий запрос:

cedric=# select * from pgfadvise_willneed('pgbench_accounts');
      relpath       | os_page_size | rel_os_pages | os_pages_free 
--------------------+--------------+--------------+---------------
 base/11874/16447   |         4096 |       262144 |        169138
 base/11874/16447.1 |         4096 |        65726 |        103352
(2 строки)
 
Время: 4462,936 мс
  • Столбец os_page_size сообщает, что размер страницы составляет 4 КБ.
  • Столбец rel_os_pages — это количество страниц указанного файла.
  • Столбец os_pages_free — это количество свободных страниц в памяти (для кэширования).

Создание снимка и восстановление состояния буфера страниц ОС таблицы или индекса (или более)

Вы... pgfincore

Функция возвращает набор записей.

pgfincore(IN relname regclass,
          OUT relpath text, OUT segment int, OUT os_page_size bigint,
          OUT rel_os_pages bigint, OUT pages_mem bigint,
          OUT group_mem bigint, OUT os_pages_free bigint,
          OUT databit varbit, OUT pages_dirty bigint,
          OUT group_dirty bigint)
  RETURNS setof record

Документация

pgsysconf

Эта функция выводит размер блоков ОС и количество свободных страниц в буфере страниц ОС.

cedric=# select * from pgsysconf();
 os_page_size | os_pages_free | os_total_pages 
--------------+---------------+----------------
         4096 |         80431 |        4094174

pgsysconf_pretty

То же самое, но с более красивым выводом.

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

pgfadvise_WILLNEED

Эта функция устанавливает флаг WILLNEED для текущего отношения. Это означает, что операционная система попытается загрузить как можно больше страниц этого отношения. Основная идея заключается в предварительной загрузке файлов при запуске сервера, возможно, используя соотношение попаданий/промахов кэша или наиболее необходимые отношения/индексы.

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

pgfadvise_DONTNEED

Эта функция устанавливает флаг DONTNEED для текущего отношения. Это означает, что операционная система сначала выгрузит страницы файла, если ей нужно освободить некоторую память. Основная идея состоит в том, чтобы выгрузить файлы, когда они больше не нужны (вместо, возможно, более интересных страниц).

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

pgfadvise_NORMAL

Эта функция устанавливает для текущего отношения флаг NORMAL.

pgfadvise_SEQUENTIAL

Эта функция устанавливает для текущего отношения флаг SEQUENTIAL.

pgfadvise_RANDOM

Эта функция устанавливает для текущего отношения флаг RANDOM.

pgfadvise_loader

Эта функция позволяет напрямую взаимодействовать с кешем страниц. Её можно использовать для загрузки и/или выгрузки страниц из памяти на основе varbit, представляющего карту страниц для загрузки/выгрузки соответственно.

Работа с отношением pgbench_accounts, сегмент 0, произвольная карта varbit:

— Загрузка и выгрузка
cedric=# select * from pgfadvise_loader('pgbench_accounts', 0, true, true, B'111000');
     relpath      | os_page_size | os_pages_free | pages_loaded | pages_unloaded 
------------------+--------------+---------------+--------------+----------------
 base/11874/16447 |         4096 |        408376 |            3 |              3

— Загрузка
cedric=# select * from pgfadvise_loader('pgbench_accounts', 0, true, false, B'111000');
     relpath      | os_page_size | os_pages_free | pages_loaded | pages_unloaded 
------------------+--------------+---------------+--------------+----------------
 base/11874/16447 |         4096 |        408370 |            3 |              0

— Выгрузка
cedric=# select * from pgfadvise_loader('pgbench_accounts', 0, false, true, B'111000');
    relpath      | os_page_size | os_pages_free | pages_loaded | pages_unloaded 
------------------+--------------+---------------+--------------+---------------- ### pgfincore

Эта функция предоставляет информацию о кэше файловой системы (кэше страниц).

cedric=# select * from pgfincore('pgbench_accounts');
      relpath       | segment | os_page_size | rel_os_pages | pages_mem | group_mem | os_pages_free | databit | pages_dirty | group_dirty  
--------------------+---------+--------------+--------------+-----------+-----------+---------------+---------+-------------+-------------
 base/11874/16447   |       0 |         4096 |       262144 |         3 |         1 |        408444 |         |           0 |           0
 base/11874/16447.1 |       1 |         4096 |        65726 |         0 |         0 |        408444 |         |           0 |           0

Для указанного отношения возвращается:

  • relpath : путь к отношению;
  • segment : анализируемый номер сегмента;
  • os_page_size : размер одной страницы;
  • rel_os_pages : общее количество страниц отношения;
  • pages_mem : общее количество страниц отношения в кэше страниц (не общие буферы из PostgreSQL, а кэш ОС);
  • group_mem : количество групп смежных pages_mem;
  • os_page_free : количество свободных страниц в кэше страниц ОС;
  • databit : карта varbit файла, из-за её размера выводить её бесполезно. Используйте pgfincore('pgbench_accounts',true), чтобы активировать её.
  • pages_dirty : если определена константа HAVE_FINCORE и платформа предоставляет соответствующую информацию, как pages_mem, но для загрязнённых страниц;
  • group_dirty : если определена константа HAVE_FINCORE и платформа предоставляет соответствующую информацию, как group_mem, но для загрязнённых страниц.

DEBUG

Вы можете отладить PgFincore с помощью следующих уровней ошибок: DEBUG1 и DEBUG5.

Например:

set client_min_messages TO debug1; -- debug5 полезен только для отслеживания каждого блока

ТРЕБОВАНИЯ

  • PgFincore требует mincore() или fincore() и POSIX_FADVISE.

ОГРАНИЧЕНИЯ

  • У PgFincore есть ограниченный режим, когда POSIX_FADVISE не предоставляется платформой.

  • Для PgFincore требуется PostgreSQL >= 8.3.

  • PgFincore не работает в Windows.

СМОТРИТЕ ТАКЖЕ

Экспертиза PostgreSQL, техническая поддержка и помощь, тренинги:

https://www.data-bene.io

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

PgFincore содержит группу функций, предназначенных для управления страницами в памяти PostgreSQL. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-PgFincore.git
git@api.gitlife.ru:oschina-mirror/mirrors-PgFincore.git
oschina-mirror
mirrors-PgFincore
mirrors-PgFincore
master