PolarDBを使ったベストプラクティスの紹介

# はじめに

この記事は[PolarDBなどのデータベースに関するTipsを記事投稿しよう by Alibaba Cloud Advent Calendar 2023](https://qiita.com/advent-calendar/2023/alibaba2)です。

直近、[AlibabaCloudを試す機会](https://qiita.com/yutaroud/items/cf415be93f085a45e8b3)があり、その時に使用した、PolarDBについて気になったので、今回ベストプラクティスをまとめてみました！

## [PolarDB](https://www.alibabacloud.com/ja/product/polardb?spm=a2c65.11461447.0.0.3db44bcapiI33t)とは

MySQLまたはPostgreSQLのエコシステムと100%の互換性を兼ね備えている分散型のリレーショナルデータベースサービスです。
サービスの特徴として、以下が挙げられます。

* 高速かつ柔軟なスケーリング
    * 垂直方向でのスケーリング
        * クラスター仕様のアップグレード/ダウングレード
    * 水平方向でのスケーリング
        * 最大16のノードの追加
    * 上記スケーリングが数分以内に完了する
    * 自動スケーリングをCPUの使用率に応じて設定することができる
* 高可用性
    * 複数リージョンにまたいで、障害発生時でもすぐに別ノードへの切り替えがされる
    * データのバックアップやデータの復元が数分で行える
    * 99.5%のSLA([ソース](https://www.alibabacloud.com/help/en/legal/latest/polardb-service-level-agreement))

また、PolarDBというよりはAlibabaCloudの特徴として、料金の支払い方法に特徴があります。
サブスクリプション(月額先払い)モデルとPay-as-you-goという従量課金モデルがあります。
一定の使用が見込まれる場合はサブスクリプションモデルにすると、料金が安く済みます。

## 使い方
まず最初にクラスターを作成します。
課金方法を選び、性能や設定に注意して作成しましょう。
特に注意すべきなのは、課金方法とインスタンスの仕様についてです。
AWSのように、全てが従量課金ではないので、間違ってサブスクリプションで購入してしまうと、料金が支払われてしまいます。(ここは、課金タイミングが数日後とかだと嬉しいですね)
インスタンスの仕様は後から変更はできますが、お金を無駄遣いしてしまうことにもなるので、慎重に選択してください。
![スクリーンショット 2023-12-25 23.21.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/09379cff-f5ed-a413-ce64-a4c600962703.png)
作成が完了すると、下記のような画面が出て、決済が行われます。
![スクリーンショット 2023-12-25 23.21.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/8e3876af-390e-01b1-bb0e-b5c78a343ded.png)

## PolarDBを使う上でしておく方が良いこと

* 読み取り専用ノードの追加
* ホットスタンバイクラスターの有効化
* テーブル名での大文字と小文字の区別
    * クラスターの作成後に変更ができないので要注意！
* アラートルールの設定
* 自動スケーリングの有効化
* Performance Insightの有効化
* ストレージプランの購入
* 並列クエリの有効化
* X-Engineの有効化 (サービスにもよる)

それぞれ詳しく説明していきます！

### 読み取り専用ノードの追加

高可用性の保証をするために、本番環境では必ず読み取り専用ノードを追加しましょう。
[こちら](https://www.alibabacloud.com/help/ja/polardb/polardb-for-postgresql/add-or-remove-a-read-only-node)でもアナウンスされている通り、設定しておかないと障害に弱いサービスとなります。

最初のクラスター作成時にデータベースカテゴリをクラスター選択し、読み取り専用ノードを1にしておきましょう。
![スクリーンショット 2023-12-26 0.00.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/8ca608cf-c510-dd53-73df-d78538e72da4.png)

### ホットスタンバイクラスターの有効化

こちらも同じく、高可用性を保証するために設定しておいた方が良いです。
障害が起きた時に、即座に切り替えが行われるので、短い時間でのサービス停止にすることができます。
こちらも同じく最初のクラスター作成時に設定ができます。
![スクリーンショット 2023-12-26 0.00.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/15530035-855c-0a9b-653d-560f7d9b9c44.png)

### テーブル名での大文字と小文字の個別
**こちらは後から設定できないので注意です！**
サービスによっては検索する際に困ると思うので、必ず確認しましょう！
同じく最初のクラスター作成時に設定ができます。
![スクリーンショット 2023-12-25 23.51.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/dd7b2797-9852-e062-1281-c39af366bce7.png)

### アラートルールの設定

AWSでいうところのCloudWatch Alarmです。
負荷が高くなってきた場合に、アラートを設定しておくのがおすすめです。
負荷状況がどのタイミングで高くなるのかを把握したり、後述する自動スケーリングを行う前に、どれくらいの頻度でスケーリングがされそうかを特定するのに役立ちます。

クラスターのメニューからモニタリング > アラートルールの作成で設定可能です。

![スクリーンショット 2023-12-25 23.48.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/61f61e9a-3374-21bd-57d5-a6f6bb6482d3.png)

### 自動スケーリングの有効化
本番運用を行うサーバーでは障害が起きる前に、スケーリングさせておくことが重要です。
また、サーバーの応答が遅くなったりとユーザーの離脱につながる可能性もあるので、特定時間で一定の負荷上昇が見込まれる場合などは設定しておくことがおすすめです。

設定方法はクラスターのメニュー > 診断 > Autonomy Service Settingsから設定できます。![スクリーンショット 2023-12-26 0.37.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/1df3ced5-75b9-b7fb-1fbb-6e783de0ff82.png)

ポリシーに基づいて、スケーリングさせたり、特定の条件時にスケールアップしたりと柔軟に設定が可能です。
![スクリーンショット 2023-12-26 0.38.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/6bc4cf55-f397-1e71-69e6-ad5e36248282.png)


### Performance Insightの有効化
DBのパフォーマンス分析を行うために重要です。
メモリやCPUの使用率などを確認してデータベースサーバーの状況を確認したりできます。
クラスターのメニューから診断 > Perfomance Insightを選択し、有効化をするだけです。
![スクリーンショット 2023-12-26 0.05.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/e12a1eac-8cec-0f19-1d39-ae7f36aaf34f.png)


### [ストレージプランの購入](https://www.alibabacloud.com/help/en/polardb/polardb-for-mysql/what-is-a-storage-package-and-a-fixed-specification-calculation-package)
料金を抑えるために、データ量の多いサーバーでかつ本番サーバーとして長期的に使うことが見込まれる場合は必ずこちらを設定しましょう。

従量課金方式と比べて最大10%~45%コストの削減ができます。
年間のストレージプランにするとさらに15%ほど削減ができるので、安定したサービスの場合はこちらを選択しましょう。

最初の購入時に選択することもできますが、大抵の場合はサービスが安定稼働してから購入することになると思います。

現在のストレージ使用量を確認した後、クラスターの作成からストレージプランを選択し、適切な容量を選択して購入しましょう。

![スクリーンショット 2023-12-26 0.30.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/c9025aca-1051-c350-cf19-8e3da7bc3a9d.png)

![スクリーンショット 2023-12-26 0.25.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/fb2a74b3-cc85-435f-b3ee-e5fff1d622b8.png)

また、用途に応じてサブスクリプションプランも検討しましょう。
最初のコストは高くなりますが、トータルで見た時により安価に利用することができます。

### [並列クエリの有効化](https://www.alibabacloud.com/help/ja/polardb/polardb-for-mysql/user-guide/overview-22)
DBのパフォーマンスを上げるために重要です。MySQLを使用している場合にサポートされるので、MySQLを利用している方は有効化しておきましょう。
8C 以降のインスタンスではデフォルト有効化されます。 可能であれば本番サーバーは8C以降のインスタンスを選択するのが良いかと思います。

![スクリーンショット 2023-12-26 0.22.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/e674c2da-4734-5213-1d33-521a23b8bc64.png)


### X-Engineの有効化
ストレージコストの削減に有効です。
[こちらの記事](https://qiita.com/hmatsu47/items/4b1847a935b41c3eb75c)でパフォーマンスについてベンチマークしてくれているので、参考にしてみてください。
有効化の方法はクラスターのメニューからX-Engineを選択し、有効化するだけです。
![スクリーンショット 2023-12-26 0.02.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/9c2109ee-b23d-5637-dad3-9a73eaaa0d08.png)
![スクリーンショット 2023-12-26 0.02.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/f5bfc4c5-0783-2e16-b448-4741b22ac0fe.png)


## AWSと違う嬉しいこと

* リージョンごとにインスタンスが何個あるかが一目で確認できること
    * AWSだと、各リージョンに遷移しないといけないので嬉しいですね
![スクリーンショット 2023-12-25 23.27.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/6b16213d-fadd-c8c0-ae30-c492e9aa162d.png)
* コストパフォーマンスが良い
    * [こちらの記事](https://qiita.com/komasayuki/items/3b2f739a4a9e2373f6af)でも示されているように、コスパが良いです。安価で使いたい場合はおすすめです
* コンソール上でできることが多い
    * アカウントの作成やデータベースの作成だったり、直接クエリを叩ける
        * ![スクリーンショット 2023-12-25 23.41.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/5fba1964-fdb2-cbd5-9aee-ccb1d40908ca.png)
* コンソールが見やすい
    * DBの様子は定期的に見る可能性が高いので、コンソールが見やすいのは地味だけど嬉しいポイントですね！
    * ![スクリーンショット 2023-12-26 0.43.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/c6d48d9f-18fa-ae8c-14df-09f3f3c7cf9d.png)



# おわりに

以上、PolarDBを使ったベストプラクティスの紹介でした！
いかがでしたでしょうか？ PolarDBを使う際はぜひ参考にして、設定をしてみてください！

最後までご覧いただきありがとうございました！