SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Build 2022 で SQL Server 2022 の Public Preview が発表されました

leave a comment

Ignite 2021 でアナウンスされた、SQL Server 2022 ですが、本日開催の Build 2022 で Public Preview として CTP 2.0 がアナウンスされ、Public に評価することができるようになりました。

Build 2022 では Modernize your applications with new innovations across SQL Server 2022 and Azure SQL として、SQL Server 2022 のセッションも実施されました。

プレビューについては、現時点では、Download SQL Server 2022 Public Preview から Windows 版を入手することができます。

Public Preview に伴い、What’s new in SQL Server 2022 (16.x) Preview としてドキュメントも公開されています。

それ以外にも次のリンクで情報 / コンテンツが公開されています。

フィードバックについては、SQL Server feedback portal から出すことができますので、フィードバックがあればこちらから。

Contents

SQL Server 2022 の最新情報

Ignite 2021 でのアナウンス以降も様々なイベントで発表があり、当ブログでも SQL Server 2022 の情報は次のような投稿でまとめました。

今回のアナウンスに合わせて、公式ドキュメントが公開され、次のドキュメントで新機能がまとめられています。

Build 2022 で関連するセッションとしては、次の内容となります。

Ignite 2021 で SQL Server 2022 のアナウンスがされてから、Data Exposed でも、各機能について積極的に情報が発表されており、Pureview のアナウンスについても紹介されています。

全体の概要をつかみたい場合には、Get our decks でスライドを確認し、実動作を確認したい場合には、Try our demos でデモを実施するとよいかと。

 

SQL Server on Linux

SQL Server on Linux ならびにコンテナー版の SQL Server についても 2022 の Public Preview が開始されました。

ドキュメントも公開されました。

SQL Server on Linux CTP 2.0 時点では、Red Hat Enterprise Linux / Ubuntu / Docker Engine のサポートとなり、SUSE については今後、対象として追加 されるようです。

 

分析の新機能

 

Azure Synapse Link for SQL

SQL Database のデータを Synaspe Analytics の専用 SQL プールに対してニアリアルタイムで同期することができる機能です。

SQL Server 2022 だけでなく、Synapse Link for Azure SQL Database として、SQL DB でも利用することができます。

ETL ジョブは作成さず、Change Feed のテクノロジを使用して、変更データを検知し、専用 SQL プールに対してデータ同期を行うことができます。

 

Object Storage 統合

PolyBase により、EXTERNAL DATA SOURCE / OPENROWSET で、S3 互換のストレージに対してアクセスをすることができます。

S3 に対してバックアップを取得することもできます。

SQL Server 2022 からは Java Hadoop コネクタが廃止されますが、Azure BLOB ストレージへのアクセスについては、新しコネクタを使用して接続することができます。

 

可用性の新機能

 

Link Feature for Azure SQL Managed Instance

SQL Server 2022 と MI 間で分散型可用性グループのアーキテクチャを使用して、データ同期を行うことができます。

データベース移行 / DR 用複製 / 読み取りレプリカとして MI を活用することができます。

 

包含可用性グループ

従来までの可用性グループはユーザーデータベースのみの保護となっており、ログイン / SQL Server エージェントジョブといったシステム情報は各 SQL Server インスタンスで独立していましたが、可用性グループにシステムデータベースの一部のメタデータを含めることができるようになりました。

 

分散型可用性グループの REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT サポート

SQL Server 2017 で追加された REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT オプションが SQL Server 2022 では分散型可用性グループに対しても設定することができるようになります。

これにより分散型可用性グループでデータの同期が行われているインスタンスが何台存在することを保証するかの設定ができるようになります。

 

可用性グループの改善

Parallel Redo Thread Pool / Parallel Redo Batch Redo により、REDO の効率が向上しています。

 

バックアップメタデータの改善

backupset システムテーブルに last_valid_restore_time が追加されました。これにより、バックアップの復元が可能な最新の時間を判断することができます。

 

セキュリティ

 

Microsoft Defender for Cloud 統合

SQL Server 2022 の新機能というわけではありませんが、セキュリティの機能向上として、Microsoft Defender for SQL についての記載が追加されています。

SQL Server 2022 はクラウド統合として Azure との連携が強化されておりその一環として Azure Arc Enabled SQL Server による Microsoft Defender for SQL についても触れている形でしょうか。

 

Microsoft Purview 統合

