PostgreSQL 11は、2018年10月10日に予定どおりにリリースされ、ますます人気が高まっているオープンソースデータベースの23周年を迎えました。
変更の完全なリストは通常のリリースノートで入手できますが、公式ドキュメントが最初のバージョンからイメージチェンジされたように、改良された機能マトリックスページをチェックする価値があります。これにより、詳細に飛び込む前に変更を見つけやすくなります。 。
たとえば、リリースノートページでは、「SCAM認証のチャネルバインディング」はソースコードの下に埋め込まれていますが、マトリックスではセキュリティセクションの下にあります。好奇心旺盛な方のために、インターフェースのスクリーンショットを次に示します。
PostgreSQL機能マトリックスさらに、上記のリンク先のBucardo Postgresリリースノートページは、独自の方法で便利であり、すべてのバージョンでキーワードを簡単に検索できます。
新着情報?文字通り何百もの変更を加えて、機能マトリックスにリストされている違いを確認します。
Bツリーのカバーインデックス(INCLUDE)
CREATE INDEXは、インデックスに非キー列を含めることができるINCLUDE句を受け取りました。 。頻繁に同一のクエリを実行するユースケースは、11月22日からのTom Laneのコミットで詳しく説明されています。これにより、開発ドキュメントが更新されます(つまり、現在のPostgreSQL 11ドキュメントにはまだ含まれていません)。したがって、全文についてはセクション11.9を参照してください。開発バージョンのインデックスのみのスキャンとカバーインデックス。
Bツリーインデックス用の並列化されたCREATEINDEX
名前からわかるように、この機能はBツリーインデックスにのみ実装されており、Robert Haasのコミットログから、実装が将来改良される可能性があることがわかります。 CREATE INDEXのドキュメントに記載されているように、並列インデックス作成方法と同時インデックス作成方法の両方で複数のCPUを利用しますが、CONCURRENTの場合、最初のテーブルスキャンのみが並列で実行されます。
この新機能に関連するのは、構成パラメーター maintenance_work_mem です。 およびmaintenance_parallel_maintenance_workers 。
最後に、ALTER TABLEコマンドを使用し、 parallel_workers の値を指定して、テーブルごとに並列ワーカーの数を設定できます。 。
今日のホワイトペーパーをダウンロードするClusterControlを使用したPostgreSQLの管理と自動化PostgreSQLの導入、監視、管理、スケーリングを行うために知っておくべきことについて学ぶホワイトペーパーをダウンロードする式の評価とタプルの変形のためのジャストインタイム(JIT)コンパイル
ドキュメントに独自のJITの章があり、この新機能は、LLVMサポートを使用してコンパイルされたPostgreSQLに依存しています(検証にはpg_configを使用してください)。
PostgreSQLでのJITのトピックは、専用のブログを必要とするほど複雑です(ドキュメントのJIT READMEリファレンスを参照)。それまでの間、JITに関するCitusDataブログは、主題を深く掘り下げたい人にとって非常に良い読み物です。
並列化されたハッシュ結合
並列クエリに対するこのパフォーマンスの向上は、共有ハッシュテーブルを追加した結果です。ThomasMunroが彼のParallel Hash for PostgreSQLブログで説明しているように、ハッシュテーブルが work_mem に収まる場合は、ハッシュテーブルの分割を回避します。 、これまでのところPostgreSQLの場合、パーティションファーストアルゴリズムよりも優れたソリューションのようです。同じブログでは、この機能を実装するために必要な作業の複雑さを物語る、ハッシュ結合に並列化を追加するために作成者が克服しなければならなかったPostgreSQLアーキテクチャの障害について説明しています。
デフォルトのパーティション
これは、他の定義されたパーティションと一致しない行を格納するためのキャッチオールパーティションです。新しいパーティションが追加された場合、デフォルトパーティションに多数の行が含まれていると遅くなる可能性があるデフォルトパーティションのスキャンを回避するために、CHECK制約が推奨されます。
デフォルトのパーティション動作は、ALTERTABLEおよびCREATETABLEのドキュメントで説明されています。
ハッシュキーによるパーティション分割
ハッシュパーティショニングとも呼ばれ、コミットメッセージで指摘されているように、この機能を使用すると、パーティションが同じ数の行を保持するようにテーブルをパーティショニングできます。これは、モジュラスを提供することによって実現されます。モジュラスは、より単純なシナリオではパーティションの数と等しくすることが推奨され、残りはパーティションごとに異なる必要があります。
詳細と例については、CREATETABLEのドキュメントページを参照してください。
パーティション化されたテーブルでの主キー、外部キー、インデックス、およびトリガーのサポート
テーブルのパーティション分割は、大きなテーブルのパフォーマンスを向上させるための大きなステップであり、これらの機能の追加により、最新スタイルの「宣言型パーティション分割」が導入されたPostgreSQL10以降のパーティション分割テーブルの制限に対処できます。
Alvaro Herreraによる作業は、外部キーが主キーを参照できるようにするために進行中であり、次のPostgreSQLメジャーバージョン12で予定されています。
パーティションキーの更新
パッチコミットログで説明されているように、この更新により、パーティションキーの更新によって行が無効になったときにPostgreSQLがエラーをスローするのを防ぎ、代わりに行が適切なパーティションに移動されます。
SCRAM認証用のチャネルバインディング
これは、SASL認証での中間者攻撃を防ぐことを目的としたセキュリティ対策であり、作成者のブログで詳しく説明されています。この機能には、少なくともOpenSSL1.0.2が必要です。
SQLストアドプロシージャのCREATEPROCEDUREおよびCALL構文
PostgreSQLには1996年からCREATEFUNCTIONがあり、バージョンは 1.0.1 ただし、関数はトランザクションを処理できません。ドキュメントに記載されているように、CREATEPROCEDUREコマンドはSQL標準と完全には互換性がありません。
注:この機能について詳しく説明する今後のブログにご期待ください。
結論
PostgreSQL 11のメジャーアップデートは、並列実行、パーティショニング、およびジャストインタイムコンパイルによるパフォーマンスの向上に重点を置いています。ストアドプロシージャにより、完全なトランザクション制御が可能になり、さまざまなPL言語で記述できます。