このカテゴリーでは競馬予想プログラミング以外でも役に立つ、PostgreSQLの汎用的な技術について解説します。
データベースに適したストレージとは
SSDの寿命
買ってからまだ2年しか経ってないパソコンが突然壊れたんですよ。原因はSSDの寿命。壊れるまでに、次のような順序で予兆がありました。
- パソコンの動作が重くなってくる
- ブルースクリーンが頻発する
- 突然シャットダウンする
Cドライブの空き容量には余裕があったから、ブルースクリーンが頻発するところまで警戒してなかったんですよ。初めての経験だったし。
慌てて新しいパソコンを買いに行って、最低限のソフトをインストールして、PostgreSQLを再構築しました。でも、その後で気づいたんですけど、そもそもSSDにデータベースを構築するのは間違いなんですよね。
「TARGET」みたいにデータの登録と検索だけで使うなら、空き容量をそのまま信じてSSDでも良いと思います。
SSDの寿命はだいたい5年くらいって説が有力なんですが、競馬予想の研究のために毎日PostgreSQLでレコードの登録と削除を繰り返しまくってたせいで、たった2年で1TBのSSDが壊れました。
データベースに適したHDD
SSDは書き込み回数に限度があるため、頻繁な書き込みが続くと劣化が早まり、故障リスクが高まります。また、SSDは故障時のデータ回復が難しく、データが突然消失するリスクもあります。これらの理由から、データベースの用途には耐久性が高く、コスパに優れたHDDが推奨されます。
ってことで、NAS(ネットワークHDD)にdataフォルダの保存先を変更することにしました。
NASへの変更には注意が必要です。SSDと比べると処理速度が遅くなり、時間のかかるクエリにギブアップしてエラーを返すこともあります。そのため、よく検討し、自己責任で行ってください。
NASが遅すぎたため後日、大容量の外付けSSDに変更しました。管理人@PC-KEIBAが選んだNASの話ですが、全てのNASがデータベースに不向きというワケではないと思います。
dataフォルダの保存先を変更する手順
この記事では、PostgreSQLのインストール後に、データの保存先を変更する手順を紹介します。Windowsでのやり方です。
PostgreSQLのサービスを停止する
Windowsサービスを開いて、PostgreSQLのサービスを停止します。
Windowsサービスを開く方法については、お使いのパソコン(OS)に適した方法を見つけるために、次のGoogleの検索結果を参考にしてください。→Windows サービス 開き方
■PostgreSQLのサービス名
postgresql-x64-11
dataフォルダをコピーする
Windowsエクスプローラーを使って、新しい保存先にコピー(コピー→貼り付け)します。
移動(切り取り→貼り付け)すると、PostgreSQLが動きません。
■コピー元(インストール時に設定した初期値)
C:\Program Files\PostgreSQL\11\data
■コピー先(NASに作成した保存先)
L:\PostgreSQL\data
レジストリを修正する
dataフォルダをコピーしたら、レジストリエディターを開いて、次のレジストリキーの値を変更します。
■レジストリキー
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-11\ImagePath
レジストリエディターを開く方法については、お使いのパソコン(OS)に適した方法を見つけるために、次のGoogleの検索結果を参考にしてください。→レジストリエディター
-D の引数を変更します。
■変更前(インストール時に設定した初期値)
-D "C:\Program Files\PostgreSQL\11\data" -w
■変更後(NASに作成した保存先)
-D "L:\PostgreSQL\data" -w
PostgreSQLのサービスを開始する
Windowsのサービスを開いて、PostgreSQLのサービスを開始します。もしうまくいかない場合は、次節を参照してください。
SQLエディタで確認する
最後に、SQLエディタでデータが見れるか確認してください。コピー元にあったテーブルを開けばOKです。
PostgreSQLのサービスが停止した場合
PostgreSQLに接続できなくなったら、PostgreSQLのサービスが停止している。NASに配置した場合は、ローカルのWindowsサービスでは開始できない。コマンドプロンプトで次のコマンドを実行すればOK。1回目で失敗したら、続けて2回目を実行すればOK。バッチファイルを作っておけば便利。
cd C:\Program Files\PostgreSQL\11\bin
pg_ctl -D "L:\PostgreSQL\data" restart
コマンドプロンプトを閉じるとサービスも停止しますので、開いたままにしておいてください。