Azure Arc と Purview に登録し、Azure AD 認証が有効化されている SQL Server については Purview のアクセスポリシーの適用対象とすることができます。以前 Announcement: Purview policy based access control for Azure SQL at scale – Private Preview としてアナウンスされた内容にも関係していますね。

当初のアナウンスされた機能では、 SQL Performance Monitoring / SQL Security Auditing の権限の設定を Purview から実施するという機能についてでしたが、データ所有者による読み取りアクセス制御 (データ所有者ポリシー) も使用することができるようになりました。

 

Ledger

Azure SQL Database で GA した Ledger (台帳) が SQL Server 2022 から、オンプレミスでも使用することができるようになります。

Ledger テーブルは高度なデータ改ざんの防止機能を備えた高レベルなデータセキュリティを実現することができるテーブルとなります。

SQL Database では、PaaS の制約上、実際にメモリ上のデータや、SQL Server をバイパスしたデータ書き換えを行うことができず、ダイジェストを変更して、データ改ざんの動作を確認していました。

SQL Server で使用することができるようになったことで、DBCC WRITEPAGE を使用して、直接データの書き換えを行うことができるので、不正なデータ改ざんが行われた場合の挙動をより正確に検証することが可能となります。

 

Azure Active Directory 認証

SQL Server のログインに Azure Active Directory のユーザーを使用することができます。

Azure Arc Enabled SQL Server として SQL Server を登録し、適切な設定を行うことで、Server の認証に AAD ユーザーを使用することができるようになります。

 

Always Encryptd Secure Enclaves

Always Encrypted Secure Enclaves を使用した暗号化列の取り扱いの柔軟性が増し、Nested Looop 以外の Join のサポートや、ORDER BY / GROUP BY のサポートが行われました。

これらのサポートは SQL Database ではすでに導入が行われており、最新の SQL Database 相当の暗号化列の取り扱いを SQL Server でも実現することができるようになります。

 

新しい権限とロール

新しいサーバーレベルロールが組み込みロールとして追加されました。「##MS_ ##」のロールが追加されており、今回追加されたロールが今後の推奨となるようで、従来の固定サーバーロールは下位互換としての提供という扱いになるようです。

 

動的データマスクの詳細な MASK / UNMASK 設定

SQL Database では先行して、一般提供:Azure SQL と Azure Synapse Analytics の動的データ マスキングの詳細なアクセス許可 として導入が行われていたのですが、SQL Server でも動的データマスクの MASK / UNMASK の権限を詳細につけることができるようになりました。

従来までは、マスクする / しないの設定だったものが、どのオブジェクトのレベルでマスクをするかの制御ができるようになり、特定のログインは一部のテーブルや列についてはマスク対象外とするというような調整ができます。

 

PFX 証明書のサポート / 対象鍵拡張の機能強化 / その他暗号化の改善

SQL Server の一部の機能では証明書を使用しているものがあり、証明書のバックアップには pvk / cer 等が使用されていました。Windows では PFX が使用される機会がよくあったのではないでしょうか。

従来は、pfx と pvkの変換が必要になった場合は、PVKConverterPvk2Pfx で変換をして、SQL Server が取り扱いやすい形式にしていました。

SQL Server 2022 では、PFX の取り込みがサポートされ、PFX の証明書を pvk と cer に分割することなく直接インポートすることができるようになります。

証明書のバックアップ / リストア時に使用できるストレージの指定も機能が向上し、従来まではローカルドライブに限定されていたものが Azure BLOB ストレージを配置場所として使用できるようになります。

 

TDS 8.0 のサポート

SQL Server 2022 では TDS 8.0 (従来までは TDS 7.x) と TLS 1.3 サポートが行われました。

TDS 8.0 では初期接続時の TDS プレログインの処理が変更され、プレログイン時の暗号化が行われます。(これに伴い、最新のドライバーでは Encrypte=Trueになっているんですかね)

SQL Server で任意の証明書を使用して暗号化接続を行う方法については、How to generate a self-signed SSL certificate for MS SQL server 2008 R2 using OpenSSL? が参考になります。

 

パフォーマンス

 

クエリストアの機能強化

クエリストアにはいくつかの機能強化が行われています。

セカンダリレプリカのクエリストア

Always On 可用性グループを使用している環境でクエリストアを有効にした場合、クエリストアに格納される情報は「プライマリレプリカのみ」となっており、セカンダリレプリカを読み取りワークロードで使用している場合、セカンダリレプリカで実行されているクエリの分析には、クエリストアの情報を活用することができず、クエリキャッシュから取得する必要がありました。

