sql >> データベース >  >> RDS >> PostgreSQL

最近のリリースで新しく進化するPostgreSQLエンタープライズ機能

    PostgreSQLは、バージョン10から11、12、13に、パーティショニングの強化、並列クエリ、論理レプリケーションなど、Oracleとの真の競争相手となる他の多くの画期的な機能も導入しました。このブログ投稿では、PostgreSQLの最新バージョンに含まれている新しい注目すべきPostgreSQL機能のいくつかを紹介します。

    パーティション機能

    宣言型パーティション分割

    PostgreSQLバージョン9.4まで、PostgreSQLには実際のパーティション分割はありませんでした。これは、非常に限られた機能とパフォーマンスの利点を提供するテーブル継承によってのみ達成されました。機能の多くは、トリガーまたはSQLコマンドを使用して手動で管理されます。たとえば、トリガーを使用して、INSERTの前に行を正しいパーティションに転送する必要がありました。パーティションごとに個別にインデックスを作成する必要があります。 PostgreSQLバージョン10は宣言型パーティション化を生み出しましたが、それでもパーティションごとに制約とインデックスを作成する必要がありました。

    PostgreSQL 11には、パフォーマンスの向上と、パーティション化されたテーブルのアプリケーションに対する透過性の向上に役立つ、非常に印象的な新しいパーティション化機能のセットが付属しています。

    パーティション化されたテーブルの論理レプリケーション

    PostgreSQL 13では、パーティション化されたテーブルを論理的に複製するためのサポートが導入されました。以前は、パーティションをスタンバイに個別に複製する必要がありました。ただし、今ではすべてのパーティションを同時に自動的に複製できます

    パーティション分割方法

    現在サポートされているパーティション分割方法は、範囲、リスト、ハッシュです。

    キーとインデックス

    PostgreSQL 12で、パーティションテーブルの外部キーの完全サポートが追加されました。PostgreSQLは、パーティションテーブルの主キー、インデックス、トリガーのサポートも誇っています。

    デフォルトのパーティション

    PostgreSQLでは、残りのどのパーティションとも一致しないデータを格納するための「デフォルト」パーティションを作成できます。 Oracleデータベースでは利用できないため、Oracleユーザーはこの機能を気に入るはずです。

    行の移動

    パーティションキー列を変更するUPDATEステートメントにより、影響を受ける行が適切なパーティションに移動されるようになりました。

    パーティションの剪定

    クエリの計画と実行中のパーティション除去戦略を強化することで、SELECTのパフォーマンスを向上させます。パーティションの削除を実行する新しい方法が追加されました。この新しいアルゴリズムは、クエリのWHERE句を調べることで、一致するパーティションを判別できます。前のアルゴリズムは、各パーティションをチェックして、クエリのWHERE句と一致するかどうかを確認しました。これにより、パーティションの数が増えるにつれて、計画時間がさらに長くなりました。

    クエリ実行中のパーティションプルーニング

    プリペアドステートメントに関しては、クエリパラメータは実行前にはわかりません。パラメータが不明なため、クエリプランナーは計画フェーズ中にパーティションを削除できません。そのため、エグゼキュータは実行中にパーティションのプルーニングを実行して、パラメータに一致するパーティションのみにアクセスします。

    最近のリリースで新しく進化するPostgreSQLEnterpriseの機能クリックしてツイート

    インデックス機能

    カバーインデックス

    PostgreSQLでは、btreeインデックスに非キー列を追加できるようになりました。クエリは通常、検索する列よりも多くの列を取得する必要があるため、PostgreSQLでは、一部の列が単なる「ペイロード」であり、検索キーの一部ではないインデックスを作成できます。インデックスのみのスキャンを実行して必要な行を取得するのに役立ちます。

    同時にインデックスを再作成

    PostgreSQL 12以降、Oracle REBUILD INDEXコマンドのように、読み取り/書き込み用にテーブルをロックせずに、REINDEXCONCURRENTLYを使用してインデックスを再構築できます。

    並列インデックスの作成

    並列インデックス作成(PostgreSQL 11で導入され、現在はbツリーインデックスにのみ適用可能)を使用すると、max_parallel_workers値までインデックスをより高速に作成し、maintenance_work_memを複数のインデックスを保持するのに十分な大きさに設定できます。データのコピー。並列インデックス作成により、インデックス作成時間を大幅に短縮できます。

    Bツリーインデックスでのデータの重複排除

    インデックスに重複するエントリがある場合があります。これは、同じインデックスに少なくとも2つのインデックスエントリがあるBツリーインデックスのリーフノードに、すべてのインデックス列の同じデータが含まれていることを意味します。 PostgreSQL 13に重複排除機能を追加すると、これらの重複するBツリーインデックスエントリをグループ化して、グループエントリにまとめることができます。これの利点は、列データを複製する必要がないため、スペースを節約し、ディスクとRAMの負荷を軽減することです。エントリが重複していると、不要なインデックスの肥大化も発生します。

    認証

    SCRAM-SHA-256

    PostgreSQL 11では、SCRAM-SHA-256パスワード認証がサポートされるようになりました。この方法では、信頼できない接続でのパスワードの盗聴を防ぎ、暗号化されたハッシュ形式でパスワードを保存できます。

    現在サポートされているすべてのパスワード認証方法の中で、これが最も安全な方法です。

    GSSAPI

    GSSAPIを使用すると、安全な認証と、それをサポートするシステムの自動シングルサインオンが可能になります。この認証方法は、GSSAPI互換のセキュリティライブラリに依存しています。データベース接続を介して送信されるデータは、SSLが使用されていない限り、暗号化されません。ただし、認証自体は安全です。 Kerberos認証を使用するGSSAPIは、業界標準に従ってPostgreSQLで可能です。 Kerberosを使用する場合、標準プリンシパルは「servicename / hostname@realm」の形式で使用されます。サーバーが使用するキータブに含まれるプリンシパルはすべて、PostgreSQLサーバーによって受け入れられます。

    LDAP

    パスワード認証と同様に動作するこの認証方法は、検証方法としてLDAPを使用します。ユーザー名とパスワードのペアを検証するためにのみ使用されるため、認証が機能するには、ユーザーがデータベースにすでに存在している必要があります。 LDAP認証は、単純なバインドモードまたは検索+バインドと呼ばれるもののいずれかで動作します。 Search + bindを使用すると、識別名、ドメイン名、または電子メールのみを使用できる単純なバインドモードと比較して、他の識別子を使用できます。

    証明書

    証明書認証方法では、SSL証明書を使用して認証します。したがって、SSL接続でのみ使用できます。証明書認証では、パスワードは必要ありません。クライアントは、認証できるように、有効で信頼できる証明書を提供する必要があります。証明書の共通名はデータベースのユーザー名と照合され、一致するものが見つかった場合は、クライアントがログインします。

    その他の注目すべき機能

    パラレルバキューム

    PostgreSQL 13のリリースにより、VACUUMコマンドの改善が実装されました。問題の改善点は、追加されたパラメータオプションPARALLELです。 PARALLELを使用すると、VACUUMのインデックスバキュームフェーズとインデックスクリーンアップフェーズを実行できます。これにより、単一のテーブルに対応する複数のインデックスを並列バキュームできます。

    並列クエリ

    通常、大量のデータをスキャンするほとんどのレポートクエリでは、インデックススキャンを使用しても、多くの行のデータをスキャンまたは集計する必要があるため、パフォーマンスが低下します。これらのクエリは、9.4までは1つのCPUしか使用できず、シリアルに実行できます。

    並列クエリ(並列シーケンシャルスキャン、マージ結合、ハッシュ結合、集計、およびその他の並列クエリプラン機能を提供)を使用すると、これらのクエリで複数のワーカーを利用でき、パフォーマンスを向上させることができます。ドキュメントに従って2倍から10倍に改善します。

    この投稿をチェックして、並列クエリをいつ使用するかを確認してください。

    ネイティブ論理レプリケーション

    PostgreSQLはバージョン10でネイティブ論理レプリケーションを導入し、ストリーミングレプリケーションとは異なり、Oracle Streamsのように、特定のテーブル、列、または行をレプリケートするためのより柔軟なレプリケーションオプションを提供します。これを使用して、複数のデータベース間で分割したり、複数のデータベースから統合したりできます。また、PostgreSQLの異なるメジャーバージョン間で複製することもできます。

    埋め込みトランザクションを使用したスト​​アドプロシージャ

    PostgreSQLをOracleデータベースからの移行と互換性のあるものにするもう1つの追加。

    バージョン9.4ではpgsqlプログラム(DOブロックまたは関数)内にトランザクション制御がなく、dblinkなどの回避策を使用してトランザクションを開始およびコミット/ロールバックする必要があります。

    バージョン11で初公開されたストアドプロシージャを使用して、whileループ、forループ、ifelseステートメントなどの任意のpgsql構造内にトランザクション制御を実装できるようになりました。ストアドプロシージャは関数に似ていますが、CALLコマンドで呼び出す必要があり、独立したプログラムとして機能します。

    生成された列

    Oracleデータベースと同様に、PostgreSQLで生成された列には、行内の他の列から自動的に計算されたデータを格納できます。これにより、クエリの実行中に値を計算する必要がなくなり、代わりに、生成された列の値が行のINSERTまたはUPDATEで計算されるため、クエリが高速化されます。

    JITコンパイル

    PostgreSQL 11、12、13はすべて、2018年に追加されたJust-in-Time(JIT)コンパイルをサポートしています。JITコンパイルは、解釈されたプログラム評価をに変換するプロセスです。ネイティブプログラム。 JITコンパイルを使用すると、このプロセスを実行時に実行できます。 JITの利点は、CPUがネイティブに実行できる式固有の関数を生成できることです。次に、このプロセスによりスピードアップが実現します。

    ページのチェックサム

    ページのチェックサムは、ディスクに保存されているデータの整合性を検証するのに役立つ機能です。以前は、PostgreSQLクラスターの初期化中にのみページチェックサムを有効にすることができました。 PostgreSQL 12では、pg_checksumsコマンドを使用してオフラインクラスターでページチェックサムを有効または無効にする機能が導入されました。

    概要

    この記事からわかるように、PostgreSQLは進化し続けるデータベースシステムであり、多くの強力な機能をテーブルにもたらします。すべての新しいバージョンは、Oracleなどの他のデータベースの真の競争相手となる新しいエキサイティングな機能を追加します。そのパーティショニングおよびインデックス作成機能は、すでに拡張されているツールボックスに追加される多くの新しい更新を取得します。

    PostgreSQLデータベースのマネージドソリューションをお探しの場合は、ScaleGridforPostgreSQLサービスをお気軽にチェックしてください。 30日間の無料トライアルを提供しており、すべての管理機能を制限なく使用できます。価格は月額わずか10ドルからで、24時間年中無休でサポートされるフルマネージドのエンタープライズグレードのPostgreSQLホスティングソリューションにアクセスできます。


    1. シャーロットでのPASSサミットに参加しますか?

    2. Postgres:json文字列をテキストに変換する方法は?

    3. SSMSのインストール方法

    4. psqlでデータベースを切り替える方法は?