2013-10-10 3 views
1

Я пытался устранить некоторые повторяющиеся ошибки H12/13 на Heroku. После исчерпания всего, что я могу найти в Google/Heroku/Stack Overflow, я теперь проверяю, не вызвали ли некоторые долговременные запросы базы данных рекомендации по поддержке Heroku.Мониторинг производительности Heroku Postgres с помощью pg_stat_statements

Обновление: Я нахожусь в производстве экземпляра крана. В соответствии с принятым ответом ниже ... похоже, вы не можете сделать это на Heroku. Лучшее, что я мог сделать, это фильтровать их на следующей SQL:

SELECT u.usename, (total_time/1000/60) as total_minutes, 
     (total_time/calls) as average_time, query 
FROM pg_stat_statements p 
JOIN pg_user u ON (u.usesysid = p.userid) 
WHERE query != '<insufficient privilege>' 
ORDER BY 2 
DESC LIMIT 10; 

Я пытаюсь использовать очень полезный пост Крейга Kerstien в, http://www.craigkerstiens.com/2013/01/10/more-on-postgres-performance/ но работает в некоторых вопросах разрешения.

Когда я запрашиваю таблицу pg_stat_statements, я получаю «недостаточные права» для некоторых более длинных запросов, и не появляется, что Heroku позволяет вам изменять права пользователя.

Кто-нибудь знает, как я могу изменять разрешения, просматривать эти запросы на Heroku?

heroku pg:psql --remote production 
psql (9.2.2, server 9.2.4) 
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) 
Type "help" for help. 

d4k2qvm4tmu579=> SELECT 
d4k2qvm4tmu579-> (total_time/1000/60) as total_minutes, 
d4k2qvm4tmu579-> (total_time/calls) as average_time, 
d4k2qvm4tmu579-> query 
d4k2qvm4tmu579-> FROM pg_stat_statements 
d4k2qvm4tmu579-> ORDER BY 1 DESC 
d4k2qvm4tmu579-> LIMIT 10; 
    total_minutes | average_time |   query   
------------------+-------------------+-------------------------- 
121.755079699998 | 11.7572250919775 | <insufficient privilege> 
17.9371053166656 | 1.73208859315089 | <insufficient privilege> 
13.8710526000023 | 1.33945202190106 | <insufficient privilege> 
6.98494270000089 | 0.674497883626922 | <insufficient privilege> 
6.75377774999972 | 0.652175543095124 | <insufficient privilege> 
6.55192439999995 | 0.632683664174224 | <insufficient privilege> 
3.84014626666634 | 1.12786802880252 | <insufficient privilege> 
3.40574066666667 | 1399.61945205479 | <insufficient privilege> 
3.16332020000008 | 0.929081204384053 | <insufficient privilege> 
2.30192519999944 | 0.222284382614463 | <insufficient privilege> 
(10 rows) 
+0

Вы не в состоянии запросить БД в качестве суперпользователя базы данных? (например, postgres) – bma

+0

Насколько я могу судить по документации Heroku, вы не можете. –

ответ

0

Для использования pg_stat_statements вам необходимо запустить экземпляр уровня производительности Heroku Postgres. Даже тогда он сможет показывать статистику только для запросов, выполняемых вашим приложением (или любого клиента с использованием предоставленных героем учетных данных). Вы не сможете видеть запросы для суперпользователей (плакаты, collectd). Производственные планы - это журавль и вверх (я считаю).

Вы можете увидеть имя пользователя, вступив в pg_user:

SELECT u.usename, (total_time/1000/60) as total_minutes, 
     (total_time/calls) as average_time, query 
FROM pg_stat_statements p 
JOIN pg_user u ON (u.usesysid = p.userid) ORDER BY 2 DESC LIMIT 10; 
2

Я не могу ответить на ваш вопрос прямо, но, возможно, взглянуть на плагин программатор-экстра, который приносит много этого добра непосредственно к Heroku CLI и возвращает данные :)

https://github.com/heroku/heroku-pg-extras

+0

Спасибо, это выглядит действительно полезно, несмотря на эту проблему. –

Смежные вопросы