SQL Server 2017の新機能徹底解説:Linux対応から機械学習まで
SQL Server 2017は、2017年10月に正式リリースされました。実は、その一部となるプレビュー版は2016年末から順次公開されており、2017年末の時点で累計10回のリリースが行われています。
SQL Server 2017最大の特徴は、なんといってもLinuxへの対応です。これにより、SQLの強力な機能をLinux環境でも利用できるようになりました。具体的には、Linux上にSQL Server 2017を直接インストールできるほか、LinuxベースのDockerコンテナ上でSQL Server 2017を稼働させることも可能です。さらに、開発言語やオンプレミス/クラウド環境を自由に選択できる柔軟性も備えています。
このバージョンでは、データベースエンジン、Integration Services、Master Data Services、Analysis Servicesなど、各コンポーネントにおいてパフォーマンス・スケーラビリティ・機能面での大幅な改善が図られました。本記事では、これらの新機能を項目ごとに詳しく見ていきます。
SQL Server 2017の新機能一覧
- データベースエンジンの新機能
- identity_cache
- 適応型クエリ処理の改善
- 自動チューニング(Automatic Tuning)
- グラフデータベース(Graph DB)の新機能
- Always Available(クロスデータベースアクセス)
- DTA(データベースチューニングアドバイザ)の改善
- 新しい文字列関数
- TRANSLATE
- CONCAT_WS
- TRIM
- STRING_AGG
- SSRS(Reporting Services)の新機能
- SSIS(Integration Services)の新機能
- Analysis Services(SSAS)の新機能
- 機械学習(Machine Learning)
- Linuxサポート
データベースエンジンの新機能
identity_cache

