PolarDB for PostgreSQL クラスタは、一括インポートインフラストラクチャを提供します。
前提条件
お使いの PolarDB for PostgreSQL クラスタは、次のデータベースエンジンバージョンのいずれかを実行しています。
PolarDB for PostgreSQL 16 リビジョンバージョン 2.0.16.6.2.0 以降
PolarDB for PostgreSQL 15 リビジョンバージョン 2.0.15.12.4.0 以降
PolarDB for PostgreSQL 14 リビジョンバージョン 2.0.14.13.28.0 以降
PolarDB コンソールで、または 文を実行することで、クラスタの リビジョンバージョンを確認
Configure WordPress to use Azure Blob storage WordPress を Azure Blob Storage で使用するように構成する このチュートリアルでは、WordPress アプリケーションを Azure Blob Storage でメディアをアップロードおよび配信するように構成する方法について説明します。この構成により、WordPress サイトのパフォーマンスとスケーラビリティが向上します。 Azure Blob Storage は、画像、ビデオ、オーディオ ファイルなどの非構造化データを保存するための、スケーラブルでコスト効率の高いソリューションです。WordPress と統合することで、メディア ファイルをクラウドに保存し、Azure のグローバルなインフラストラクチャを活用して配信できます。 このチュートリアルでは、以下の手順について説明します。 Azure Storage アカウントを作成する Azure Blob Storage コンテナーを作成する WordPress プラグインをインストールして構成する メディア ファイルを Azure Blob Storage にアップロードする 始める前に、Azure サブスクリプションと WordPress Web サイトが必要です。Azure サブスクリプションをお持ちでない場合は、無料アカウントを作成できます。 Azure Storage アカウントを作成する Azure Storage アカウントを作成するには、次の手順に従います。 Azure portal にサインインします。 + リソースの作成 を選択します。 ストレージ を検索して選択します。 ストレージ アカウント を選択します。 作成 を選択します。 ストレージ アカウントの名前、リソース グループ、場所、パフォーマンス、冗長性などの必要な情報を入力します。詳細については、「ストレージ アカウントの作成」をご参照ください。 確認および作成 を選択します。 作成 を選択します。 ストレージアカウントが作成されたら、アクセスキーを取得します。これらのキーは、WordPress からストレージアカウントにアクセスするために必要になります。詳細については、「ストレージ アカウント アクセス キーの管理」をご参照ください。 ```できます。クラスタのリビジョンバージョンが要件を満たしていない場合は、次のソリューションを使用してください。
PolarDB for PostgreSQL 15 以降: リビジョンバージョンを更新する。
PolarDB for PostgreSQL 14 以前: 一括書き込み用のマテリアライズドビューを作成またはリフレッシュする。
背景情報
トランザクション中に新しく作成されたオブジェクトにデータを一括インポートする場合、トランザクション分離メカニズムにより、トランザクションがコミットされるまで、これらのオブジェクトは他のプロセスからは見えません。この機能に基づいて、PolarDB for PostgreSQL は階層型最適化を実装し、バルクデータインポートのパフォーマンスを大幅に向上させています。
PolarDB for PostgreSQL は、現在のプロセス内でのみ表示されるオブジェクトに対して、汎用の一括インポートインフラストラクチャを提供します。このインフラストラクチャは、バッファ管理のバイパス、ページの一括構築、ストレージページの一括拡張、WAL の一括ロギング、同期操作の非同期操作への変換により、一括インポートのパフォーマンスを大幅に向上させます。
使用上の注意
一括インポートインフラストラクチャを使用できる SQL 操作は次のとおりです。
CREATE INDEXREINDEXVACUUM FULLALTER TABLE SET TABLESPACECREATE MATERIALIZED VIEWREFRESH MATERIALIZED VIEW- 説明
CREATE TABLE AS または SELECT INTO 操作が一括インポートインフラストラクチャを使用するかどうかは、
wal_levelパラメータの値によって異なります。パラメータ値がlogicalより小さい場合、操作はデフォルトで一括インポートインフラストラクチャを使用します。値がlogicalの場合、操作はデフォルトで 複数挿入テーブル AM インフラストラクチャ の一括挿入インターフェイスを使用します。
仕組み
バッファ管理のバイパス
新しく作成されたオブジェクトにインポートされたデータは、トランザクションがコミットされ、ページ構築フェーズ中にプロセスプライベートメモリに直接書き込まれるまで、他のプロセスには見えません。これにより、共有 バッファープール がバイパスされ、バッファープール ロックの競合が回避され、ページ構築効率が大幅に向上します。
ページの一括拡張
従来の一括インポートメカニズムは、通常、ページごとの書き込みモードを使用します。ページがいっぱいになるたびに、システムはストレージ管理レイヤーインターフェイスを介して単一ページの拡張をトリガーします。クラウドストレージの待ち時間が長いため、このようなページごとの拡張操作は、メインの実行パスに大きな I/O 待機オーバーヘッドをもたらす可能性があります。この問題に対処するために、PolarDB for PostgreSQL は、プロセスのプライベートメモリ内の複数ページのデータを事前に集約することでプロセスを最適化します。事前に集約されたページ数が事前定義されたしきい値に達すると、システムはストレージ管理レイヤーインターフェイスを介してバッチページ拡張を実行します。これにより、頻繁な単一ページ拡張によるオーバーヘッドが削減されます。
WAL の一括ロギング
従来の一括インポートメカニズムは、テーブルとインデックスのインポートに、行ごとのロギングモードを使用します。挿入されるデータの各行に対して、個別の WAL エントリが生成されます。この方法では、I/O 操作が頻繁に発生し、メタデータのオーバーヘッドが高くなります。PolarDB for PostgreSQL は、いくつかの重要な最適化を導入しています。プライベートメモリでページを構築するプロセス中に、複数のデータ行が単一のページに統合され、永続化を保留中の複数のページがプライベートメモリに事前に集約されます。プライベートメモリでページのバッチが構築された後、PolarDB for PostgreSQL は XLOG_FPI タイプの WAL ログを使用してデータを一括で記録します。このタイプのログは、ページへの増分変更ではなく、ページデータ全体を直接キャプチャします。従来の行ごとのロギングアプローチと比較して、この方法はよりコンパクトであり、WAL ログに関連するメタデータのオーバーヘッドを大幅に削減します。
同期操作の非同期操作への変換
トランザクションがコミットされた後、プライベートメモリに構築されたページは、他のプロセスから見える必要があります。理論的には、トランザクションをコミットする前に、構築されたすべてのページをストレージに完全に永続化する必要があります。ただし、この同期永続化は、メインの実行パスの待ち時間を大幅に増加させます。この問題に対処するために、PolarDB for PostgreSQL は非同期アプローチを使用します。バッチページの構築が完了すると、システムはすぐにこれらのページを共有 バッファープール にコピーし、ダーティページとしてマークします。これにより、ページがディスクに物理的に書き込まれるのを待たずに、トランザクションをコミットして返すことができます。ダーティページの永続ストレージへの実際の書き込みは、バックグラウンドの並列ダーティページフラッシュプロセスによって非同期的に実行されます。このアプローチは、PolarDB の高スループットダーティページフラッシュ機能を使用して、ページ構築とバックグラウンドダーティページフラッシュの並列処理を実現します。
システムクラッシュが発生した場合でも、このメカニズムはデータ整合性を確保します。FPI タイプの WAL ログはページ構築中に事前に記録されるため、これらのログはリカバリ中に使用して、コミットされたデータの整合性を保証できます。
使用方法
polar_bulk_write_maxpages パラメータは、プロセスのプライベートメモリに事前に集約されるページの最大数を指定します。この制限に達すると、システムは一括ページ拡張、一括 WAL ロギング、および後続の書き込み操作のために共有 バッファープール へのページコピーをトリガーします。パラメータのデフォルト値は、ほとんどのシナリオで最適なパフォーマンスが得られるように事前に調整されています。
SHOW polar_bulk_write_maxpages;
polar_bulk_write_maxpages
---------------------------
1MB
(1 row)