Добавил:
ИВТ (советую зайти в "Несортированное")rnПИН МАГА Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Database 2024 / Books / Мониторинг PostgreSQL.pdf
Скачиваний:
26
Добавлен:
20.11.2024
Размер:
6.87 Mб
Скачать

3.9. Выполнение процедур и функций

95

пути источником данных может быть система мониторинга.Если ограничение еще не достигнуто, проблему можно решить на уровне конфигурации СУБД, увеличив значение pg_stat_statements.max,но это потребует перезапустить сервер.

stats_reset—отметка времени последнего сброса статистики.Позволяет четко представлять,за какой интервал времени накоплена статистика по запросам.

Пример вывода:

# SELECT

dealloc, now() - stats_reset AS age FROM pg_stat_statements_info;

dealloc

|

age

---------

+

-------------------------

0

| 18 days 11:51:27.117115

Вприведенномпримеревидно,чтосуществующейемкостидостаточноиудалениястатистики не происходило (как минимум за последние 18 дней).

3.9. Выполнение процедур и функций

Для реализации сложной логики при обработке данных можно использовать функции. Такие функции могут быть написаны на SQL и могут объединять в себе несколько запросов. Кроме SQL поддерживаются и такие процедурные языки (procedural language, PL), как PL/pgSQL, PL/Tcl, PL/Perl и PL/Python. Когда в рабочей нагрузке присутствуют запросы с вызовами функций, перед администратором возникает задача поиска медленных функций и их оптимизации. Для простейшего анализа производительности функций СУБД есть представление pg_stat_user_functions,котороесодержитнеобходимыйминимумстатистикиповыполнению функций. Для более детального профилирования функций придется использовать сторонние инструменты.

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

Совместно с pg_stat_user_functions можно использовать и pg_stat_statements. Во втором представленииможнонайтизапросы,вкоторыхвызываетсяфункция,ипоимеющимсяполям получить информацию о времени выполнения и используемых ресурсах.

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

none—выключает отслеживание статистики (значение по умолчанию);

pl—включает отслеживание только функций на процедурных языках;

all—включает отслеживание всех функций,включая функции на языках SQL и С.

96Глава 3. Выполнение запросов и функций

Стоитотметить,что SQL-функции,которые встраиваются (inline) в вызываемый запрос,не отслеживаются при любом значении параметра.

Представление pg_stat_user_functions содержит относительно небольшой объем данных:

funcid—уникальный идентификатор функции;

schemaname—имя схемы,которой принадлежит функция;

funcname—имя функции,которое можетбытьнеуникальным внутри схемы,посколькудопускаются перегруженные функции,отличающиеся набором входных параметров;

calls—общее количество вызовов функции;

total_time — общее время выполнения функции (в миллисекундах), включая и время выполнения вложенных функций,если таковые имеются;

self_time—общее время выполнения самой функции (в миллисекундах) без учета времени выполнения вложенных функций.

Какяужеотмечал,основнойсценарийиспользованияэтойстатистики—этоопределениенаи- более часто вызываемых функций и функций, выполнение которых занимает больше всего времени. В тестовой нагрузке на основе стандартного сценария pgbench отсутствуют вызовы функций,поэтому статистики будетнемного и она будетвключатьв себятолько вызовы функций из расширений:

# SELECT * FROM pg_stat_user_functions;

 

 

 

 

 

 

funcid |

schemaname |

funcname

| calls |

total_time | self_time

--------

+

------------

+

-------------------------

+

-------

+

------------

+

------------

16398

|

public

|

pg_stat_statements_info

|

1

|

0.006

|

0.006

16409

|

public

|

pg_stat_statements

| 14751

|

14246.418

|

14246.418

16416

|

public

|

pg_buffercache_pages

| 28936

|

122401.529

| 122401.529

В этом запросе нетдополнительных условий или сортировок,так как я заранее знаю,что в статистике немного данных. Есть статистика только по трем функциям, принадлежащим двум расширениям: pg_buffercache и pg_stat_statements. Две из них запрашиваются агентом мониторинга, и в поле calls отражается количество вызовов. Время total_time и self_time для обеихфункцийсовпадает,посколькувнихнеиспользуютсявложенныевызовыдругихпользовательских функций.Суммарное время выполнения функций составило примерно 122 и 14 секунд. Функция pg_buffercache_pages вызывается в два раза чаще, однако ее общее время выполнения больше примерно в 8,5 раза,то есть ее выполнение обходится СУБД дороже.

Используя такой подход и сравнивая время выполнения функций, можно находить наиболее долгие.Следующим запросом можно получить статистику из мониторинга:

# increase(postgres_function_total_time_seconds_total{service_id="primary"}[1m])

Резюме 97

Взапросеиспользуетсяincreaseвместоrate.Посколькуэтифункциивызываютсятолькоагентом мониторинга, то очевидно, что вызовы происходят относительно редко, несколько раз в минуту,поэтому с этойточки зрения удобнее видеть,сколько временитратится на выполнениефункцийзаоднуминуту(вместооднойсекунды).Вслучаежепроизводственныхнагрузок, где выполнение функций может происходить чаще и конкурентно в нескольких сеансах, использование rate может быть более предпочтительным.

Нарис.3.8отражаетсято,чтоможнобыловидетьввыводезапросакpg_stat_user_functions,— выполнение функции pg_buffercache_pages занимает бóльшую часть времени:

Рис. 3.8.Функции с наибольшим временем выполнения

В среднем за минуту выполнение этой функции занимает 33 миллисекунды, против 4 милли-

секунд для функции pg_stat_statements.

Резюме

Запросы являются базовой единицей выполнения рабочей нагрузки.

Мониторинг запросов обязателен и важен для понимания рабочей нагрузки.

Для анализа рабочей нагрузки используется расширение pg_stat_statements, которое выключено по умолчанию.

Представление pg_stat_statements содержитстатистику по планированию и выполнению запросов,утилизации ресурсов,времени ввода-вывода,генерации WAL.

Представление pg_stat_statements является важным источником данных для графиков мониторинга и отчетов о работе СУБД.

СУБД предоставляет сквозную идентификацию запросов для анализа статистики из разных источников.

98Глава 3. Выполнение запросов и функций

Представление pg_stat_statements_info содержит полезную информацию о работе рас-

ширения pg_stat_statements.

Статистика выполнения пользовательских функций находится в pg_stat_user_functions.

Соседние файлы в папке Books