このオプションは、サーバーの突然のシャットダウンやフェイルオーバー、セカンダリサーバーへの切り替えが発生した場合に、ID列の値に不整合(飛び番号など)が生じるのを防ぐためのものです。ALTER DATABASE SCOPED CONFIGURATIONコマンドと組み合わせて使用し、データベースレベルの構成設定を有効化します。構文は以下のとおりです。
ALTER DATABASE SCOPED CONFIGURATION { { [ FOR SECONDARY ] SET } } | CLEAR PROCEDURE_CACHE | SET < set_options > [;]
< set_options > ::= {
MAXDOP = { | PRIMARY }
| LEGACY_CARDINALITY_ESTIMATION = { ON | OFF | PRIMARY }
| PARAMETER_SNIFFING = { ON | OFF | PRIMARY }
| QUERY_OPTIMIZER_HOTFIXES = { ON | OFF | PRIMARY }
| IDENTITY_CACHE = { ON | OFF }
}
適応型クエリ処理の改善
クエリのパフォーマンスを向上させたい場合、この新機能は大きな助けとなります。SQL ServerおよびAzure SQL Databaseでサポートされています。
まず、従来のSQLクエリ実行時の最適化プロセスを見てみましょう。
- クエリオプティマイザが、作成されたクエリに対して考えられるすべての実行プランを計算する。
- その中から最良・最速のプランを特定する。
- 推定された最良プランを選択してクエリを実行する。
このプロセスには、以下のような課題がありました。
- 誤った推定に基づくプランが「最良」と判断されると、パフォーマンスに悪影響が出る。
- 最適なプランの実行に必要なメモリが不足していると、メモリ不足エラーが発生する。
こうした課題を克服するために、SQL Server 2017には以下の機能が搭載されました。
- バッチモードメモリ許可フィードバック(Batch Mode Memory Grant Feedback):プランの実行に必要なメモリ量を再計算し、キャッシュから適切なメモリを割り当てます。
- バッチモード適応型結合(Batch Mode Adaptive Joins):結合方式には「ハッシュ結合」と「ネストループ結合」の2種類があります。実行プランの入力が最初にスキャンされる際に、最適な速度で出力を得られる結合方式を動的に判断します。
- インターリーブ実行(Interleaved Execution):最適プランの実行中に複数ステートメントのテーブル値関数に遭遇した場合、一度処理を「一時停止」し、そのテーブル内の要素を正確に計算してから、最適化を再開します。
自動チューニング(Automatic Tuning)
この機能は、クエリパフォーマンスの問題を検出・特定し、提案された解決策によって自動的に修正します。自動チューニングには以下の2つの手法があります。
- 自動修正(プラン):SQL Server 2017データベースで利用可能。クエリプランにおけるパフォーマンス問題を検出し、提案された解決策で修正します。
- 自動管理(インデックス):Azure SQL Databaseで利用可能。不要なインデックスを削除し、適切なインデックスを追加することで、インデックスの構成を自動的に最適化します。
グラフデータベース(Graph DB)の新機能
Graph DBとは?
Graph DBは、基本的に「ノード」と「エッジ」の集合体です。ノードはエンティティ(実体)を表し、エッジはノード間の関係を表します。1つのエッジは複数のノードに接続できます。Graph DBはリレーショナルデータベースと同様に動作し、以下のようなケースで活用できます。
- 階層形式のデータベースがあり、1つのノードに複数の親を持たせたい場合。
- リンクやデータ間の関係性を確認・分析する必要がある場合。
- 多数のリレーションシップ(関係)が存在する場合。
Graphテーブルへのクエリやデータの並べ替えには、MATCHキーワードを使用します。単一のクエリだけで、グラフデータとリレーショナルデータの両方に対して問い合わせを行うことができます。
Always Available(クロスデータベースアクセス)
この機能により、異なるSQLインスタンス間でのデータベース相互アクセスが可能になりました(あるSQLインスタンスが他のインスタンスに接続できる形です)。分散データベース間の連携もサポートされています。
※SQL Server 2016でもクロスデータベースアクセスは可能でしたが、同一SQL Server内のインスタンス間に限定されていました。
DTA(データベースチューニングアドバイザ)の改善
SQL Server 2017では、Database Tuning Advisor(DTA)のパフォーマンスが改善され、新しいオプションも追加されました。
DTAをご存じない方のために簡単に説明すると、DTAとはクエリの処理内容を分析し、パフォーマンス向上のための改善案(データベース構造の変更、例えばインデックスやロックの調整など)を提示してくれるツールです。DTAは以下の2つの方法で利用できます。
- GUI(グラフィカルインターフェース)を使用する方法
- コマンドラインユーティリティを使用する方法
新しい文字列関数
SQL Server 2017では、TRANSLATE、CONCAT_WS、STRING_AGG、TRIMといった新しい文字列関数が追加されました。それぞれ詳しく見ていきましょう。
TRANSLATE
この関数は、文字列を入力として受け取り、指定した文字を別の文字に変換します。構文は以下のとおりです。
TRANSLATE ( inputString, characters, translations )
'characters'と'translations'の長さは同じである必要があります。そうでない場合、関数はエラーを返します。例を見てみましょう。
TRANSLATE ( '6 * {10 + 10} / [6-4]', '[] {}', '() ()' )
この例の結果は 6 * (10 + 10) / (6-4) となります。波括弧と角括弧が丸括弧に変換されているのがわかります。
この関数はREPLACE関数と似た仕組みですが、よりシンプルに記述できます。同じ結果をREPLACE関数で得ようとすると、以下のようにネストが深くなり、一目では理解しづらくなります。
SELECT REPLACE(REPLACE(REPLACE(REPLACE('6 * {10 + 10} / [6-4]', '{', '('), '}', ')'), '[', '('), ']', ')');
CONCAT_WS
この関数は、指定した区切り文字を使ってすべての引数を連結します。構文は以下のとおりです。
CONCAT_WS ( separator, argument1, argument2 [, argumentN]... )
区切り文字を介してすべての引数を連結して1つの文字列を生成するため、出力には少なくとも2つの引数が必要です。それ以外の場合はエラーが返されます。例:
SELECT CONCAT_WS(',', 'Count numbers', 'one', 'two', 'three', 'four') AS counter;
このコマンドの結果はone,two,three,fourとなります。
また、文字列リテラルの代わりにデータベースの列名を指定することも可能です。
TRIM
ついにSQL Server 2017でも登場したのがTRIM関数です。C#のtrim関数と同様に、文字列の先頭と末尾にある余分な空白をすべて削除します。構文は以下のとおりです。
SELECT TRIM( ' trim me ' ) AS result;
このコマンドの結果はtrim meとなります。
なお、この関数は文字列の途中にある空白は削除しません。
STRING_AGG
この関数は、区切り文字を使って文字列の値を連結します。末尾に余分な区切り文字が付かない点が特徴です。入力データはVARCHARやNVARCHARが利用でき、WITHIN GROUP句を使って結果の表示順序を指定することもできます。
構文は以下のとおりです。
STRING_AGG ( expression, separator ) [ <order_clause> ] <order_clause> ::= WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
以下の例をご覧ください。
SELECT city,
STRING_AGG(name, ';') WITHIN GROUP ( ORDER BY name ASC ) AS names
FROM Students GROUP BY city;
この例では、すべての名前がセミコロン(;)で連結されています。WITHIN GROUP句により、名前の昇順で並べ替えられています。返される結果は次のように表示されます。

