Edited at

HerokuのDBプランをあげる流れ

More than 5 years have passed since last update.

Heroku Postgresの

Plan: Kappa (HEROKU_POSTGRESQL_BRONZE) から

Plan: Ronin (HEROKU_POSTGRESQL_COPPER) に

あげる例で書きます。適宜読み替えて下さい。


まずは現状の確認

$ heroku pg:info

=== HEROKU_POSTGRESQL_BRONZE (DATABASE_URL)
Plan: Kappa
Status: available
Data Size: 10.00 GB
Tables: 50
PG Version: 9.1.4
Connections: 10
Fork/Follow: Available
Created: 2013-01-01 12:34 UTC
Maintenance: not required

これでデータサイズやテーブル数、コネクション数はわかる。

なお、dbnameやpasswordなども知りたい場合は

$ heroku pg:credentials HEROKU_POSTGRESQL_BRONZE

を叩けばOK。

ただ、Herokuはプランをあげてもキャッシュ用メモリやCPU性能しか上がらないので、本当に必要な情報はキャッシュヒット率だったりする。

それを調べるには

$ heroku pg:psql

と打ってから

SELECT 

sum(heap_blks_read) as heap_read,
sum(heap_blks_hit) as heap_hit,
(sum(heap_blks_hit) - sum(heap_blks_read)) / sum(heap_blks_hit) as ratio
FROM
pg_statio_user_tables;

と打てば、テーブルのキャッシュヒット率

SELECT 

sum(idx_blks_read) as idx_read,
sum(idx_blks_hit) as idx_hit,
(sum(idx_blks_hit) - sum(idx_blks_read)) / sum(idx_blks_hit) as ratio
FROM
pg_statio_user_indexes;

と打てば、Indexのキャッシュヒット率がわかる。

このことは以下のページに書いてある。

https://devcenter.heroku.com/articles/heroku-postgres-plans#determining-required-cachesize


DBプランをあげる一連の流れ

DBプランをあげることを決断したら、後は以下の流れでUpgradeできる

heroku maintenance:on

heroku pgbackups:capture --expire (最新のDBの状態をバックアップとして取得)
heroku addons:add heroku-postgresql:ronin (新しいDBはHEROKU_POSTGRESQL_COPPERだと取得)
heroku pg:wait (新しいDBができるまで待つ)
heroku pg:info (DBができているか確認)
heroku pgbackups:restore HEROKU_POSTGRESQL_COPPER (バックアップからDB状態をコピー)
heroku pg:promote HEROKU_POSTGRESQL_COPPER (新しいDBに繋ぎ変え)
heroku restart
--- 確認作業 ---
heroku maintenance:off

確認作業の部分はStagingを持っている人の場合、

heroku config | grep DATABASE_URL (DATABASE_URLをstaging用にコピー)

heroku config:set DATABASE_URL=postgres://xxxxxx --app your-staging-app
heroku restart --app your-staging-app

とやって、Staging環境から本番DBにつなぐことで行える。

数日運用してもう問題が無いと自信がついた頃、以下のコマンドで元のDBを削除する。

heroku addons:remove HEROKU_POSTGRESQL_BRONZE


公式ドキュメント