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