EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

SQL Server 2016の概要とIn-Memory OLTP の改善点(後編)

edited by DB Online   2015/09/15 06:00

プログラミング機能拡張

 In-Memory OLTPで使用するメモリ最適化テーブルに、最も効率的にアクセスする方法として提供されているのがネイティブ コンパイル ストアドプロシージャです。ネイティブ コンパイルスト アドプロシージャの特徴は、通常のT-SQL (ストアドプロシージャも含みます)のように実行時にコンパイルされるのではなく、その作成時にマシン語レベルにまでコンパイルされるという点です。そのため、実行される際には通常のT-SQLと比べるとCPUリソースの使用量が少なくて済み、その分パフォーマンスが向上します。ただ、SQL Server 2014の場合はサポートされるステートメントが少なく、ビジネスロジックを実装することがとても難しい状況です。そこで、SQL Server 2016ではより多くのステートメントがサポートされて、ビジネスロジックの実装が容易になります。現時点で新たにサポートされる予定となっているステートメントは次の表を参照してください。また、ネイティブ コンパイル ストアドプロシージャでさらに多くの機能がリリースまでにサポートされる予定です。

ネイティブコンパイルストアドプロシージャ T-SQL サポート
OR
NOT EXIST
UNION
UNION ALL
SELECT DISTINCT
OUTER JOIN
ネイティブコンパイルストアドプロシージャ 機能拡張
サブクエリのサポート
ネイティブコンパイルストアドプロシージャのネスト実行

パフォーマンスの向上

 In-Memory OLTP の特徴の一つはいうまでもなく、その高いパフォーマンスです。SQL Server 2016ではその適用範囲を拡げて、更なるパフォーマンス向上が図られています。

  メモリ最適化テーブルでの並列処理のサポート

 In-Memory OLTPは、その名前が示すようにオンライントランザクション処理、つまり少量データへのアクセスに特化する形で実装が進められました。そのため、大量データの読み込みの際に効果を発揮する、複数の内部スレッドを使用した並列処理は、SQL Server 2014のIn-Memory OLTP機能の対象外となりました。SQL Server 2016では対象とするワークロードにビジネス インテリジェンス/アナリティクスが含まれる予定です。その機能強化策としてクエリの並列処理が実装されます。これによって、(従来の高速なOLTP処理の結果として)蓄積された大量のデータを、並列で処理することが可能になり、データの分析業務で有効に活用できるようになります。

 注意が必要な点としては、現時点で並列処理のサポート対象がInterop クエリと呼ばれる、従来のT-SQL 処理実行形式のみという点です。ネイティブ コンパイル ストアドプロシージャでのクエリ並列実行は、今後サポートされていく予定です。

  列ストアインデックスのサポート

 こちらもビジネスインテリジェンス/アナリティクスでの利便性を高めるための機能です。SQL Server2014のメモリ最適化テーブルに定義できるのは、非クラスタ化ハッシュインデックスと非クラスタ化インデックスでした。非クラスタ化ハッシュインデックスは、検索条件に合致する1件あるいは非常に少ない数のデータを参照する動作に特化しています。また、非クラスタ化インデックスは範囲スキャン操作などによって一定のデータサイズまでは十分なパフォーマンスを発揮します。

 SQL Server 2016では、それらに加えてクラスタ化列ストアインデックスが定義できるようになる予定です。基本的なデータ構造は従来型のディスク テーブルと同一で、データを100万件ごとに列セグメントとして圧縮して保持します。さらにバッチモードと呼ばれる内部動作によって大量データへの参照速度を向上させます。

 メモリ最適化テーブル用 列ストアインデックスの特徴のひとつは、データベースのOPEN時に毎回作成されるのではなく、ディスク上に永続化されています。これは、データベースのOPEN操作をより速く完了させるための実装です。

  大規模環境への対応

 SQL Server 2014では4ソケット/64コアよりも多くのCPUリソースを搭載しているマシンを使用しても、パフォーマンスが頭打ちとなり想定した通りに向上しないという制限が存在しました。そこでNUMA(Non-Uniform Memory Access)アーキテクチャへの対応方法の見直しなどを行うことにより、SQL Server 2016ではさらに多くのCPUリソースを搭載するマシンであっても、パフォーマンスが頭打ちになることはなくなります。

 また、SQL Server 2014では256GBに制限されているデータベースのサイズが、SQL Server 2016では2TBまで拡張されます。これによって、より大規模な環境での使用が可能になります。

 さて、前編/後編と2回に渡りIn-Memory OLTPについて紹介してきましたが、いかがでしたでしょうか。この後、記事を読んだ皆さんが実際にプレビュー版で様々な動作を確認し、うまく動作しない機能や改善すべき点についてフィードバックサイトからご意見をいただけると嬉しく思います。

 次回の連載では SQL Server データベースエンジンのJSON サポートについて取り上げる予定です。お楽しみに!



著者プロフィール

  • 平山理(ヒラヤマオサム)

    日本マイクロソフト株式会社 プレミアフィールドエンジニアリング プレミアフィールドエンジニア 日本マイクロソフトの Premier Field Engineering 部で、お客様に SQL Server をスムーズにお使いいただくための様々なお手伝いをしています。Sybase (現 SAP) 勤務時代の 5 年間とマイクロソフトでの 12 年間、データベース道を極めるために精進する毎日です。 二人の娘の父親であり、ハードロックを好む「バッタもん」ギタリストであり、毎月 300 km くらい走る (わりと) シリアス ランナーでもあります。著書に「絵で見てわかる SQL Server の内部構造」(翔泳社)

バックナンバー

連載:ここから始めよう SQL Server 2016 新機能

もっと読む

All contents copyright © 2007-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5