プロセスレベルのキャッシュ削除機能がサポートされているため、永続的な接続のメモリ使用量を減らし、永続的な接続が過剰になってデータベースのメモリが不足しないようにします。 この機能では、使用頻度の低いキャッシュを解放するためにLRU (Least Recently Used) ポリシーを使用します。 これにより、接続のメモリ使用量が削減され、ApsaraDB RDS for PostgreSQLインスタンスの安定性が向上します。
前提条件
RDSインスタンスはPostgreSQL 11以降を実行します。 この機能がまだサポートされていない場合は、RDSインスタンスのマイナーエンジンバージョンを更新する必要があります。 詳細については、「マイナーエンジンバージョンの更新」をご参照ください。
背景情報
PostgreSQLのバックエンドプロセスがテーブルにアクセスするたびに、テーブルのメタデータがオンプレミスデバイスにキャッシュされ、キャッシュはプロアクティブにリリースされません。 これにより、後続のディスクアクセスが減少します。 その結果、永続的な接続は、多数のキャッシュを生成し、メモリ不足 (OOM) エラーを引き起こす可能性がある。 この問題を解決するために、キャッシュ削除機能を導入して、最も早い機会に使用頻度の低いキャッシュを解放します。
シナリオ
多数の永続的な接続が存在するサービスとしてのソフトウェア (SaaS) シナリオ
影響
このトピックに関連するパラメーターを変更しても、インスタンスの再起動はトリガーされません。
使用上の注意
RDSインスタンスを期待どおりに実行するために、一部のキャッシュを削除できません。 極端な場合、指定されたキャッシュの上限を完全に満たすことはできません。
手順
ApsaraDB RDS for PostgreSQLの接続キャッシュは、relcache、syscache、およびplancacheのキャッシュで構成されています。 relcacheは、ユーザーテーブルのメタデータをキャッシュするために使用されます。 syscacheは、システムテーブルのタプルをキャッシュするために使用されます。 plancacheは、ユーザー定義の実行計画をキャッシュするために使用されます。 ApsaraDB RDS for PostgreSQLでは、relcacheおよびsyscacheにキャッシュできるオブジェクトの数を調整できます。 plancacheにキャッシュできるオブジェクトの数を制限することはできません。
各プロセスのキャッシュ使用状況を監視する場合は、CREATE EXTENSION rdsutilsステートメントを実行して依存拡張をインストールし、rds_enable_cache_monitorパラメーターの値をonに設定する必要があります。
rds_enable_cache_monitorパラメーターをonに設定すると、データベースのパフォーマンスが低下し、各SQL文の実行時間が約2ミリ秒長くなります。rds_enable_cache_monitorパラメーターは、ApsaraDB RDSコンソールでのみ変更できます。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのパラメーターの変更」をご参照ください。
現在の接続のキャッシュ削除機能の設定の変更
-現在の接続のrelcacheの削除機能を有効にして、最大1,000のユーザーテーブルをキャッシュします。
SET rds_relcache_max_cached_relations = 1000;
-現在の接続のrelcacheの削除機能を無効にします。
SET rds_relcache_max_cached_relations = -1;
-現在の接続のsyscacheの削除機能を有効にして、最大10,000のシステムテーブルのタプルをキャッシュします。
set rds_syscache_max_cached_tuples = 10000;
-現在の接続のsyscacheの削除機能を無効にします。
set rds_syscache_max_cached_tuples = -1; すべての接続のキャッシュ削除機能の設定
ApsaraDB RDSコンソールにログインし、rds_relcache_max_cached_relationsおよびrds_syscache_max_cached_tuplesパラメーターを設定します。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのパラメーターの変更」をご参照ください。
Parameters
パラメーター | 説明 | 設定 |
rds_enable_cache_monitor | 各プロセスのキャッシュ使用量を監視するかどうかを指定します。 有効な値:
| ビジネス要件に基づいてこのパラメーターを設定する必要があります。 |
rds_relcache_max_cached_relations | 1つの接続に対してキャッシュできるユーザーテーブルの最大数。 有効値: [-1, INT_MAX] 。 デフォルト値: -1。数が制限されていないことを示します。 |
|
rds_syscache_max_cached_tuples | 1つの接続に対してキャッシュできるシステムテーブルのタプルの最大数。 有効値: [-1, INT_MAX] 。 デフォルト値: -1。数が制限されていないことを示します。 |
|