SSRS(Reporting Services)の新機能
- SSRSのセットアップがSQL Serverのインストール画面から分離され、ダウンロードセンターから個別に入手する必要があります。
- クエリデザイナーがDAXをネイティブサポート。SSAS(分析サービス)向けにDAXクエリを直接作成できるようになりました。この機能は最新のSQLツールおよびレポートビルダーのアップデートで提供されます。
- RESTful APIによるOpenAPIコマンドがサポートされ、SSRSがRESTful APIに対応しました。
- コメントにファイルを添付できるようになりました。
- レポートにコメントを追加できるようになりました。
- レポートサービスポータルが大幅に刷新されました(この機能はSQL Server 2016から導入)。
SSIS(Integration Services)の新機能
SSISがLinux上で実行可能になり、大規模なデータの抽出・変換処理をLinux上で直接行えるようになりました。
スケールアウト機能により、高性能マシンを多数組み合わせた複雑な統合システムを構築できます。この機能は、Scale Out MasterとScale Out Workerの協調によってすべての操作を実行します。
Analysis Services(SSAS)の新機能
- MS ExcelやPower BIと同様の新しい「Get Data」インターフェースが搭載されました。データ変換やデータマッシュアップ機能も追加されており、クエリエディタとM式を使って操作できます。
- SQL Server 2012で導入されたSSASのテーブルモデルが、SQL Server 2017で大幅に強化されました。
- 新しいエンコーディングヒントが提供され、大規模なインメモリテーブルデータの最適化に役立ちます。
- PIVOT処理のパフォーマンスが向上しました。
機械学習(Machine Learning)
ご存じのとおり、SQL Server 2016ではR Servicesがサポートされていましたが、今回からこのサービスは「SQL Server Machine Learning Services」に名称変更されました。この変更により、RまたはPythonのコマンド群をSQL Server上で簡単に利用できるようになったのが大きなメリットです。
この新機能により、Pythonをストアドプロシージャ内で実行できるほか、SQL Server経由でリモートからコマンドを実行することも可能です。Python開発者にとって非常に便利な機能といえます。ただし、現時点ではLinux上では未対応のため、今後のアップデートに期待しましょう。
機械学習をより効率的かつ最適に活用するため、SQL Serverは以下のソリューションを採用しています。
- revoscalepy:高性能なアルゴリズム、計算処理、リモート実行シナリオの基盤となる新しいライブラリです。基本的にRevoScaleR(Rサービスパッケージ)をベースとしています。
- microsoftml:Microsoft R Serverクラスタ向けの機械学習アルゴリズムをサポートするライブラリです。Microsoftが社内向けの機械学習用途で開発したものでしたが、長年の改良を経て、現在では高速なデータ転送や大規模ドキュメントの変換などにも対応しています。
Linuxサポート
製品名が「SQL Server 2017 on Linux and Windows」となっていることからもわかるように、今回のアップグレードの主目的はLinuxプラットフォームへの展開です。「SQL on Linux」の主な特徴は以下のとおりです。
- コアデータベースの格納機能
- IPv6のサポート
- NFSのサポート
- Linux上でのActive Directory認証
- 暗号化のサポート
- LinuxへのSSISインストール
- mssql-confコマンドツールの提供
- シンプルで自由度の高いインストールプロセス
- Visual Studio Code用SQL拡張(VS CodeはLinuxで利用可能)
- クロスプラットフォーム対応のスクリプトジェネレータ
まとめ
SQL Serverについては、まだまだ語り尽くせていない学ぶべきことがたくさんあります。この旅は次回の記事でも続けていきますので、ぜひお楽しみに。コメントや質問もお気軽にどうぞ!
関連記事:
- Windows上でLinuxソフトウェアを実行する7つの方法
- WindowsとLinuxの主な違い8選
- MS SQL Serverでデータベースにログインする方法
- MS SQL Serverでサービスを開始・停止する方法
-
SQL Server 2017のインストール手順を徹底解説!初心者向けステップバイステップガイド
SQL Server 2017は、インストールプロセスにおいて多くの新機能が追加されたバージョンです。RやPythonに対応した「Machine Learning Service(機械学習サービス)」のサポート、SSIS Scale Out Master/Scale Out Workerの搭載、そしてPolyBaseの拡張オプションなどが含まれています。 本記事では、SQL Server 2017を段階的にインストールする具体的な手順を詳しく解説していきます。 はじめに:SQL Server 2017のダウンロード まず、SQL Server 2017のインストーラーは以下のMicrosof
-
SQL Server 2017の新機能を徹底解説:DBAが知っておくべき主要な変更点
SQL Serverをより新しいバージョンにアップグレードすることを検討していますか?SQL Server 2016とSQL Server 2017のどちらを選ぶか迷っているのであれば、本記事で解説する理由から、SQL Server 2017へのアップグレードをおすすめします。 SQL Serverの新バージョンのリリースは、データベース管理者や開発者にとって興味深い新機能の宝庫です。SQL Server vNext(一般にSQL Server 2017と呼ばれます)のCommunity Technology Preview(CTP)2.0も例外ではありません。既存の機能やサービスには数多くの