2013-10-10 3 views
1

나는 Heroku에서 몇 가지 반복적 인 H12/13 오류 문제를 해결하려고 노력해 왔습니다. Google/Heroku/Stack Overflow에서 찾을 수있는 모든 것을 다 써 버린 후, 장기 실행 데이터베이스 쿼리가 Heroku 지원의 조언에 문제를 일으키는 지 확인하려고합니다.Heroku Postgres pg_stat_statements를 통한 성능 모니터링

업데이트 : 제작 크레인 인스턴스입니다. 아래에 허용 된 답변에 따라 ... 당신은 Heroku 에서이 작업을 수행 할 수 없습니다 나타납니다. 나는 크레이그 Kerstien의 매우 유용한 게시물을 사용하기 위해 노력하고있어

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; 

, http://www.craigkerstiens.com/2013/01/10/more-on-postgres-performance/하지만 실행하는 몇 가지 권한 문제로 : 내가 할 수 있었던 가장 아래의 SQL 당 그들을 필터입니다.

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

당신은 데이터베이스 수퍼 유저로 DB를 조회 할 수 없습니다? (예 : "postgres") – bma

+0

Heroku의 문서에서 알 수있는 한 당신은 할 수 없습니다. –

답변

0

pg_stat_statements를 사용하려면 Heroku Postgres의 프로덕션 레벨 인스턴스를 실행해야합니다. 그렇다면 앱 (또는 heroku에서 제공 한 자격 증명을 사용하는 모든 클라이언트)이 실행하는 쿼리에 대한 통계 만 표시 할 수 있습니다. 슈퍼 유저 (포스터, 콜렉트)에 대한 쿼리를 볼 수 없습니다. 생산 계획은 Crane and up입니다 (저는 믿습니다).

당신은 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에 직접이 선 (善)을 많이 제공하고 반환 년대 PG-별도의 플러그인을 살펴 수없는 데이터 :

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

+0

고맙습니다.이 문제에도 불구하고 정말 유용합니다. –