クエリキャッシュから情報を取得した場合、過去に遡っての分析が難しく、セカンダリレプリカのクエリ分析の難易度が上がっていました。

SQL Server 2022 では、セカンダリレプリカで実行されたクエリも、クエリストアに格納することが可能となり、セカンダリレプリカの読み取りワークロードの分析や補正の容易性が向上します。

クエリストアヒント

SQL Database では先行して搭載されていましたが、SQL Server でもクエリストアヒントが使用できるようになります。

クエリストアヒントにより、クエリストアに格納されているクエリに対して、ヒント句を設定することができるようになり、クエリストアによるプラン補正が、プランの強制 / 強制解除の他にヒント句の追加という選択肢が増えます。

クエリストアがデフォルトで有効化

SQL Server 2022 では、クエリストアがデフォルトで有効化されるというアナウンスがありましたが、現時点では、クエリストアはデフォルトで有効化されておらず、明示的に有効化数r必要があります。

これについては、Release Note で触れられていますので、最終的な実装については、まだウォッチが必要となります。

クエリストアのデフォルト化は強制で行われるわけではなく、現在の DB の設定は継承されます。DB のリストアをした際に、リストア元でクエリストアが有効化されていない場合は、リストア後に有効化する必要があります。

 

インテリジェントクエリ処理の機能強化

かねてからアナウンスがありましたが、インテリジェントなクエリ処理 (IQP) でいくつかの機能が追加されます。
IQP については https://github.com/microsoft/bobsql/tree/master/demos/sqlserver2022 でデモスクリプトが公開されていますので実際に動かしてみるのが良いと思います。

Percentile / Persistent Memory Grant Feedback

  • 互換性レベル 140 以上が対象
  • クエリストアを使用して Memory Grant Feedback の情報を永続化することでフィードバックを持続
  • 実行タイミングで必要となるワークスペースメモリが大きく変更する場合にクエリパフォーマンスの改善

PSP (Parameter Sensitive Plan) 最適化

  • 互換性レベル 160 が必要
  • クエリストアを有効にすることで PSP 最適化の情報がクエリストア統合される
  • パラメーター化クエリ / ストアドプロシージャでパラメーターによって大きく実行プランが変わる傾向のあるワークロードで、パラメーターに応じて複数の実行プランをキャッシュすることで、パラメータースニッフィングによる実行効率の低下を緩和

DOP フィードバック

  • SQL Server 2022 にすることで利用可能 (互換性レベルに依存しない / DOP_FEEDBACK=ON が必要)
  • クエリストアの有効化が必要
  • 過度に高い並列度でクエリが実行されていると該当のクエリに起因して同時実行性が低下する可能性がある
  • DOP を動的に調整し、特定のクエリによる過度な CPU の利用を抑え同時実行性を向上させる

基数推定フィードバック (CE Feedback)

  • 互換性レベル 160 が必要
  • クエリストアの有効化が必要
  • 繰り返し実行されるクエリが、基数推定モデル (CE Model) に起因して効率が悪い場合、他の基数推定モデルにより解消するかを仮定 / 検証し、動的に適用を行う

プラン強制の最適化 (Compilration Replay)

  • SQL Server 2022 にすることで利用可能 (互換性レベルに依存しない)
  • クエリストアの有効化が必要
  • 強制されたクエリの繰り返しの実行によるオーバーヘッドを削減するため、コンパイル手順 (最適化再生スクリプト) をクエリストアに保存することで、コンパイル時間を短縮 (コンパイルオーバーヘッドを削減) する。

概数での結果取得の機能強化

  • SQL Server 2022 にすることで利用可能
  • SQL Server 2022 のアナウンスで発表されているが、現時点ではドキュメントがない (今後の CTP ?)
  • APPROX_COUNT_DISTINCT 以外に概数での結果取得用の集計関数が追加される
  • APPROX_PERCENTILE_CONT / APPROX_PERCENTILE_DISC が追加される

 

In-Mmeory OLTP の管理

詳細な情報は公開されていないのですが、大容量メモリ環境において、In-Memory OLTP のメモリ管理が改善され、メモリ不足になる状態を軽減するような対応が行われているようです。

 

XML 圧縮

XML データ型の圧縮 (XML_COMPRESSION=ON) が可能となりました。クエリの実行プランの取得をする場合などには、XML のデータ型が使用されるため、SQL Server の内部情報を定期的にダンプしたい場合のストレージ格納効率の向上につながるのではないでしょうか。

 

