松本美穂と松本崇博が執筆した SQL Server 2016 実践シリーズの「SQL Server 2016 への移行とアップグレードの実践」の HTML 版です。 日本マイクロソフトさんの Web サイトで Word または PDF 形式でダウンロードできますが、今回、HTML 版として公開する許可をいただきましたので、ここに掲載いたします。なお、記載している内容は、2016年 12月時点での情報になります。[2018年12月29日]
既に SQL Server 2016 を早期導入/検証を行っている企業は、次のようにたくさんあります。
bwin 社(欧州サッカーでの大手スポンサーとしてもお馴染みの、オンライン ゲームなどを提供している会社)では、SQL Server 2016 のインメモリ OLTP 機能を採用/移行することで、1秒あたり 120万件もの Batch Requestを処理をできるようになりました。同社は、1日あたりのベット数が 1,900万、1日あたり 25万以上ものアクティブ ユーザーが訪れる人気サイトです。
bwin 社では、従来 Memcached や Cassandra、Microsoft AppFabric などを利用して構築していた独自のキャッシュ システムがありましたが、これを SQL Server 2016 のインメモリ OLTP を用いた ASP.NET SessionState ベースのものに変更しました。これによって、従来のシステムでは 19ノードで 15万 Batch Request/秒が限界だったところを、SQL Server 2016 では、わずか 1台で 120万 Batch Request/秒を実現できるようになりました。
こうした bwin 社でのキャッシュ システムに関する詳細は、以下の米マイクロソフトの SQL Server Customer Advisory Team(SQL CAT)チームの Blog に記載されています。
How bwin is using SQL Server 2016 In-Memory OLTP to achieve unprecedented performance and scale
https://blogs.msdn.microsoft.com/sqlcat/2016/10/26/how-bwin-is-using-sql-server-2016-in-memory-oltp-to-achieve-unprecedented-performance-and-scale
このブログ記事の内容を要約すると、次のようになります。
bwin 社では、従来の Memcached や Cassandra、Microsoft AppFabric などを利用して構築していた独自のキャッシュ システムでは、トランザクション量の増大によって、キャッシュ システムのワークロードが追いつかないという事態になり、ノード数を増やしても、安定性の問題に直面して、可用性を落とすことにもなって、さらには、セットアップとメンテナンスの苦労もあったため、いろいろな部門にとっての作業負荷が増えていました。
そこで、これらの問題を解決するべく、キャッシュ システムとして採用したのが ASP.NET の SessionState です。SessionState は、元々利用していたキャッシュ システムでしたが、SQL Server 2012 で動作させていた SessionState は、ラッチ待ちのボトルネックによって 1秒あたり 12,000バッチ リクエスト数が限界でした。SQL Server 2014 が登場したときには、世界で一番最初にインメモリ OLTP を導入して、30万 バッチ リクエスト数/秒を達成することができました。このときのボトルネックは、LOB(ラージ オブジェクト)データの Split 処理だったそうです。
SQL Server 2014 のインメモリ OLTP では、varbinary(max) や varchar(max) などの LOB に対応していなかったため、LOB データは分割処理する必要がありました(こうした処理を実現するためにネイティブ コンパイル ストアド プロシージャ化をすることもできていませんでした)。
SQL Server 2016 からは、インメモリ OLTP で LOB がサポートされたことによって、ネイティブ コンパイル ストアド プロシージャ化も可能になり、1秒あたり 120万バッチ リクエスト数という 4倍もの性能向上を実現することができました。
この 120万バッチ リクエスト数を達成するにあたっては、途中 80万バッチ リクエスト数/秒 という壁(Spinlock の問題)がありましたが、これは CU2(SQL Server 2016 の累積的な更新プログラム 2)によって性能改善されました。
この 120万バッチ リクエスト数という性能を得られたことで、キャッシュ システムに採用できるという確信を得られたとのことです。
StackOverflow は、私たちもよく利用している開発者のための Q&A コミュニティを運用している会社です。C# や VB、ASP.NET などプログラミングに関することなどで、検索エンジンで検索すると必ずといって良いほど上位に結果が表示される有名サイトです。年間ページビュー数は 85億にも上り、毎年 25% のトラフィック増に直面しているそうです。
StackOverflow 社の詳細については、以下の米マイクロソフトの事例(Customer Stories)サイトに記載されています。
https://customers.microsoft.com/en-us/story/developer-qa-site-stays-fast-innovative-and-agile-with-sql-server-2016
この事例記事を要約すると、次のようになります。
この記事の中で、StackOverflow 社の Nick Craver 氏は「クラスター化列ストア インデックスを利用することで、1日あたり 180GB のデータを約 16GB に圧縮、10分の 1以下に圧縮ができた」と語っています。
また、同社では SSD を利用していますが、もし 180GB/日 のデータ サイズであったとすると、6ヶ月分のデータを格納するために、30TB もの(非常に効果な)SSD を購入しなければならなくなります(例えば、2TB の PCI-e SSD を購入するだけでも数百万円のコストがかかるので、コストおよび容量の両面から HDD を利用するのが現実的になってしまいます)。
一方、クラスター化列ストア インデックスを利用して 16GB/日 に圧縮できるのであれば、6ヶ月分のデータを格納したとしても、約 2.9TB で済みます。Nick Craver 氏は「SQL Server 2016 の列ストア インデックスを利用して、6ヶ月分のログ データを SSD に格納できるのは大きなアドバンテージです。また、単なる圧縮ではなく、実際のスピードも非常に優れています。ログ データを保存する仕組みとして理想的な技術です」と付け加えています。
蓄積したログ データは、トラフィック パターンを分析するために利用して、サイトを強化するための Insight(洞察)を得ています。例えば、「現在、会社内にリアルタイムに近いデータ パイプがあるので、StackOverflow のすべてのヒット数はマップ(地図)上に表示されます。これによって、ロサンゼルスにいる Ruby 開発者の数や、ボットネットをブロックする方法、またはより良い広告を出す方法を理解できます。また、より良い質問をどのように提示して、より反応する可能性が高いかどうかなど、履歴データをすぐに参照できるということは、シミュレーションを迅速に再実行できることを意味しています」。
StackOverflow 社では、AlwaysOn可用性グループを利用して、ニューヨークにプライマリとセカンダリ(読み取り専用)、コロラドに DR(災害対策)用のセカンダリを配置しています。SQL Server 2016 へのアップグレードにあたっては、AlwaysOn可用性グループのローリング アップグレード機能のおかげで、11台の SQL Server を、わずか 48時間でアップグレードを完了させることができたそうです。
1万を超える金融機関向けに 300以上のサービスと製品を提供している Jack Henry & Associates 社では、ローン申請におけるスコアリング・エンジンとして SQL Server 2016 およびビルドインされた R(ScaleR)を利用して、インテリジェントな EDW(エンタープライズ データ ウェアハウス)を構築しています。
昨年開催された PASS Summit 2016 の基調講演では、以下のスライドが紹介されていました。
Jack Henry & Associates 社では、1秒あたり 130万ものローン申請(ローンが返済されるかどうかのローン予測)を処理できたという事例です。
これの具体的な構成については、次のように紹介されていました。
SQL Server 2016 の列ストア インデックスとインメモリ OLTP、SQL Server にビルトインされた R(ScaleR)を利用して、ローン予測を処理しています。
ローンが返済されるかどうか(債務不履行の可能性)を判断するには、金利やローン条件、会員のクレジット スコアなどの変化要因が影響し、不良債権になる確率を予測するインテリジェントな方法が必要になります。例えば、金利の上昇をシナリオに What-If 分析を行ったりするなどが必要です。
SQL Server 2016 にビルトインされた R では、ローンのスコアリング モデルを、ストアド プロシージャで呼び出して、パラレル スレッドで処理することができます。このようなリアルタイム予測分析(Real-Time Predictive Analytics)は、ビジネスの柔軟性を飛躍的に高め、高い収益性をもたらす重要な要素になります。
こうしたスコアリング エンジン(予測分析)に関しては、以下の米マイクロソフトの SQL Server チームの Blog の記事が参考になります。
1,000,000 predictions per second
https://blogs.technet.microsoft.com/dataplatforminsider/2016/10/11/1000000-predictions-per-second/
このブログ記事では、クレジット カード取引の場合の例も、次のように紹介されています。
この記事を要約すると、次のようになります。
金融サービス企業では、クレジット カードでの取引が正当なものであるか、不正使用(Credit Card Fraud)なのかどうかを判断する必要があります。この判断には予測モデル(predictive model)がよく利用されます。
1秒あたりのトランザクション数(TPS)が増えれば、1秒あたりの予測数(PPS)も増えます。例えば、昨年の VISA ネットワークでの 56,000TPS、年間取引量は 10億100以上、予測と意志決定には、OLTP と高速な予測エンジンを備えた強力なプラットフォームが必要になります。例えば、顧客数の増大を想定して、1秒あたり 100万予測(100万 PPS)を達成できるプラットフォームにできないか、これを実現するための SQL Server 2016 における設計方法が、前掲の図のインメモリ OLTP と列ストア インデックス、R の組み合わせです。
Heartland Bank は、ニュージーランドの銀行業ですが、従来の SAS ベースのシステムを SQL Server 2016 と Microsoft R をベースにした Microsoftプラットフォームに置き換えています。大手銀行や PayPal のようなサービスと競争するために、投資予測や延滞分析、仲介/ブローカーのパフォーマンス分析などを R プラットフォームに移行して、クレジットカード スコア(スコアリング エンジン)に関しても移行を検討中です。
Heartland Bank の詳細については、以下の米マイクロソフトの事例(Customer Stories)サイトに記載されています。
https://customers.microsoft.com/en-us/story/heartlandbank
金融機関向けにサービスを提供している FIS(Fidelity National Information Services)社では、SQL Server 2016 の非クラスター化列ストア インデックス(NCCI)を付与するだけで、アプリケーションやクエリを一切変更することなく、分析クエリの性能が 4倍、10倍、20倍に向上することを確認しました。OLTP テーブルに NCCI を追加するだけだったので、ETL ルーチンを追加したり、DB を再設計したり、トランザクション処理の変更をしたりする必要はありませんでした。
FIS 社の詳細については、以下の米マイクロソフトの事例(Customer Stories)サイトに記載されています。
https://customers.microsoft.com/en-us/story/financial-services-firm-accelerates-real-time-analytics-with-sql-server
北米最大の決済処理事業者の 1つである Moneris Solutions Corporation では、アプリケーションを一切変更することなく、SQL Server 2016 に変更しただけで、10~20%の性能向上を実現しました(ハードウェアは従来と同じものを利用)。
Always Encrypted を利用すれば、システム上の全ての情報を保護にできるので、法令遵守だけでなく、最先端のセキュリティを提供できます。インメモリ OLTP と Always Encrypted によってスピードとセキュリティの強化、AlwaysOn可用性グループの読み取り専用セカンダリによって負荷分散も実現可能です。
Moneris Solutions 社の詳細については、以下の米マイクロソフトの事例(Customer Stories)サイトに記載されています。
https://customers.microsoft.com/en-us/story/moneris
Revenue Management を提供している PROS Holdings 社では、SQL Server 2016 にビルトインされた R を採用して、従来のシステムよりも 100倍速い性能を実現しています。これについては、昨年開催された PASS Summit 2016 の基調講演で、次のように紹介されていました。
PROS 社の事例については、次の URL で動画を参照することもできます。
PROS Featured in Microsoft SQL Server 2016 Launch
http://info.pros.com/SQL-2016_Watch-Now-View.html
オンライン ゲームを提供している UK の Derivco 社では、AlwaysOn可用性グループを利用して、より効率的なバックアップと DR(災害復旧)を実現し、まったく調整することなく、SQL Server 2016 にアップグレードしただけで、サポートできる同時プレーヤー数が 25% も向上しました。
Derivco 社の詳細については、以下の米マイクロソフトの事例(Customer Stories)サイトに記載されています。
https://customers.microsoft.com/en-us/story/when-an-online-gaming-company-doesnt-want-to-risk-its-future-it-bets-on-sql-server-2016
米国の大手スーパーマーケット チェーン(約 300店舗を展開)の Meijer 社では、約 80万の商品点数に対して、SQL Server 2016 のインメモリ テクノロジーを利用して、Analysis Services(SSAS)のキューブに 200億件分のデータを格納、このデータに対して Power BI からアクセスして、リアルタイムに近いデータ分析を実現しています。
Meijer社の詳細については、以下の米マイクロソフトの事例(Customer Stories)サイトに記載されています。
https://customers.microsoft.com/en-us/story/top-supermarket-chain-gains-insight-and-boosts-profitability-with-microsoft-power-bi
その他の事例に関しては、以下の表に URL をまとめました。
SQL Server 2016 に関しては、以下のブログ記事もお勧めです。
Migrating SAP workloads to SQL Server just got 2.5x faster
https://blogs.msdn.microsoft.com/sql_server_team/migrating-sap-workloads-to-sql-server-just-got-2-5x-faster/
SQL Server 2016 – It Just Runs Faster Announcement
https://blogs.msdn.microsoft.com/psssql/2016/02/23/sql-2016-it-just-runs-faster-announcement/
SQL Server 2016 is generally available today
https://blogs.technet.microsoft.com/dataplatforminsider/2016/06/01/sql-server-2016-is-generally-available-today/
TPC-H は、データ ウェアハウス/意志決定支援システム向けのベンチマーク テストとして有名なものですが、SQL Server 2016 は、10TB(テラ バイト)規模のベンチマーク テストで世界記録(ワールド レコード)を更新しました。執筆時点(2016年12月)では、Non-Clustered の 10TB 部門では、上位 1、2、3位を SQL Server 2016、4位~8位を SQL Server 2014 が獲得して、SQL Server だけで上位1位~8位を独占しています(以下の URL で最新のベンチマーク結果を参照できます)。
TPC-H - Top Ten Performance Results - Non-Clustered
http://www.tpc.org/tpch/results/tpch_perf_results.asp?resulttype=noncluster
この世界記録に関しては、SQL Server チームの Blog にも投稿されているので、以下の記事が参考になると思います。
SQL Server Team Blog:
SQL Server 2016 posts world record TPC-H 10 TB benchmark
http://blogs.technet.microsoft.com/dataplatforminsider/2016/07/18/sql-server-2016-posts-world-record-tpc-h-10-tb-benchmark/
第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 へ参加