Ignite 2018 に合わせて、最新の SQL Server である、SQL Server 2019 CTP 2.0 がリリースされました。
- SQL Server 2019 preview combines SQL Server and Apache Spark to create a unified data platform
- SQL Server 2019
- SQL Server 2019 CTP
SQL Server 2017 がリリースされたのが、昨年の 10 月ですので、約 1 年で新しいバージョンの情報が出てきましたね。
SQL Server 2019 の新しい機能については、次の情報で公開されています。
- What’s new in SQL Server 2019
- SQL Server 2019 preview release notes
- Release notes for SQL Server 2019 CTP on Linux
これに合わせて、ツールも新しくなっています。
SSMS 18.0 については、SQL Server 2019 に対応した SSMS であり、Visual Studio 2017 ベースになり、様々な機能追加が行われています。
Azure Data Studio は、プレビューで公開されていた SQL Operations Studio の新しい名称となり、今回のタイミングで GA リリースとなりました。
SQL Server 2019 で追加された Big data Cluster への対応や、Jupyter ノートブックの対応など、今まではついていなかった機能なども含まれるようになっています。
動画
- SQL Server 2019 data sheet
- SQL Server 2019 white paper
- Microsoft SQL Server 2019 and Big Data?a technical white paper
- Introduction to SQL Server 2019
SQL Server 2019 の MS のブログ
- Introducing Batch Mode on Rowstore
- Always Encrypted with Secure Enclaves ? Try It Now in SQL Server 2019 Preview!
- Public Preview of Graph Edge Constraints on SQL Server 2019
- Azure Data Studio for SQL Server
- Introducing Microsoft SQL Server 2019 Big Data Clusters
- SQL Server 2019 preview containers now available
- SQL Server 2019: Celebrating 25 years of SQL Server Database Engine and the path forward
- SQL Server 2019 Preview
Big Data Clusters
詳細については What is SQL Server 2019 Big Data Clusters? で解説されていますが、SQL Server 2019 の大きな追加機能となります。
現状は、Early Adoption Program を介しての Public Preview となってり、CTP 2.0 とは別のラインでのプレビューとなりますので、利用する際の入手方法については注意してください。
SQL Server 2019 での Big Data の取り扱いとしては次のようなキーワードがあります。
- データ仮想化
- Data Lake
- スケールアウトデータマート
データ仮想化
データ仮想化については、新しくなった Polybase を使用することで実現することができます。
Polybase は、SQL Server 2016 で追加された機能ですが、2016 / 2017 では、Azure BLOB ストレージと Hadoop に対してのみ実行することが可能という、データソースの制約がありました。
これが、SQL Server 2019 では大きく変わります。
SQL Server 2019 CTP 2.0 では、Polybase 経由で、SQL Server / Oracle / Teradata / MongoDB を外部データソースとして使用することができるようになります。
- Configure PolyBase to access external data in SQL Server
- Configure PolyBase to access external data in Oracle
- Configure PolyBase to access external data in Teradata
- Configure PolyBase to access external data in MongoDB
新しくなった Polybase の考え方としては、次のようなものがあります。
- SQL Server を経由して、T-SQL をインタフェースとして異なるデータソースに透過的にアクセス
- データソースから、データの移動を行うことなく、リアルタイムにセキュアにアクセスをする
Polybase により、異なるデータソースを外部テーブルとして定義することができるようになり、T-SQL で異なるデータソースを JOIN して使用することができるようになります。
通常のリンクサーバーとは異なり、プッシュダウンやスケールアウトの仕組みも用意されているため、Polybase により、より高いパフォーマンスで外部のデータソースにアクセスすることができ、それらを SQL 経由でアクセスすることができるようになるため、多くのツールで利用することができます。
また、Polybase を使用することで、データソースからデータを SQL Server に移動することなく、データにアクセスが可能となります。
データの移動が発生すると、リアルタイムなデータアクセスが難しく、最新のデータへのアクセスに遅れが発生します。
またデータの移動により、SQL Server 側にもストレージが必要となったり、取り込んだデータのセキュリティについても検討する必要があります。
データ移動を省略することでデータをよりリアルタイムにセキュアに利用することができるようになります。
現時点では、ドキュメント上は、Polybase は Windows のみの機能となっています。
Scale out Data Mart では、Compute Plane の SQL Server に含まれている、PolyBase を使用するということになっており、この層は、SQL Server on Linux で構成されるとのことなので、この辺のサポートは、今後変わってくる可能性もあるのではないでしょうか。
Data Lake
Data Lake については、SQL Server 単体ではなく、Hadoop のエコシステムとの組み合わせての構成となります。
SQL Server 2019 では、HDFS + SQL Server の構成を組み、そのデータを Spark から取り扱うということができるようになります。
さらに、この環境はスケールアウトが可能となっており、Kubernetes を使用して構築されています。
大量のデータの格納には、HDFS を使用した分散的なデータ格納がスケールアウトが柔軟に実施でき、パフォーマンスがリニアに延びる可能性があります。
この特性を生かし、Hadoop のエコシステム上に SQL Server をインストールし、SQL Server のインタフェースを介して、HDFS 上のデータにアクセスし、スケールアウトが可能な構成というものを構築することができるようになります。
Spark もインストールされている環境となりますので、Spark ジョブとして、PySprk や、SparkML と組み合わせて利用するというシナリオも考えられるのではないでしょうか。
Data Lake 部分が Big Data Cluster のメインになるかと思いますが、これにより、Big Data の分析基盤を SQL Server をインタフェースとした環境が作れるということになります。
スケールアウトデータマート
Data Lake の仕組みは、スケールアウトが可能な環境として構築が行われます。
Big Data Cluster は、計算層とデータ層が分かれています。
データ層については、HDFS を使用したストレージプールとSQL Server ベースのデータを格納するための SQL Data Pool にさらに分割されます。
SQL Data Pool は、SQL クエリや Spark ジョブからデータを取り込むことができ、この層のデータについても分散させて格納することができます。
各層がスケールアウトを意識した構成となっていますので、必要な部分について台数を増やすことができ、HDFS から分析用に取り出したデータについても SQL Data Pool で分散して格納できるというような仕組みが構築できます。
データベースエンジンの機能拡張
これは 紹介されているもの になりますが、いろいろと追加されています。
- Database compatibility level
- SQL Database で先行実装されていた「互換性レベル 150」が追加されました。
現在公開されている変更の主なものとしては Intelligent Query Processing 周りですかね。 - ALTER DATABASE (Transact-SQL) Compatibility Level
- SQL Database で先行実装されていた「互換性レベル 150」が追加されました。
- UTF-8 support
- SQL Server の Unicode 文字列は UTF-16 が使用されていたのですが、新たに UTF-8 がサポートされ、UTF-8 対応の照合順序が追加されます。
- UTF-8 については、char / varchar に対しての設定となり、nchar / nvarchar については、継続して UTF-16 となります。
- Collation and Unicode Support
- Resumable online index create allows index create to resume after interruption
- 再開可能なインデックス再構築の対象がインデックスの作成も拡張されましたので、インデックス作成を再開可能な形で実行することもできます。
- データベーススコープの設定として、再開可能なインデックス周りの既定設定ができるようになっています。
(SQL Database で先行実行されていたものですね)
- Clustered columnstore online index build and rebuild
- 非クラスター化列ストアインデックスだけでなく、クラスター化列ストアインデックスについてもオンラインで作成と再構築できるようになりました。
- Always Encrypted with secure enclaves
- 現時点では、Windows 版限定の機能ですが、Always Encrypted が「安全な飛び地」の機能を使用して、機能強化されます。
- この機能を使用することで今まではできなかった暗号化列の検索ができるようになります。
- Windows Server 2019 and Windows 10, version 1809 の Virtualization-based security (VBS) memory enclaves: Data protection through isolation の機能と組み合わせての利用となります。
- Intelligent query processing
- こちらも SQL Database で先行実装されていたものですが、互換性レベル 150 で Itelligent Query Processing (Row Mode memory Grant Feedback / Approximate COUNT DISTINCT / Batch mode on rowstore / Table variable deferred compilation)が使えるようになります。
- Batch mode on rowstore が新しい発表かもしれないですね。
行ストアのテーブルに対して、バッチモードが使えるようになります。
- Java language programmability extension
- SQL Server 2017 の ML サービス (In-database) では、R / Python をサポートしました。
SQL Server 2019 では、これに驚きの Java が追加され、コンパイル済みの Java のコードを実行することができます。 - この部分は拡張フレームワークが使われており、詳細はこちらで。
- SQL Server 2017 の ML サービス (In-database) では、R / Python をサポートしました。
- SQL Graph features
- こちらも SQL Database で先行実装されていたものが一部含まれますが、MERGE DML で MATCH 句が使えるようになり、グラフデータの UPSERT ができるようになります。
- Edge テーブルが接続できるノードを制約 (CONNECTION) により制御できるようになり、データ間の接続の規則を定義できるようになりました。
- Database scoped configuration setting for online and resumable DDL operations
- 再開可能な操作について、データベーススコープの構成として、初期動作を制御できるようになっています。
- Always On Availability Groups – secondary replica connection redirection
- SQL Server 2017 では、同期レプリカは 3 台 (1 プライマリ / 2 セカンダリ) まででしたが、SQL Server 2019 では、5 台の同期レプリカ (1 プライマリ / 4 セカンダリ) の設定ができるようになりました
- セカンダリからプライマリにリダイレクトできるような機能が追加されています。
- この機能により、リスナーが存在しないような環境でも、シンプルな構成で任意のサーバーからプライマリに透過的にリダイレクトできるようになりました。
これにより、使用しているクラスター / 冗長化のテクノロジでリスナーが使用できない場合でも、任意のサーバーへの接続から、プライマリにリダイレクトが可能となりました。
- この機能により、リスナーが存在しないような環境でも、シンプルな構成で任意のサーバーからプライマリに透過的にリダイレクトできるようになりました。
- Secondary to primary replica read/write connection redirection (Always On Availability Groups)
- READ_WRITE_ROUTING_URL という設定が追加されます。
- Data discovery and classification – natively built into SQL Server
- SQL Database と同等の検出と分類の機能が使用できるようになります。
- SSMS で機能拡張されたものについては、拡張プロパティを使用していたのですが、そちらでは監査ログのdata_sensitivity_information に分類が出力されなかったのですが、2019 では出力されるようになるようです。
- ADD SENSITIVITY CLASSIFICATION (Transact-SQL)
- SQL Database と同等の検出と分類の機能が使用できるようになります。
- Expanded support for persistent memory devices
- SQL Server 2016 では Tail of log として、トランザクションログの書き込みを高速化するために使用できましたが、 データファイル / インメモリ OLTP のチェックポイントファイルにも NVDIMM の利用が可能となるようです。
- 2017 では、PMEM サポートが on LInux はなかったようなのですが、2019 から追加されたようです。
- Support for columnstore statistics in
DBCC CLONEDATABASE
- DBCC CLONE DATABASE で列ストアインデックスの統計情報についても取得されるようになりました。
これにより、列ストアインデックスが使用されている環境のトラブルシューティングを実行する際の正確性が向上することになります。
- DBCC CLONE DATABASE で列ストアインデックスの統計情報についても取得されるようになりました。
- New options added to
sp_estimate_data_compression_savings
?sp_estimate_data_compression_savings (Transact-SQL) が拡張され、列ストアと列ストアアーカイブの容量試算ができるようになりました。
- SQL Server Machine Learning Services failover clusters
- sp_execute_external_script (Transact-SQL) に @input_data_1_order_by_columns と @input_data_1_partition_by_columns が追加されました。
これにより、パーティション単位のモデルを作成することができるようになります。 - WSFC で ML サービスをクラスター化することができるようになりました。
- What’s new in SQL Server Machine Learning Services
- sp_execute_external_script (Transact-SQL) に @input_data_1_order_by_columns と @input_data_1_partition_by_columns が追加されました。
- Lightweight query profiling infrastructure enabled by default
- SQL Server 2016 SP1 で追加された軽量プロファイリングがトレースフラグ 7417 を指定しなくても、デフォルトで有効化されるようになりました。
これにより、初期設定でクエリの実行状況の簡易プロファイリングを使用できるようになります。
- SQL Server 2016 SP1 で追加された軽量プロファイリングがトレースフラグ 7417 を指定しなくても、デフォルトで有効化されるようになりました。
- New Polybase connectors
- Polybase に SQL Server / Oracle / Teradata / Mongo のコネクターが追加され、Polybase から利用可能なデータソースが増えています。
- What is PolyBase?
- New
sys.dm_db_page_info
system function returns page information- DBCC PAGE の DMV 版である、sys.dm_db_page_info と、ページのリソースから情報を取得する sys.fn_PageResCracker が追加されています。
- これらを使用することでページ情報を使用したトラブルシューティングを実施することができるようになります。
- Master Data Service の Silverlight が HTML コントロールに置き換え
- SQL Server 構成マネージャーから証明書管理が実行可能
SQL Server on Linux
SQL Server on Linux については、より、Windows との機能差をなくすための機能拡張が行われています。
- レプリケーションのパブリッシャー / サブスクライバー / ディストリビューターのサポート
- SQL Server 2017 では、スナップショットレプリケーションのみ使用することが可能でしたが、その他のレプリケーションを SQL Server on Linux でサポートするようになりました。
- MSDTC のサポート
- SQL Server 2017 では、MSDTC を使用した分散トランザクションがサポートされていなかったのですが、SQL Server on Linux でサポートするようになります。
- mssql-conf で、DTC 用の設定が追加されています。
- AlwaysOn 可用性グループの Kubernetes 対応
- SQL Server 2017 では、Kubernetes 上でシングル環境の SQL Server をサポートしていましたが、SQL Server 2019 では、AlwaysOn 可用性グループがサポートされるようになります。
(Webinar では公開されていたのですが、k8s の AG を構築するための Operator が公開されました)
- SQL Server 2017 では、Kubernetes 上でシングル環境の SQL Server をサポートしていましたが、SQL Server 2019 では、AlwaysOn 可用性グループがサポートされるようになります。
- OpenLDAP のサポート
- SQL Server 2017 では、LDAP は AD のみをサポートしていたのですが、OpenLDAP をサポートするようになったことで、利用可能な LDAP の柔軟性が向上しました。
- ML Service のサポート
- SQL Server on Linux で、ML Service (In-Database) がサポートされるようになりました。
- コンテナーレポジトリの変更
- Docker Hub から、Microsoft Container RegistryMicrosoft Container Registry にコンテナーのレポジトリのマスターが変更になりました。
- SQL Server 2017 のイメージもこちらから導入できるようになり、最終的には、docker hub の方は廃止になるようです。
- RHEL ベースのイメージについても提供されるようになったようです。
- Quickstart: Run SQL Server container images with Docker
- Docker Hub から、Microsoft Container RegistryMicrosoft Container Registry にコンテナーのレポジトリのマスターが変更になりました。
勉強すること盛りだくさんですね。