最適化の向上

バッチモードの実行に AVX512 拡張を含む、新しいハードウェア機能を活用できるようになりました。

How It Works: SQL Server 2016 SSE/AVX Support / SQL 2016 – It Just Runs Faster: Column Store Uses Vector Instructions (SSE/AVX) で触れられていますが、Batch Mode では、CPU の機能が活用されています。

SQL Server 2022 では、最新の CPU の機能が効果的に活用されます。

 

システムページラッチ競合の改善

システムアロケーションページである GAM / SGAM は様々なワークロードでアクセス / 変更が行われ、競合が発生しやすい情報となります。

SQL Server 2022 では GAM / SGAM の同時更新時の競合を軽減させる対応が含まれ、tempdb を頻繁に使用するワークロードで特に効果が発揮され、同時実行性が向上します

 

バッファプールの並列スキャン

大容量のメモリ (1TB 以上のメモリ) を搭載している環境では、バッファー プール スキャンをトリガーする操作は、大きなメモリ コンピューターで低速で実行される場合があります で解説されているような操作を実行した場合、バッファプールのスキャンがシングルスレッドで実行されるため、処理の完了にj時間がかかるケースがありました。

SQL Server 2019 までは、特定の更新プログラムを適用することで、バッファプールのスキャンについ手の拡張イベントが追加され、長時間スキャンが行われているのかを確認することができるようになりました。

SQL Server 2022 では、スキャンを複数のスレッドで並列化することで、処理の効率化が行われました。

 

順序指定クラスター化列ストアインデックス

Synapse Analytics ではすでに実装されていましたが、SQL Server 2022 から順序指定クラスター化列ストアインデックスを作成することができるようになりました。

これにより、アクセスされるセグメントの削減につながる可能性が出てきます。

 

管理

セットアップ時に Azure に接続

SQL Server のインストール時に、インストールと同時に Azure Arc にオンボードすることができるようになります。これを実現するため、セットアップ時のパラメーターにに Azure Arc 向けのオプションが追加されました。

WindowsAgent.SqlServer 拡張機能の登録まで自動的に実行されます。

 

max server memory の計算

インストール時に max server memory の推奨値を計算して、その値を設定することができます。

 

高速データベース復旧の機能強化

高速データベース復旧 (ADR) の機能が強化されました。

永続化バージョンストア (PVS) のクリーンアップスレッドがインスタンス単位ではなく、DB 単位で起動することで、並列性が向上し、PVS のページトラッカーのメモリフットプリントの改善が行われています。

クリーンアッププロセスを効率化するための改善が多数盛り込まれています。

 

スナップショットバックアップのサポート強化

VDI クライアントを必要とせず、明示的に I/O の凍結 (Freeze) と解凍 (Thaw) ができるようになりました。(以前はアンドキュメントの DBCC コマンドを使うとできました)

sample PowerShell script でサンプルが公開されていますが、ALTER DATABASE SET SUSPEND_FOR_SNAPSHOT_BACKUP という追加され、I/O を明示的に停止することができます。

サンプルでは、停止後に Azure Disk のスナップショットを取得し、I/O 凍結の解除を行うというような処理を実施していますが、VDI クライアントを使用しなくても、柔軟にスナップショットバックアップを実装するための I/O 制御が行えるようになりました。

VDI クライアント (SQL Server の VSS) と連動しないバックアップとなると、バックアップ履歴が残らないですが、明示的に BACKUP DATABASE を WITH METADATA_ONLY で取得することで、SQL Server を介さないでバックアップを取得した場合でも、バックアップ履歴を SQL Server で管理することが可能となっています。

 

低優先度によるデータベースの圧縮

DBCC SHRINKDATABASE / SHRINKFILE を実行する際に WAIT_AT_LOW_PRIORITYという低優先度で実行するというオプションを指定することができるようになります。

これにより、上記のステートメントのロックの優先順位を落とし、ロック競合が発生した場合に SHRINK 操作を低優先とすることで、ロック競合による同時実行性の低下が発生することを抑えることができます。

非同期更新についても瞬間的には

非同時自動統計更新の並列性

SQL Database ではすでに実装されていたのですが、Improving concurrency of asynchronous statistics update で解説されている統計情報の非同期更新が発生した場合に、統計情報自動更新時のロック競合による同時実行性の低下を抑えることができる ASYNC_STATS_UPDATE_WAIT_AT_LOW_PRIORITY の設定が追加されました。

