Skip to content

Установка

Ссылка на публичный репозиторий: https://git.angara.cloud/gbgreenplum/greenplum.metric.hook

Предварительные требования

  • g++ 7.5.0+
  • CMake
  • Greenplum 6.x
  • GRPC 1.46+
  • Ninja (опционально)

Установка через плейбук

Для установки модуля greenplum.metric.hook необходимо запустить плейбук GP_hooklib согласно инструкции на соответствующей странице.

Ручная установка

После успешной компиляции в папке сборки создается модуль hook/libgreenplum.metric.hook.so. Подробнее на странице Сборка.

Модуль hook/libgreenplum.metric.hook.so необходимо скопировать в Greenplum:

cp hook/libgreenplum.metric.hook.so /usr/local/greenplum/lib/postgresql/libgreenplum.metric.hook.so

Необходимо скопировать модуль на все сегменты (мастер и сегменты). Для этого можно использовать утилиту gpscp:

gpscp -f hostfile libgreenplum.metric.hook.so =:/usr/local/greenplum/lib/postgresql/libgreenplum.metric.hook.so

Убедиться, что пользователь, под которым работает Greenplum, имеет права на доступ к библиотеке. В примере ниже предполагается, что Greenplum функционирует под пользователем gpadmin:gpadmin:

sudo chown gpadmin:gpadmin /usr/local/greenplum/lib/postgresql/libgreenplum.metric.hook.so

Необходимо добавить использование метрик в конфигурационный файл postgresql.conf Greenplum в переменную shared_preload_libraries.

Перед внесением изменений проверить текущее значение параметра shared_preload_libraries:

gpconfig -s shared_preload_libraries

Если параметр shared_preload_libraries пуст, установить его значение:

gpconfig -c shared_preload_libraries -v 'libgreenplum.metric.hook'

Если параметр уже содержит другие библиотеки, добавить библиотеку libgreenplum.metric.hook в список:

gpconfig -c shared_preload_libraries -v 'some_other_library,libgreenplum.metric.hook'

После добавления библиотеки в shared_preload_libraries необходимо перезагрузить кластер Greenplum.

Установка расширения

После установки библиотеки libgreenplum.metric.hook необходимо установить расширение для удобного доступа к собираемым данным.

  • Загрузить окружение:
source /usr/local/greenplum/greenplum_path.sh
  • Скопировать файлы расширения в соответствующую директорию Greenplum:

на мастер-хосте:
cp -r ./extension/* $GPHOME/share/postgresql/extension/

//gpscp 
gpscp -f <gp_host_file> extension/ =:/usr/local/greenplum/share/postgresql/extension/

//scp для каждого сегмента
scp -r extension <ssh_user>@<IP>:/usr/local/greenplum/share/postgresql/extension
Все следующие операции выполняются пользователем с правами администратора:

  • Установка расширешия:

    CREATE EXTENSION IF NOT EXISTS gbc_greenplum_metric;
    

  • Обновление расширения:

    ALTER EXTENSION gbc_greenplum_metric UPDATE;
    

  • Проверка установленных версий расширения:

    SELECT * FROM pg_available_extension_versions WHERE name ='gbc_greenplum_metric';
    

  • Проверка схем установки расширения:

    SELECT * FROM pg_extension_update_paths('gbc_greenplum_metric');
    

  • Создание пользователя для gbc_greenplum_metric (при необходимости):

CREATE USER <USERNAME> WITH ENCRYPTED PASSWORD '<PASSWORD>';
  • Настрйка прав доступа

Выполнить следующие SQL-команды от имени пользователя с правами администратора для предоставления необходимых прав доступа пользователю:

GRANT USAGE ON SCHEMA gbc_greenplum_metric TO <USERNAME>;

GRANT EXECUTE ON FUNCTION gbc_greenplum_metric.metric_version() TO <USERNAME>;
GRANT EXECUTE ON FUNCTION gbc_greenplum_metric.metric_version_segments() TO <USERNAME>;
GRANT EXECUTE ON FUNCTION gbc_greenplum_metric.getTableFilesDataByDBOID() TO <USERNAME>;
GRANT EXECUTE ON FUNCTION gbc_greenplum_metric.getFileSizeByOid(integer) TO <USERNAME>;
GRANT EXECUTE ON FUNCTION gbc_greenplum_metric.getFileInfo(integer) TO <USERNAME>;

Функции расширения

  • metric_version - выводит информацию о версии установленной библиотеки хуков, на мастере
  • metric_version_segments - выводит информацию о версии установленной библиотеки хуков, на каждом сегменте
  • getTableFilesDataByDBOID - на вход принимает OID базы данных, отдает информацию о каждой табличке в базе в каждом сегменте
  • getFileInfo - на вход принимает OID файла, отдает информацию о файле на каждом сегменте

Пример:

SELECT * FROM gbc_greenplum_metric.getTableFilesDataByDBOID(12818);