2012-11-30 6 views
11

上記のエラーメッセージにHeroku Postgres Basic(as per this question)が実行されていて、問題を診断しようとしています。Heroku "psql:FATAL:残りの接続スロットが非複製スーパーユーザー接続用に予約されています"

接続プーリングを使用することをお勧めしますが、Rails has this built inと思われます。もう1つの提案は、アプリケーションが正しく設定されておらず、接続が多すぎるということです。

私のアプリはすべての接続をActive Record経由で管理していますが、Navicatからデータベースに直接接続していました(少なくとも私が持っていたと思っていました)。

これはどのようにデバッグできますか?

解決

は、Herokuの問題だったが判明します。 Herokuサポートから:

基本データベースを実行しているサーバーで問題が検出されました。 これを突き止めて対処しますが、 新しい基本データベースをプロビジョニングし、PGBackupsを使用して として移行することをお勧めします。 https://devcenter.heroku.com/articles/upgrade-heroku-postgres-with-pgbackups それはあなたのデータベースを新しいサーバーに置くべきです。この の処理が中断していることをお詫び申し上げます。今後この問題を修正し、今後発生する可能性があります。

答えて

7

あなたはビューpg_stat_activity調べることで非常に多くの接続を持っている理由を見つけることができるかもしれない:

SELECT * FROM pg_stat_activity 

ほとんどのを、あなたはそれを閉じずに、新しい接続(複数可)を開き、いくつかの浮遊ループを持っています。

+0

私は他の人に属する接続の多くを見ることができます。鉱山には2つの意味があります。私はこれを見守ります。どうもありがとう! –

12

これは私のアプリで数回起こっています。何らかの理由で接続リークが発生した場合、突然データベースの接続が10倍多くなります。それはあなたがこのようなエラーではなく、トラフィックによって圧倒なっている場合であれば、これを実行してみてください:

heroku pg:killall 

データベースへのすべての接続を終了すること。状況によって危険な場合は、クエリを断つ可能性があるので注意してください。私はちょうどレールアプリを持っていて、それがダウンすると、いくつかのクエリを失うことは大したことではない。なぜなら、ブラウザーの要求は、とにかくタイムアウトしてからlooooooongになるからだ。あなたのサポートコールを保存するには

+0

これは私のベーコンを救った –

4

は、ここで私は同様の問題のためにHerokuのサポートから得た応答があります:

こんにちは、趣味の階層データベースの制限の

一つの未発表のメンテナンスです。多くの趣味データベースは単一の共有サーバー上で実行されます。ハードウェア保守の目的でそのサーバーを再起動するか、負荷分散のためにデータベースを別のサーバーに移行する必要があります。その場合、ログにエラーが表示されるか、接続に問題が発生します。サーバーが再始動している場合、データベースがオンラインに戻るには15分以上かかることがあります。

(ActiveRecord in Railsのような)接続プールを維持するほとんどのアプリケーションは、データベースへの新しい接続を開くことができます。ただし、アプリが再接続できないことがあります。それが起こった場合、あなたはヒーローを再起動してオンラインに戻すことができます。

これは、重要なプロダクションアプリケーション用のホビーデータベースの実行を推奨する理由の1つです。標準データベースとプレミアムデータベースには、ダウンタイムイベントの通知が含まれており、一般的にパフォーマンスと安定性が大幅に向上しています。 pg:copyを使用して、標準プランまたはプレミアムプランに移行することができます。

これが続く場合は、heroku addonsを使用して新しいデータベースをプロビジョニングしてみることもできます(追加するには、pg:copyを使用してデータを移動してください)。趣味のティアルールは$ 9の基本プランと無料のデータベースに適用されます。

おかげで、 ブラッドリー

関連する問題