非同期の統計情報の自動更新時に取得されるロックの優先度を低くすることで、ロック競合を削減し、同時実行性を大きく低下させるのを防ぐことができます。

 

S3 互換のオブジェクトストレージに対してのバックアップ / リストア

BACKUP / RESTORE 実行時の URL 指定が Azure BLOB ストレージだけでなく、S3 互換のストレージに対しても実行することができ、S3 互換のオブジェクトストレージをバックアップ先として活用することができるようになります。

 

言語

 

CREATE STATISTICS の AUTO DROP オプションの追加

CREATE STATISTICS ステートメントに AUTO_DROP オプションが追加されました。

サードパーティツール等により、統計情報を明示的に作成した場合、その統計情報が依存関係オブジェクトとして認識されることで、スキーマ変更がブロックされるというケースがありました。

統計情報を作成時に、AUTO_DROP=ON を指定することで、スキーマ変更が統計情報によってブロックされる場合に、自動的に統計情報を削除し、スキーマ変更がブロックされないようにすることができます。

時系列関数の追加

Azure SQL Edge で先行して搭載されている時系列関数を使用することができるようになります。時系列関数の利用については 時間のギャップを埋めて欠損値を補完するで解説されています。

具体的には次のような関数が追加されました。

 

JSON 関数の追加

JSON フォーマットの文字列を操作するための JSON 関数が機能強化  / 追加されています。ISJSON は既存機能の改善ですが、それ以外は新しく追加された関数となります。

以下の記事でもアナウンスが行われましたね。

 

WINDOW 句の追加

互換性レベル 160 が必要となりますが、OVER 句で使用するパーティショニングとソート順を、WINDOWS 句として定義することで、クエリの可読性 / 設定の再利用性が向上します。

 

再開可能な制約の追加

再開可能な操作として、ALTER TABLE ADD CONSTRAINT による制約の追加がサポートされました。追加する制約の内容によっては処理に時間がかかるケースがあり、その操作の実行タイミングの制御ができるようになります。

 

T-SQL 関数の追加

SQL Database では先行して追加されていた GREATEST / LEAST が追加されました。これにより、指定した式の中で最大 / 最小の値を取得することができます。

既存機能の改善としては STRING_SPLIT の機能改善が行われ enable_ordinal というオプションが追加されました。これにより、分割された際の順序の列の表示を行うことができます。

 

ツール

  • 最新の VS Code / Azure Data Studio で SQL Server 2022 のサポート
  • 分散再生クライアント / コントローラーの実行ファイルを SQL Server から分離
  • SSMS 19.0
  • SqlPackage 19

 

最新の VS Code / Azure Data Studio で SQL Server 2022 のサポート

VS Code / Azure Data Studio を最新版にすることで、SQL Server 2022 のサポートが追加されます。

最新の VS Code / Azure Data Studio を使用すると、Azure SQL Database のローカル開発エクスペリエンス を使用することもできますので、こちらも追うとよいかもしれませんね。

 

分散再生クライアント / コントローラーの実行ファイルを SQL Server から分離

分散再生機能 というクエリ実行を分散して再生することができる機能が SQL Server には含まれているのですが、この機能は、SQL Server のセットアップに含まれなくなりました。

機能が廃止されるのではなく、別からダウンロードすることになるということなので、機能自体は廃止されてはいません。 (現時点ではダウンロード方法は公開されていません)

 

SSMS 19.0

SQL Server 2022 をサポートする SSMS 19.0 がプレビューで提供されました。

 

SqlPackage 19

SQL Server 2022 に対応した SqlPackage である、19.1 がリリースされました。SQL Server 2022 で DacFxを使用する場合は、最新バージョンを使用すれば問題ないかと。

 

SQL Machine Learning Service

 

各言語のランタイムの手動インストール

Machine Learning Service では、R / Python / Java / C# を使用することができますが、各言語のランタイムについては、SQL Server のセットアップには含まれなくなり、ML Service をインストールした環境に手動で使用する言語のランタイムを導入するようになりました。

 

SQL Server Analysis Services

What’s New ならびに、Power BI Blog で SSAS のアップデートが発表されました。

次の機能強化が行われているようです。

 

SQL Server Integration Services

SSIS については、SQL Server 2022 をサポートした SSIS Project 4.0 Preview のExtension のリリースがアナウンスされました。

Share

Written by Masayuki.Ozawa

5月 25th, 2022 at 12:34 am

Leave a Reply