ロジカルレプリケーション構成時は、Master(データ更新用)のDBには全文検索用のインデックスを設定しないため、インデックスを設定するレプリケーション構成なしの時のデータ更新性能と比べることで、どの程度更新性能が向上したかを示すことができます。」内の動画のメタデータをPostgreSQLへjsonb型として格納したものです。テーブル構造とデータの例を示します。任意の数値が入ります。INDEXコマンドでインデックスを作成します。インデックスは、良く検索されるであろう、動画のタイトル(title)と動画の詳細(description)に対してインデックスを設定します。全文検索のインデックスは以下の5パターンの設定を行います。断続的にINSERTを行うことで実現します。背景負荷のスループットは以下の通りです。背景負荷(約1200[record/s])INSERTするデータは以下のようなJSONデータです。検索されやすい、動画のタイトル、動画の詳細を対象に検索します。検索キーワードは、ヒット数が0にならない一般的な用語とします。検索に使うクエリーは以下の通りです。データ更新性能を記載します。高速にデータを更新していることを表しています。キーによって、更新性能が異なります。全文検索性能を記載します。記載されている数値が小さいほど、高速に検索出来ることを表します。検索に1件もヒットしない状態にならないように、事前に203317レコードを登録済みの状態で計測します。背景負荷がある場合は、INSERTとSELECTを別々のインスタンスから実行し、全文検索性能を測定します。データ更新性能を記載します。高速にデータを更新していることを表しています。全文検索用のインデックスを設定しません。そのため、結果はインデックスなしの時のデータ更新性能のみとなります。全文検索性能を記載します。記載されている数値が小さいほど、高速に検索出来ることを表します。検索に1件もヒットしない状態にならないように、事前に203317レコードを登録済みの状態で計測します。背景負荷がある場合は、INSERTとSELECTを別々のインスタンスから実行し、全文検索性能を測定します。構成のデータ更新性能の比較結果を示します。PGroongaのインデックスあり、ロジカルレプリケーション構成のMasterのデータ更新性能を示しています。ロジカルレプリケーション構成のデータ更新性能は、ほぼ同じ性能であることがわかります。全文検索用のインデックスを設定していないためです。データ更新性能を落とさず、全文検索の高速化が可能です。ロジカルレプリケーション構成時の全文検索性能の比較結果を示します。背景負荷がある状態での全文検索性能を比較しています。全文検索性能が向上しています。レプリケーション構成なしの時の全文検索性能とあまり変化はありません。全文検索性能を向上させることができます。設定する構成でのパフォーマンスを検証しました。性能影響を抑えています。問題ないと判断しました。設定しなくても良くなります。設定されていることによるデータ更新の劣化を防ぐことができる事がわかりました。今回の検証のような負荷分散を行った構成でも、通常の構成と同様の全文検索性能が発揮できることがわかりました。インデックスを利用した高速な全文検索が可能になります。検証概要¶PostgreSQLでは、9.0からレプリケーション機能を実装しており、継続的に機能強化が行われています。9.6からは、2台以上の複製先に対してデータを同期しながら更新が行える、複数同期レプリケーションが利用可能となりました。これにより、負荷分散構成でのデータの信頼性向上などが期待されます。従来まで可能であった非同期での複数台レプリケーションに比べ、同期処理にかかるオーバヘッドによってスループットが低下することが予想されます。同期の台数を増加させることによる性能的なオーバヘッドや、同期・非同期を混在させた環境での動作については懸念も存在します。同期レプリケーション・非同期レプリケーション、またそれらが混在する構成において、どのように性能が変化するのかを検証しました。レプリケーションとは¶データベースにおいて、レプリケーションとは複数のデータべースサーバの間で、データの一貫性を保ちながら、その内容を複製する手法を指します。データベースの可用性や性能向上を目的として利用される機能です。Slave側に転送し、反映することでレプリケーションが実現されます。転送時の処理方法を設定することにより、同期方式を選択することが可能となっています。「同期レプリケーション」と「非同期レプリケーション」の2種類の形態が存在します。同期方式¶PostgreSQLでは、同期中のWALファイルの処理を設定することにより、同期のレベルを設定することが出来ます。同期のレベルを高くすると、Slave側への同期が保証されるデータが増えますが、その分の処理によるオーバヘッドがかかるため、パフォーマンスが低下することになります。同期方式は、postgresql.confのパラメータ'synchronous_commit'により設定可能であり、以下の5つから選択することが可能です。本検証では、デフォルトの設定である'on'に設定し、測定を行っています。