松本美穂と松本崇博が執筆した SQL Server 2016 実践シリーズの「SQL Server 2016 への移行とアップグレードの実践」の HTML 版です。 日本マイクロソフトさんの Web サイトで Word または PDF 形式でダウンロードできますが、今回、HTML 版として公開する許可をいただきましたので、ここに掲載いたします。なお、記載している内容は、2016年 12月時点での情報になります。[2018年12月29日]
旧バージョンの SQL Server(SQL Server 2005 や 2008、2008 R2、2012、2014)を SQL Server 2016 へ移行/アップグレードするメリットは、次のとおりです。
SQL Server 2016 には、OLTP 向けのインメモリ機能である「インメモリ OLTP」や、DWH/BI 向けのインメモリ機能である「列ストア インデックス」(カラム指向データベースの SQL Server 実装)、ビッグデータ/データ解析向けのインメモリ機能である Analysis Services の Tabular Mode(表形式モード)、エンタープライズ対応でパラレル処理が可能な「R」(ScaleR)、Automatic Soft NUMA、Multiple Log Writer、INSERT..SELECT のパラレル処理、Dynamic Memory Object Scaling、TDE(透過的なデータ暗号化)のインメモリ OLTP 対応と AES-NI 対応、AlwaysOn可用性グループのログ転送性能の向上など、性能向上を実現できる機能が数多く搭載されています。
実際、SQL Server 2016 の早期導入を行った bwin 社では、インメモリ OLTP を利用して 1秒あたり 120万バッチ リクエスト数を達成、Jack Henry & Associates 社では、1秒あたり 130万予測を達成(ローン審査におけるスコアリング エンジンとして SQL Server 2016 の R を利用)、Moneris Solutions 社では、アプリケーションを一切変更することなく、SQL Server 2016 に変更しただけで 10~20%の性能向上を実現(ハードウェアは従来と同じものを利用)、FIS 社では、列ストア インデックスを付与しただけで、アプリケーションやクエリを一切変更することなく、分析クエリの性能が 4倍、10倍、20倍に向上しています。
StackOverflow 社では、列ストア インデックスを採用して、ログ データを 180GB/日 から 16GB/日 に圧縮(10分の1以下に圧縮)、AlwaysOn可用性グループのローリング アップグレードのおかげで、11台の SQL Server をわずか 48時間でアップグレードを完了させています。こうした早期導入事例については、次の項で詳しく説明します。
SQL Server のインメモリ技術の歴史は古く、3つ前のバージョンである SQL Server 2008 R2 から提供された StreamInsight および PowerPivot に始まり、以下のインメモリ技術が提供されています。
PowerPivot は、インメモリの BI 機能として SQL Server 2008 R2 から提供され、このエンジンは、SQL Server 2012 からは xVelocity エンジンへと名称変更/改良されて、Analysis Services(分析サーバー)でも利用できるようになりました(Tabular Mode と呼ばれます)。この xVelocity エンジンによって、ビッグデータ/より大量のデータにも対応可能なサーバー版のインメモリ BI 機能を利用できるようになりました。そして、この xVelocity エンジンを RDB に応用したのが「列ストア インデックス」です(SQL Server 2012 に登場した列ストア インデックスは読み取り専用での提供)。
SQL Server 2014 からは、列ストア インデックスが更新可能になり「クラスター化列ストア インデックス」として提供され、OLTP 処理を高速化するための「インメモリ OLTP」機能も提供されました。
列ストア インデックス(Columnstore Index)は、昨今のビッグデータで流行の「カラム指向データベース」の SQL Server における実装です。この列ストア インデックスは、基本はインメモリで動作しますが(データ量が物理メモリに載りきる場合はインメモリで動作)、メモリに載りきらないデータがあった場合には、ディスクを利用して動作させることもできます。もし、完全なインメモリでの動作であったとすると、大量のデータを集計処理するために、その分のメモリが必要になり、ハードウェアへの投資が必要になってしまいます。その点、列ストア インデックスであれば、ハイブリッドな動作ができるので、スモール スタートが可能です。
そして今回の SQL Server 2016 では、「インメモリ OLTPと列ストア インデックスのそれぞれが飛躍的に進化し、かつ両者が融合」することによって、OLTPもデータ分析も両立できる機能が提供されました。これは、カラム指向データベースを 1歩進化させて、リレーショナル データベースと融合させ、両者の良いとこどりをしたようなものです。
SQL Server 2016 では、OLTP に強い「インメモリ OLTP」と、大量のデータに対する分析/集計に強い「カラム指向」を同じテーブルに実装できるようになりました。具体的には、次のように CREATE TABLE ステートメントを実行するだけで、両者を同時に利用することができます。
SQL Server 2014 までは、別々のテーブルとして実装することはできましたが、上の画面のように 1つのテーブルで両者を実装することはできませんでした。
SQL Server 2016 における OLTP とカラム指向の融合は、これからのデータベースのあり方を変えたとも言える大きな進化で、これによって、リアルタイム分析(リレーショナル データベースに蓄積したデータに対して、直接データ分析を行うこと)も、性能面で(今までのような)ストレスを感じることなくできるようになります。このような構成は Operational Analytics や HTAP(Hybrid Transaction and Analytics Processing)とも呼ばれています。
データ ウェアハウスを構築しなくても、データ分析システムを構築できることから、リレーショナル データベース(RDB)とデータ ウェアハウス(DWH)を組み合わせた造語で「リレーショナル データ ウェアハウス」と呼ばれることもあります。
SQL Server 2016 からは、オープンソースの統計解析向けのプログラミング言語である「R」もビルトイン(データベース エンジンに統合)されているので、これを組み合わせれば、昨今の流行の Predictive Analytics も可能になります。この SQL Server 2016 に統合された R は、エンタープライズ向けの R として定評のあった「Revolution R」を買収したものなので、性能面でも大きなメリットがあります(後述の早期導入事例での PROS 社では、従来の 100倍の性能向上を実現しています)。
SQL Server 2016 には、セキュリティを向上させることができる機能が数多く提供されているので、これも SQL Server 2016 へ移行/アップグレードするメリットの 1つです。その主なものは、次のとおりです。
● 動的データ マスク(Dynamic Data Masking)
顧客情報(クレジット カード番号やマイナンバーなど)や機密情報をマスク(別の値に置換)して、情報漏洩を防止できる機能
● 行レベル セキュリティ(Row Level Security)
行レベルのアクセス制御を実現できる機能で、ユーザーごとに、参照できる行データを制限することができる
● Always Encrypted による列データの暗号化
ネットワーク上を流れるデータも、データベース内に格納されるデータも、すべて暗号化して格納できる機能(列データを暗号化して、アプリケーションも透過的に利用可能)
● TDE(透過的なデータ暗号化)の性能向上、インメモリ OLTP 対応
Intel の AES-NI(AES 暗号化の処理を高速化するための命令セット)に対応して、TDE の性能を向上。インメモリ OLTP を利用している場合にも TDE が利用可能に
これらの機能の利用方法については、SQL Server 2016 自習書シリーズの No.1「SQL Server 2016 の新機能の概要」編で詳しく説明しているので、こちらもぜひご覧いただければと思います。
SQL Server 2005 や SQL Server 2008 を動作させる OS としては、Windows Server 2003 や Windows Server 2003 R2 を利用しているという場合が多いのではないでしょうか。弊社のお客様にもたくさんいらっしゃいました。
しかし、Windows Server 2003/2003 R2は 2015年7月15日にサポート期限が切れ、SQL Server 2005 は 2016年4月12日にサポート期限が切れています(延長サポートの終了)。このため、今後、もし新たな脆弱性が見つかったとしても修正プログラムが提供されなくなっています。なお、SQL Server 2008 と SQL Server 2008 R2 については、2014年7月8日にメインストリーム サポートは終了して、現在は延長サポート期間に入っています。
これは、OS や SQL Server を移行/アップグレードする良い機会になります。「OS が変わると、SQL Server の動作が心配」という方もいらっしゃると思いますが、SQL Server は、SQL Server だけで完結した製品なので、OS の影響をほとんど受けません(OS が変わったとしても、SQL Server の動作にはほとんど影響がありません。影響があるのは NTFS アクセス許可ぐらいです)。弊社のお客様でも、SQL Server をアップグレードするタイミングで OS を変更することが多いのですが、該当マシンを SQL Server 専用として利用している場合には、今まで(SQL Server で)問題が起きたことはありません。
また、SQL Server 2016 は、X64(64ビット)環境のみのサポートになるので、32ビットから 64ビット環境へ移行するという場合もあると思いますが、SQL Server 専用のマシンであれば、この影響もほとんどありません。SQL Server の機能は、32ビットでも 64ビットでも全く同じように動作させることができ、むしろ 64ビット化することによる性能メリットが(必ずといっても過言ではないほど)得られます。弊社のお客様でも、32ビットを 64ビット環境に移行することで、確実に性能向上しています。
これは最近のハードウェア性能の向上による影響も大きく、数年前に比べてメモリが非常に低価格になっていたり、CPU コア数の増加や、ファイバ チャネルなどストレージ接続部分での高速化、SSD/フラッシュ ストレージの低価格化など、数年前と同じ金額で、(当時と比べると)非常に高性能なマシンを購入することができます。例えば、メモリを 128GB 搭載したマシンでも、エントリ レベルのサーバーであれば 200万円以下で購入できてしまいます。
過去に、32ビットから 64ビット環境への移行時に問題となりえたのは、IIS(Web サーバー)上で ASP/ASP.NET を動作させていた場合で、この場合は(32ビットの)COM コンポーネントを動作させるために、いくつかの修正が必要になりました(SQL Server のデータベースに関しては修正の必要はありませんでした)。
詳しくは第5章の「データベースの移行手順」で説明しますが、最も基本となるデータベース エンジン部分に関しては、SQL Server 2005 から SQL Server 2016 との間では大きな変化はないので、SQL Server 2005 上で取得したデータベースのバックアップを SQL Server 2016 上にリストアしても、多くの場合は何の問題もなく動作します。実際、弊社でも、今のところ 4社のお客様のデータベースを移行して検証していますが、特に問題は発生していません(ストアド プロシージャやアプリケーションは問題なく動作し、OS を変更した影響もありません)。また、前述したような SQL Server 2016 からの新機能が利用できることによって、多くの処理で性能向上を実現することができるので、移行するメリットがあります。
SQL Server 2005 から SQL Server 2016 への移行を行う場合には、SQL Server 2008 以降で提供された機能も大きなメリットになります。SQL Server 2008 以降、たくさんの性能向上に関する機能が提供されていますが、それらをまとめると次のようになります。
この中でも、SQL Server 2008 から提供された「データ圧縮」や「バックアップ圧縮」は、大きな性能向上を実現できる機能なので、弊社のお客様でもたくさん利用されています。
SQL Server 2014 で提供された「SELECT INTO のパラレル処理」や「Delayed Durability」に関しても、弊社のお客様環境で大きな成果を得られています。SQL Server 2016 からは、SELECT INTO だけでなく、INSERT..SELECT についてもパラレル処理に対応したので、これらは多くの方々にメリットをもたらすと思います。
性能面の他にも、SQL Server 2008 以降では、セキュリティ強化や可用性の向上、機能面での強化(Transact-SQL など)などを実現するための多くの新機能が提供されています。その主なものは、次のとおりです。
SQL Server 2012 からは、AlwaysOn 可用性グループ機能が提供されたことも大きな進化です。これは、データベース ミラーリングを進化させたような機能で、サーバー間でのデータベースの複製ができることはもちろん、セカンダリ(複製)側のデータをリアルタイムに参照できたり、セカンダリを複数台(SQL Server 2012 では最大 4台、SQL Server 2014 からは最大 8台)構成できたり、セカンダリ側でデータベースのバックアップを取得したりすることもできます。データベースの複製による可用性の向上だけでなく、セカンダリを有効活用することもできるようになっています。また、クラウド DR(セカンダリを Microsoft Azure 上に配置)も実現できます。
これらの SQL Server 2008 以降に提供された新機能については、SQL Server 2014 自習書シリーズの「SQL Server 2005 ユーザーのための SQL Server 2014」で詳しく説明しているので、こちらもぜひご覧いただければと思います(ステップ バイ ステップ形式で簡単に試せるようにしています)。
SQL Server 2005 から SQL Server 2016 へ移行する場合には、SQL Server 2008 以降で提供された以下の DWH/BI 機能を利用できることも大きなメリットになります。
SQL Server 2005 と比較すると、Reporting Services が特に大きく進化しています。レポートが非常に作りやすくなって、かつ多彩なグラフ表現ができるようになったことで、弊社のお客様にも大変好評です。Excel と同じようなレポートを作成することも可能で、弊社のお客様では、今まで Excel で(人手で)管理していたワークシート(分析レポート)を、Reporting Services に移行することで分析レポートの作成を自動化する、といった使い方をしていたりします。
Reporting Services の多彩なグラフ表現(Excel と同じようなグラフ/レポートを作成可能)
Reporting Services は、SQL Server 2016 でも大幅に強化されています。特に、Datazen 統合によって、次のような見栄えの良いレポートを簡単に作成できるようになり、かつモバイル レポート(スマートフォンやタブレット端末など向けのレポート)にも対応しました。
このモバイル レポートは、HTML5 ベースなので、HTML5 に対応した Web ブラウザーであれば、スマホでもタブレットでも、どんな端末からでも同じようにレポートを参照することができます。SQL Server 2016 では、こうした見栄えの良いモバイル レポートを簡単に作成できるようになりました。これらの詳細については、SQL Server 2016 自習書シリーズの No.3「Reporting Services の新機能」編で説明しているので、こちらもぜひご覧いただければと思います。
SQL Server 2016 では、Analysis Services も大幅に強化されていることも大きな移行メリットです。Analysis Services は、SQL Server 2012 のときにインメモリの BI エンジンとして Tabular Mode(表形式モード)が提供されて、この Tabular Mode が SQL Server 2016 でさらに進化しました(パーティションの並列処理のサポートや DirectQuery の大幅な性能向上など)。詳細については、SQL Server 2016 自習書シリーズの No.4「Analysis Services の新機能」編で説明しているので、こちらもぜひご覧いただければと思います。
第60回:SQL Server 2017 自習書 No.3「SQL Server 2017 Machine Learning Services」のご案内
第59回:SQL Server 2017 自習書 No.2「SQL Server 2017 on Linux」のご案内
第58回:SQL Server 2017 自習書 No.1「SQL Server 2017 新機能の概要」のご案内
第57回:SQL Server 2017 RC 版とこれまでのドキュメントのまとめ
第56回:「SQL Server 2016 への移行とアップグレードの実践」完成&公開!
第55回:書籍「SQL Server 2016の教科書 開発編」(ソシム)が発刊されました
第54回:「SQL Server 2016 プレビュー版 Reporting Services の新機能」自習書のお知らせ
第 53 回:SQL Server 2016 Reporting Services の新しくなったレポート マネージャーとモバイル レポート機能
第 52 回:SQL Server 2016 の自習書を作成しました!
第 51 回:PASS Summit と MVP Summit で進化を確信!
第 50 回:新しくなった Power BI(2.0)の自習書を作成しました!
第49 回:Excel 2016 の Power Query を使う
第 48 回:新しくなった Microsoft Power BI ! 無料版がある!!
第 47 回:「Microsoft Azure SQL Database 入門」 完成&公開!
第 46 回:Microsoft Power BI for Windows app からの Power BI サイト アクセス
第 45 回:Power Query で取得したデータを PowerPivot へ読み込む方法と PowerPivot for Excel 自習書のご紹介
第44回:「SQL Server 2014 への移行とアップグレードの実践」ドキュメントを作成しました
第43回:SQL Server 2014 インメモリ OLTP 機能の上級者向けドキュメントを作成しました
第42回:Power Query プレビュー版 と Power BI for Office 365 へのクエリ保存(共有クエリ)
第41回:「SQL Server 2014 CTP2 インメモリ OLTP 機能の概要」自習書のお知らせです
第40回: SQL Server 2012 自習書(HTML版)を掲載しました
第39回: Power BI for Office 365 プレビュー版は試されましたか?
第38回: SQL Server 2014 CTP2 の公開
第37回: SQL Server 2014 CTP1 の自習書をご覧ください
第36回: SQL Server 2014 CTP1 のクラスター化列ストア インデックスを試す
第35回: SQL Server 2014 CTP1 のインメモリ OLTP の基本操作を試す
第34回: GeoFlow for Excel 2013 のプレビュー版を試す
第33回: iPad と iPhone からの SQL Server 2012 Reporting Servicesのレポート閲覧
第32回: PASS Summit 2012 参加レポート
第31回: SQL Server 2012 Reporting Services 自習書のお知らせ
第30回: SQL Server 2012(RTM 版)の新機能 自習書をご覧ください
第29回: 書籍「SQL Server 2012の教科書 開発編」のお知らせ
第26回: SQL Server 2012 の Power View 機能のご紹介
第25回: SQL Server 2012 の Data Quality Services
第24回: SQL Server 2012 自習書のご案内と初セミナー報告
第23回: Denali CTP1 が公開されました
第22回 チューニングに王道あらず
第21回 Microsoft TechEd 2010 終了しました
第20回 Microsoft TechEd Japan 2010 今年も登壇します
第19回 SQL Server 2008 R2 RTM の 日本語版が公開されました
第18回 「SQL Azure 入門」自習書のご案内
第17回 SQL Server 2008 自習書の追加ドキュメントのお知らせ
第16回 SQL Server 2008 R2 自習書とプレビュー セミナーのお知らせ
第15回 SQL Server 2008 R2 Reporting Services と新刊のお知らせ
第14回 TechEd 2009 のご報告と SQL Server 2008 R2 について
第13回 SQL Server 2008 R2 の CTP 版が公開されました
第12回 MVP Summit 2009 in Seattle へ参加