Heroku

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

公式ドキュメント