...

SQL Server 2014 自習書シリーズ No.1

by user

on
Category: Documents
81

views

Report

Comments

Transcript

SQL Server 2014 自習書シリーズ No.1
SQL Server 2014 自習書シリーズ No.1
SQL Server 2014 の新機能の概要
Published: 2013 年 6 月 30 日
RTM 更新版: 2014 年 10 月 30 日
有限会社エスキューエル・クオリティ
SQL Server 2014 自習書 No.1 新機能ダイジェスト
この文章に含まれる情報は、公表の日付の時点での Microsoft Corporation の考え方を表しています。市場の変化に応える必要
があるため、Microsoft は記載されている内容を約束しているわけではありません。この文書の内容は印刷後も正しいとは保障で
きません。この文章は情報の提供のみを目的としています。
Microsoft、SQL Server、Visual Studio、Windows、Windows XP、Windows Server、Windows Vista は Microsoft Corporation
の米国およびその他の国における登録商標です。
その他、記載されている会社名および製品名は、各社の商標または登録商標です。
この文章内での引用(図版やロゴ、文章など)は、日本マイクロソフト株式会社からの許諾を受けています。
© Copyright 2014 Microsoft Corporation. All rights reserved.
2
SQL Server 2014 自習書 No.1 新機能ダイジェスト
目次
STEP 1.
SQL Server 2014 で提供された新機能の概要 .........................................................4
1.1
SQL Server 2014 の評価版のダウンロード ..............................................................5
1.2
SQL Server 2014 で提供された主な新機能の概要 ......................................................6
1.3
SQL Server 2014 による性能向上(早期導入事例).................................................. 13
STEP 2.
2.1
STEP 3.
インメモリ OLTP 機能の概要 .......................................................................... 16
インメモリ OLTP 機能の概要 ............................................................................. 17
更新可能な列ストア インデックス による性能向上 ................................................. 21
3.1
更新可能な列ストア インデックスの概要 ................................................................ 22
3.2
クラスター化列ストア インデックスの性能比較 ........................................................ 24
3.3
クラスター化列ストア インデックスに対するデータの更新 .......................................... 36
3.4
COLUMNSTORE_ARCHIVE (列ストア アーカイブ)................................................. 39
STEP 4.
SQL Server 2014 の主な新機能 ....................................................................... 42
4.1
バッファ プール拡張(SSD をバッファ プールとして利用可能に) ................................ 43
4.2
Power View(パワー ビュー)機能の強化 .............................................................. 54
4.3
クラウド対応(Microsoft Azure 連携) ................................................................. 59
4.4
SQL Server AlwaysOn のパワーアップ ................................................................. 69
4.5
クエリ処理エンジンの進化(SELECT INTO のパラレル処理など) ................................. 72
4.6
Power Query for Excel .................................................................................... 76
4.7
インデックス再構築時のロックの優先度変更 ............................................................ 87
3
SQL Server 2014 自習書 No.1 新機能ダイジェスト
STEP 1. SQL Server 2014
で提供された新機能の概要
この STEP では、SQL Server の最新バージョンである「SQL Server 2014」
で提供された新機能の概要を説明します。
この STEP では、次のことを学習します。

SQL Server 2014 評価版のダウンロード

SQL Server 2014 で提供された主な新機能の概要
4
SQL Server 2014 自習書 No.1 新機能ダイジェスト
1.1
SQL Server 2014 の評価版のダウンロード
SQL Server の最新バージョンである「SQL Server 2014」は、2014 年 4 月から提供されまし
た。SQL Server 2014 を評価するための評価版(Evaluation Edition)は、次の URL からダウン
ロードすることができます。
評価版のダウンロード:Microsoft SQL Server 2014
http://technet.microsoft.com/ja-JP/evalcenter/dn205290.aspx
この自習書では、SQL Server 2014 で提供された新機能を簡単に試せるように、ステップ バイ
ステップ形式で画面ショット満載で紹介していますので、ぜひ、皆さんも実際に試しながらこ の自
習書を読み進めていただければと思います。
5
SQL Server 2014 自習書 No.1 新機能ダイジェスト
1.2
SQL Server 2014 で提供された主な新機能の概要
SQL Server 2014 には、次のようにたくさんの新機能が提供されています。
新機能
性能向上、
DB エンジンの変更
 インメモリ OLTP(開発コード名: Hekaton)
=OLTP 向けのインメモリ エンジン
 クラスター化列ストア インデックス(CCSI)
=インメモリの列指向データベースの SQL Server 実装
 SSD バッファ プール拡張
 Delayed Durability(遅延永続化)
 SELECT INTO のパラレル処理
 基数推定の進化
 統計の増分更新
 リソース ガバナーの強化(I/O 数の制限)
 パーティション スイッチやインデックス再構築時の
ロックの優先度変更
可用性
SQL Server AlwaysOn
 AlwaysOn 可用性グループで、クォーラム損失時にも
読み取り可能セカンダリへのアクセスが可能
 AlwaysOn 可用性グループで、セカンダリを最大 8台まで作成可能
(SQL Server 2012 では 4台が上限)
 FCI(フェールオーバー クラスター インスタンス)で
CSV(クラスター共有ボリューム)がサポート
クラウド対応
Microsoft Azure 連携
 Microsoft Azure 上へのバックアップと
バックアップ ファイルの暗号化
 AlwaysOn 可用性グループのセカンダリを Windows Azure 上へ
作成することができるウィザードの提供(クラウド DR の実現)
 Microsoft Azure 上の仮想マシン(VM)へのデータベースの複製
 データベース ファイル(.mdf)を Microsoft Azure 上に配置可能
 Microsoft Azure 上へのバックアップを支援するツールの提供
BI/可視化
 Power View の Analysis Services 多次元モデルへの対応
 Power Query for Excel(開発コード名: Data Explorer)
 Power Map for Excel(開発コード名: GeoFlow)
SQL Server 2014 は、性能向上に関する新機能が多いことが大きな特徴です。
性能向上に関する新機能
SQL Server 2014 の性能向上に関する新機能の概要は、次のとおりです。

インメモリ OLTP(開発コード名:Hekaton)機能による大幅な性能向上
インメモリ OLTP 機能は、OLTP(オンライン トランザクション処理)向け の新 しいデ
ータベース エンジンで、インメモリで動作する(メモリにテーブルを載せら れる )こと
で、大幅な性能向上を実現することができます。

クラスター化列ストア インデックス(CCSI: Clustered Column-store Index)
SQL Server 2012 では、読み取り専用の列ストア インデックス(非クラスター化列ス
トア インデックス)がサポートされていましたが、SQL Server 2014 からは、更新可能
な列ストア インデックスとして「クラスター化列ストア インデックス」
(CCSI)がサポ
ートされるようになりました。更新可能な列ストア インデックスを利用すると、 次のよ
うな性能向上を実現できます(Step 3 で詳しく説明)
6
SQL Server 2014 自習書 No.1 新機能ダイジェスト
39.5倍
テストに利用したハードウェア環境
・Core i7 3770K 3.5GHz
・メモリ 32GB
・SSD PLEXTOR M3P 256GB
26.5倍
性能結果は相対値
ベンチマーク結果の公開は、使用許諾契約書
で禁じられているので、グラフ内の結果は、
クラスター化列ストア インデックスの値を
100 とした場合の相対値で表しています。

バッファ プール拡張により、SSD をバッファ プールとして利用可能に
バッファ プール拡張を利用すると、次のような性能向上を実現できます(Step 4 で詳し
く説明)
46.7% 向上
約2倍の性能向上
テストに利用したハードウェア環境
・Core i7 3770K 3.5GHz
・メモリ 32GB
・HDD:WD30EZRX 3TB
・SSD :PLEXTOR M3P 256GB
性能結果は相対値
ベンチマーク結果の公開は、使用許諾契約
書で禁じられているので、グラフ内の結果
は、相対値で表しています。

Delayed Durability(遅延永続化)により、ログへの非同期書き込みが可能に
トランザクション ログへの遅延書き込みが行える Delayed Durability(遅延永続化)
機能の提供によって、ログ書き込みの性能を大幅に向上させることができます(更 新系の
処理のパフォーマンスを向上させることができます)。

SELECT INTO でのパラレル処理が可能に
以下は、SELECT INTO を実行したときの実行プランです(パラレル Table Insert)
。
パラレル
Table Insert
SELECT INTO のパラレル処理によって、次のような性能向上を実現できます(Step 4
で詳しく説明)
。
7
SQL Server 2014 自習書 No.1 新機能ダイジェスト
平均で
18.3% 向上
最大で 36.6% 向上
する処理も有り

クエリ処理エンジンの進化(基数推定の進化や統計の増分更新など)

リソース ガバナーの強化(I/O 数の制限が可能に)

パーティション スイッチやインデックス再構築時のロックの優先度変更
以上のように、SQL Server 2014 には、OLTP 向けのインメモリ機能である「インメモリ OLTP」
や、DWH/BI 向けのインメモリ機能である「クラスター化列ストア インデックス」
(カラム指向
データベースの SQL Server 実装)
、SSD をバッファ プールの一部として利用可能な「バッ ファ
プール拡張」
、トランザクション ログへの遅延書き込みが行える「Delayed Durability」
、
「クエ
リ処理エンジンの進化(新しい基数推定のアルゴリズムや SELECT INTO のパラレル処理、統計
の増分更新)など、性能向上を実現できる機能が数多く搭載されています。
詳しくは後述しますが、クラスター化列ストア インデックスの早期導入を行った株式会社 glo op s
では、約 240 倍の性能向上を実現しています。同社は、数多くのソーシャル ゲームを提供してい
ることで有名ですが、人気ゲーム「スカイロック」でのユーザー行動分析用 DWH 作成や、ユーザ
ー ランキングの生成に SQL Server 2014 を採用し、従来 12 分かかっていたバッチ処理を、わ
ずか 3 秒に短縮、テーブル容量は 55GB から、わずか 2.8GB へと、1/20 にも圧縮することが
できています。
また、インメモリ OLTP の早期導入を行った bwin 社では約 16.7 倍の性能向上(最新の検 証で
は約 30 倍の性能向上)
、FX 取引で有名な SBI リクイディティ・マーケット株式会社では約 2. 5
倍の性能向上(各種のパフォーマンス チューニングによって、元々のシステムと比べると約 3 0 倍
の性能向上)
、Edgenet 社では約 8~11 倍の性能向上を実現しています。
このように、SQL Server 2014 は、大きな性能向上を期待することができます。
8
SQL Server 2014 自習書 No.1 新機能ダイジェスト
クラウド連携に関する新機能(Microsoft Azure)
SQL Server 2014 は、クラウド連携に関する新機能も充実しています。これらの概要は、次 のと
おりです。

Microsoft Azure 上へのバックアップが可能に(BACKUP TO URL)
。
バックアップ ファイルの暗号化も可能
Microsoft Azure 上の BLOB
ストレージのコンテナーを指定
して、バックアップが可能
バックアップ ファイルの
暗号化も可能

AlwaysOn 可用性グループのセカンダリを Microsoft Azure 上へ作成することができ
るウィザードの提供
AlwaysOn 可用性グループ
の設定ウィザード
セカンダリ(レプリカ)として
Microsoft Azure 上の
仮想マシンを追加できる
=クラウド DR の実現
Azure VM
(仮想マシン)
の設定

Microsoft Azure 上の仮想マシン(VM)へのデータベースの配置(Deploy)

データベース ファイル(.mdf)を Microsoft Azure 上に配置可能に

Microsoft Azure 上へのバックアップを支援するツールの提供
9
SQL Server 2014 自習書 No.1 新機能ダイジェスト
その他の新機能の概要
SQL Server 2014 のその他の新機能の概要は、次のとおりです。

SQL Server AlwaysOn のパワーアップ
- クォーラム損失時にも読み取り可能セカンダリへのアクセスが可能
- FCI(フェールオーバー クラスター インスタンス)で CSV(クラスター共有
ボリューム)がサポート
- セカンダリを最大 8 台まで作成可能に(SQL Server 2012 では 4 台が上限)
最大 8台の
セカンダリを作成可能
10
SQL Server 2014 自習書 No.1 新機能ダイジェスト

Power View(パワー ビュー)機能の強化
Analysis Services 多次元モデルから、Power View のレポート作成が可能に(SQL
Server 2012 SP1 CU4 から利用可能)
Analysis Services の
多次元モデル(キューブ)から
Power View のレポートを作成
Analysis Services の
多次元モデル(キューブ)

Power Query for Excel によるさまざまなデータソースの検索/抽出/加工が可能に
11
SQL Server 2014 自習書 No.1 新機能ダイジェスト
Web ページ内の <Table> タグや、ファイル(Excel や CSV、XML、Text ファイルな
ど、フォルダー内の複数ファイルをまとめて取り込むことも可能)、SQL Server や
Microsoft Azure SQL データベース、Access、Oracle、DB2、MySQL などの各種デー
タベース、Hadoop HDFS や Microsoft Azure HDInsight (Microsoft Azure の
Hadoop 実装)
、SAP BusinessObjects BI、SharePoint List、Exchange、OData Feed、
Facebook などからデータを取得することができます。

Power Map for Excel による地図データの可視化
Power Query for Excel で取得したデータは、次のように Power Map for Excel を利
用すれば、地図データを可視化することもできます。
本自習書では、これらの新機能について、ステップ バイ ステップ形式で画面ショット満載 で
紹介していますので、ぜひ、皆さんも実際に試しながらこの自習書を読み進めていた だけれ ば
と思います。
12
SQL Server 2014 自習書 No.1 新機能ダイジェスト
1.3
SQL Server 2014 による性能向上(早期導入事例)
既に SQL Server 2014 を早期導入/検証を行っている企業では、次のような性能向上を実現 して
います。
社名/サービス概要
導入効果
株式会社 gloops
各種のソーシャル ゲームを提供
約 240倍の性能向上
クラスター化列ストア インデックスを利用して、
12分かかっていたバッチ処理を、わずか 3秒に短縮。
テーブル容量は 1/20 に圧縮(55GB がわずか 2.8GB へ)
株式会社わかさ生活
ブルーベリーアイの販売など
クラスター化列ストア インデックスやインメモリ OLTP の早期検証を
行い「処理レスポンス 3 秒以内」を目標にスピードアップを目指す
bwin 社
オンライン ゲームなどを提供
約 16.7倍の性能向上
インメモリ OLTP を利用して、
15,000 バッチ要求数/sec が 250,000 バッチ要求数/sec へ向上。
最新の Lab Test では 450,000 バッチ要求数/sec を確認
(約 30倍の性能向上を確認)
SBIリクイディティ・マーケット
株式会社
FX 取引(オンライン トレード)
約 2.5倍の性能向上*
インメモリ OLTP を利用して、
処理件数が 52,080 件/sec から 131,921 件/sec へ向上。
従来は、トランザクションが集中する時間帯での
Latency(遅延)が約 4秒だったのを、1秒以下に短縮
Edgenet 社
商品データを提供する
データ プロバイダー
約 8~11倍の性能向上
インメモリ OLTP を利用して、
2時間 20分かかっていたバッチ処理を、わずか 20分に短縮。
更新にブロックされない読み取りにより、読み取り性能も向上
TPP 社
臨床ソフトウェアの提供
約 7倍の性能向上
インメモリ OLTP を利用して、
34,700 トランザクション/sec が、数十万 トランザクション/sec へ向上
弊社のお客様「A社」
ポイントカード システム
弊社のお客様「B社」
流通系 DWH/BI システム
約 2.8倍の性能向上
インメモリ OLTP を利用して、
1,743 処理量/sec が 4,795 処理量/sec へ向上
約 1.9倍の性能向上
クラスター化列ストア インデックスを利用して、
バッチ実行時間が 2時間 40分から 1時間 25分へ向上。
データベース サイズは 531GB から 90GB へと 1/6 に圧縮
*マイクロソフトでは、「TAP」(早期検証プロジェクト)と呼ばれる、製品完成前のプレビュー版の段階から
検証を行うプログラムを展開しています。
日本における FX 取引で有名な SBIリクイディティ・マーケット株式会社では、2012年 8月に日本マイクロソ
フトから TAP への参加オファーを受けて、各種の検証を実施。本番稼働とほぼ同等の環境を構築して入念な検
証を重ね、インメモリ OLTP を中心として、さまざまなパフォーマンス チューニング(アーキテクチャ変更な
ど)を実施することで、元々のシステムと比較すると約 30倍もの処理パフォーマンス向上を実現しています
(インメモリ OLTP の部分では約 2.5倍の性能向上を実現)。
株式会社 gloops では 240 倍の性能向上
数多くのソーシャルゲームを提供している「株式会社 gloops」では、SQL Server 2014 のクラ
スター化列ストア インデックスを利用することで、約 240 倍の性能向上を実現していま す。同社
の人気ゲーム「スカイロック」でのユーザー行動分析用 DWH 作成や、ユーザー ランキングの生
成に SQL Server 2014 を採用し、従来 12 分かかっていたバッチ処理を、わずか 3 秒に短縮、
テーブル容量は 55GB から、わずか 2.8GB へと、1/20 にも圧縮することができています。
株式会社 gloops での早期導入の詳細については、以下の日本マイクロソフトの事例サイトに 記載
されています。
13
SQL Server 2014 自習書 No.1 新機能ダイジェスト
株式会社 gloops の事例
http://www.microsoft.com/ja-jp/casestudies/gloops.aspx
弊社のお客様「B 社」では 1.9 倍の性能向上を確認
弊社のお客様「B 社」の流通系の「DW H/BI システム」では、SQL Server 2014 のクラスター
化列ストア インデックスを利用することで、約 1.9 倍の性能向上という検証結果を確認して いま
す。
SQL Server 2014 に
アップグレードしただけで
約 1.2倍
クラスター化列ストア イン
デックスに変更することで
約 1.9倍
このシステムは、データ件数約 100 億件の流通系の DWH/BI システムで、日中のバッチ処理を
ストアド プロシージャで行っていて、このストアド プロシージャの総ステップ数は約 1 万に もな
ります。SQL Server 2012 上で動作させていたバッチ処理を、ソースを1行も変更することな く、
SQL Server 2014 上で動作させただけで(データベースをバックアップ/復元で移行した だけで )
約 1.2 倍の性能向上、クラスター化列ストア インデックスへ変更して、ソースを少し変更し たこ
とで約 1.9 倍の性能向上を確認することができました。
また、データベース サイズは、従来 531GB だったものを 90GB へと、約 1/6 にまで圧縮する
14
SQL Server 2014 自習書 No.1 新機能ダイジェスト
ことができました。
クラスター化列ストア イン
デックスに変更することで
約 1/6 に圧縮
このように、クラスター化列ストア インデックスは、性能向上だけでなく、データベース サイズ
を大幅に圧縮できる効果もあります。
なお、アップグレードしただけでも約 1.2 倍の性能向上を実現することができたのは、SEL ECT
INTO でのパラレル処理が効いています(∵該当バッチ処理では、SELECT INTO を利用している
ため)
。
このように、SQL Server 2014 では、クラスター化列ストア インデックスが提供されたことが非
常に大きなメリットです(特にデータ ウェアハウス環境など、大量のデータに対する集計処理 を行
うシステムで役立ちます)
。
インメモリ OLTP 機能による性能向上
SQL Server 2014 では、インメモリ OLTP 機能が提供されたことも非常に大きなメリットで す。
この機能の早期導入を行った bwin 社では約 16.7 倍の性能向上(最新の検証では約 30 倍の 性能
向上)
、FX 取引で有名な SBI リクイディティ・マーケット株式会社では約 2.5 倍の性能向上(各
種のパフォーマンス チューニングによって、元々のシステムと比べると約 30 倍の性能向 上)、
Edgenet 社では約 8~11 倍、TPP 社では約 7 倍、弊社のお客様「A 社」のポイントカード シ
ステムでは約 2.8 倍の性能向上を実現しています。
これらのインメモリ OLTP の事例については、SQL Server 2014 実践シリーズの「No.1 イン
メモリ OLTP の実践的な利用方法」で、具体的な実装方法を例に、詳しく説明しているの で、こち
らもぜひご覧いただければと思います。
インメモリ OLTP の実践的な利用方法
https://www.microsoft.com /ja-jp/sqlserver/2014/technology/self-learning.aspx#practical_contents
15
SQL Server 2014 自習書 No.1 新機能ダイジェスト
STEP 2. インメモリ OLTP 機能の概要
この STEP では、インメモリ OLTP(開発コード名:Hekaton)機能の概 要を 説
明します。
この STEP では、次のことを学習します。

インメモリ OLTP 機能の概要

データベース エンジンとの完全統合

ブロッキングの最小化
16
SQL Server 2014 自習書 No.1 新機能ダイジェスト
2.1
インメモリ OLTP 機能の概要
SQL Server の最新バージョンである「SQL Server 2014」で提供された「インメモリ OLTP」
機能(開発コード名:Hekaton、ヘカトン)は、OLTP(On- Line Transaction Processing:オン
ライン トランザクション処理)向けの新しいデータベース エンジンです。
このエンジンの一番の利点は、
「インメモリ」で動作することで、非常に高速に処理できる点で す。
テーブル内のデータを、全てメモリ内に載せることができるので、従来のディスク ベースのデータ
ベース エンジンよりも非常に高速に動作させることができます。
インメモリ OLTP 機能の主な特徴は、次のとおりです。

インメモリで動作するので、従来のデータベース エンジンよりも非常に高速

SQL Server のデータベース エンジンと完全に統合されている。
SQL Server のデータベース エンジンに完全に統合されているので、従来 ど お り の
Transact-SQL ステートメントおよびツールを利用してインメモリの操作が可能。
シームレスに利用できるので、"移行"が容易に行える。新しいハードウェアを購入 する必
要もない。
AlwaysOn 可用性グループによるデータの保護/可用性向上もサポートされる

メモリ内にのみテーブル データを配置することが可能(ディスク上にはデー タを 配置し
ない)
。メモリ内に配置したテーブルは、
「メモリ最適化テーブル」(Memory-optimiz e d
Table)と呼ばれる

「ネイティブ
コンパイル ストアド プロシージャ」(Natively Compiled Stored
Procedure)を作成することで、さらに高速な処理が可能

SQL Server の再起動後も、データ復旧が可能な Durability(永続化)モードも用意さ
れている(ディスク上に更新ログを記録して、再起動後にデータの復旧が可能)

ブロッキングの最小化(ロックやラッチ待ちがほとんど発生しない同時実行性を提供)
インメモリ OLTP 機能の一番の利点は性能向上
インメモリ OLTP 機能の一番の利点は、
「インメモリ」で動作することで、非常に高速に処理 でき
る点です。前項で紹介した bwin 社では 16.7 倍(最新の検証では 30 倍)
、SBI リクイディティ・
マーケット株式会社では 2.5 倍、弊社のお客様「A 社」では 2.8 倍もの性能向上を実現していま
す。
SQL Server のデータベース エンジンと完全に統合されている(=移行が容易)
インメモリ OLTP 機能は、従来型の SQL Server のデータベース エンジンと完全に統合されて
いることが大きなメリットです。他社製のインメモリ エンジンの場合は、別製品やオプション 機能
として提供されていることが多く、これでは別途インストールが必要であったり、実際の操作 方法
17
SQL Server 2014 自習書 No.1 新機能ダイジェスト
が異なったり、新しい知識が必要になったりするなど、簡単に移行することができません(新 しい
ハードウェアを購入しなければならない場合もあります)。
これに対して、SQL Server のインメモリ OLTP 機能は、SQL Server と完全に統合されている
ので、簡単に移行することができます。通常の SQL Server を操作するのと同じように TransactSQL ステートメントおよび同じツールを利用して、インメモリ OLTP 機能(メモリ最適化テーブ
ル)を操作することができます。新しいハードウェアを購入する必要もなく、通常の SQL Server
をインストールするだけで インメモリ OLTP 機能を利用できます(シームレスに利用できま す)。
インメモリ OLTP 機能は、SQL Server 2014 のインストール時の[機能の選択]ページ で、次の
ように通常通り「データベース エンジン サービス」を選択するだけで利用することがで きます 。
メモリ最適化テーブル(インメモリ化したテーブル)は、通常のテーブルと同じように CREATE
TABLE ステートメントで作成することができ、ネイティブ コンパイル ストアド プロシージャも、
通常のストアド プロシージャと同じように CREATE PROCEDURE ステートメントで作成する
ことができます。以下は、それぞれを作成しているときの例です。
-- メモリ最適化テーブルの作成例
C R EATE T ABLE t1_InMem
( col1 int NOT NULL
PRIMARY KEY NONCLUSTERED
HASH WITH (BUCKET_COUNT = 1000000)
,col2 nvarchar(100) )
WITH ( M E MORY_OPTIMIZED = O N ,
DURABILITY = SCHEMA_ONLY )
-- メモリ最適化テーブルへデータを INSERT している例
INSERT INTO t1_InMem VALUES (1, N'AAAAA')
18
SQL Server 2014 自習書 No.1 新機能ダイジェスト
-- ネイティブ コンパイル ストアドプロシージャの作成例
C R EATE P ROC nativeTest
@i int
WITH
N A TIVE_COMPILATION,
EXECUTE AS OWNER,
SCHEMABINDING
AS
BEGIN ATOMIC
WITH (
TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'japanese')
INSERT INTO dbo.t1_InMem VALUES(@i, N'AAAAA')
END
このように、通常の SQL Server を操作するのと同じように、Transact-SQL ステートメントを
利用して、インメモリ化したテーブル を作成 するこ とがで き、通 常のテ ーブル と同 じ よ う に
SELECT や INSERT、UPDATE、DELETE ステートメントを利用してデータ操作(検索/追 加/
更新/削除)も行うことができます。もちろん、インメモリで高速に動作させるために、いく つか
のステートメントに制限事項がありますが、基本的なステートメントはほとんど同じように利 用す
ることができます。
したがって、従来型のディスク ベースのテーブルを、インメモリ OLTP 機能へ移行することも簡
単に行うことができます。
ブロッキングの最小化(ロック待ちやラッチ待ちを最小化した同時実行性を提供)
従来のデータベース エンジンでは、データの更新時(INSERT/UPDATE/DELETE 時)に、ロッ
ク待ち(Lock Wait)やラッチ待ち(Latch Wait)が原因で、同時実行性が低下することがあ りま
したが、今回提供されたインメモリ OLTP 機能では、このようなブロッキングはほとんど発生 しま
せん。インメモリ OLTP 機能では、ロックを利用しないマルチ バージョンの楽観的同時実行制御
(Optimistic Concurrency Control)が採用されているからです。これは、SQL Server 2005 か
らサポートされているスナップショット分離機構をインメモリ OLTP 向けに改良したもので すが 、
この新しいスナップショット分離機構は、tempdb を利用しない、完全なインメモリ アーキテク
チャです。
このように、インメモリ OLTP 機能では、ロック待ちやラッチ待ちがほとんど発生しない、同 時実
行性を実現することができるので、大量のユーザーからの多数の更新要求が発生するシス テム(オ
ンライン ゲームやオンライン トレード、チケット予約、ポイントカード システム)など、トラン
ザクションとしては小さく(実行されるステートメントが単純で、短いトランザクション)、多 数の
同時実行によるブロッキングが発生しやすいシステムで最も効果を発揮します。
インメモリ OLTP 機能については、本自習書シリーズの「N o.2 インメモリ OLTP 機能の概要」
編で詳しく説明しているので、こちらもぜひご覧いただければと思います。
19
SQL Server 2014 自習書 No.1 新機能ダイジェスト
Note: SQL Server のインメモリ技術(CEP、BI、ビッグデータもカバー)
SQL Server では、既に多くのインメモリ技術が提供されており、今回のインメモリ OLTP 機能が初めて提供されたイ
ンメモリ技術ではありません。2 つ前のバージョンである SQL Server 2008 R2 から提供された StreamInsight およ
び PowerPivot に始まり、以下のインメモリ技術が提供されています。
・StreamInsight(SQL Server 2008 R2 から)
・PowerPivot(SQL Server 2008 R2 から)
・xVelocity エンジン(SQL Server 2012 から)
・xVelocity 列ストア インデックス(SQL Server 2012 から)
・インメモリ OLTP 機能(SQL Server 2014 から)
StreamInsight は、CEP(Complex Event Processing:複合イベント処理)を実現することができる機能で、SQL
Server 2008 R2 から提供されています。CEP は、各種のセンサー データや株取引情報、Web サーバーのログ(ク
リック ストリーム)などのように、絶え間なく大量に流れてくるようなストリーム データ(イベント)を処理するこ
とができるアプリケーションのことを指し、StreamInsight は、インメモリで動作することで高速なイベント処理が可
能です。
PowerPivot は、インメモリの BI 機能で、こちらも SQL Server 2008 R2 から提供されました。SQL Server
2008 R2 では、クライアント版の PowerPivot for Excel、サーバー版の PowerPivot for SharePoint が提供され、
数億件レベルのデータでも、非常に高速な集計処理ができるインメモリの BI エンジン(インメモリで動作するカラム
ベースのエンジン)です。
PowerPivot のエンジンは、SQL Server 2012 からは、xVelocity エンジンへと名称変更・改良されて、Analysis
Services(分析サーバー)でも利用できるようになりました(テーブル モデル:Tabular Model と呼ばれる)
。これ
により、ビッグデータ/より大量のデータにも対応可能なサーバー版のインメモリ BI 機能が利用できるようになりま
した。
xVelocity 列ストア インデックス(Columnstore Index)は、SQL Server 2012 のデータベース エンジンの機能強
化として提供されました。列ストア インデックスは、xVelocity エンジン(インメモリのカラムベース エンジン)を
RDB へ応用したもので、このエンジンでは、列単位でインデックスを格納し、それらは高度に圧縮されています(い
わゆる列指向データベースの SQL Server 実装)。このインデックスによって、大量のデータに対する集計処理
(GROUP BY 演算など)の性能を大きく向上させることができます。したがって、夜間バッチ処理時(夜間バッチで
の日次集計や月次集計処理など)や、DWH(データ ウェアハウス)環境での集計処理時に大変役立ちます。列ストア
インデックスは、SQL Server 2012 では読み取り専用でしたが、SQL Server 2014 からは更新することもできるよ
うになりました(次の Step で説明)。
このように、SQL Server のインメモリ技術は、CEP から BI、ビッグデータ、OLTP まで、幅広くカバーしていま
す。
20
SQL Server 2014 自習書 No.1 新機能ダイジェスト
STEP 3. 更新可能な列ストア インデックス
による性能向上
この STEP では、SQL Server 2014 で提供された「更新可能な列ストア インデ
ックス」
(クラスター化列ストア インデックス、CCSI)機能の概要を説明しま す 。
この STEP では、次のことを学習します。

更新可能な列ストア インデックスの概要

クラスター化列ストア インデックスの性能比較

データの更新とインデックスの再構築

COLUMNSTORE_ARCHIVE モード
21
SQL Server 2014 自習書 No.1 新機能ダイジェスト
3.1
更新可能な列ストア インデックスの概要
列ストア インデックス(Column-store Index)は、SQL Server 2012 からサポートされた機能
ですが、SQL Server 2012 では読み取り専用でした。SQL Server 2014 からは、更新可能な列
ストア インデックスがサポートされるようになりました(SQL Server 2012 でも、2013 年 3 月
に提供された SQL Server 2012 Parallel Data Warehouse エディション=通称
PDW
version 2 を利用している場合は、更新可能な列ストア インデックスを利用することができま す)。
この更新可能な列ストア インデックスは、「クラスター化 列スト ア
インデックス」(CCSI :
Clustered Column-store Index)と呼ばれ、従来ながらの読み取り専用の列ストア インデック
スは、
「非クラスター化列ストア インデックス」と呼ばれます。クラスター化列ストア インデック
スは、次のように CREATE CLUSTERED COLUMNSTORE INDEX ステートメントを利用して、
作成することができます。
CREATE CLUSTERED COLUMNSTORE INDEX インデックス名
ON テーブル名
Management Studio から作成する場合は、次のようにオブジェクト エクスプローラーで[イン
デックス]フォルダーを右クリックして、
[新しいインデックス]メニューから作成できます。
1
2
オプション
の設定
3
22
SQL Server 2014 自習書 No.1 新機能ダイジェスト
列ストア インデックスによる性能向上
列ストア インデックスは、
「xVelocity 列ストア インデックス」とも呼ばれ、PowerPivot および
Analysis Services Tabular Mode(テーブル モード)で採用されているインメモリの BI エンジ
ンである「xVelocity エンジン」を RDB へ応用したものです。
このエンジンでは、列単位でインデックスを格納し、それらは高度に圧縮されています。
テーブル
a
b
xVelocity 列ストア インデックス
c
従来ながらの Row ストア
a
b
カラム(Column)ストア
c
a
b
c
行単位で格納
高度に圧縮され
ている
…
列単位で格納
このインデックスによって、大量のデータに対する集計処理(GROUP BY 演算など)の性能を大
きく向上させることができます。したがって、夜間バッチ処理時(夜間バッチでの日次集計や 月次
集計処理など)や、DWH(データ ウェアハウス)環境での集計処理時に大変役立ちます。
本自習書内では、1,000 万件のデータに対する GROUP BY 演算を実行するスクリプトを説明し
ていますが、このスクリプトを実行したときの実行時間を比較すると、次のグラフのようにな りま
す。
39.5倍
テストに利用したハードウェア環境
・Core i7 3770K 3.5GHz
・メモリ 32GB
・SSD PLEXTOR M3P 256GB
26.5倍
性能結果は相対値
ベンチマーク結果の公開は、使用許諾契約書
で禁じられているので、グラフ内の結果は、
クラスター化列ストア インデックスの値を
100 とした場合の相対値で表しています。
グラフの FullScan は、インデックスが使用されないフル テーブル スキャンが実行された とき
の速度、IndexScan は、列ストア インデックスではない通常の非クラスター化インデ ック スを
作成/利用したとき、ColumnStore NonClustered が非クラスター化列ストア インデックスを
作成/利用したとき、ColumnSt ore Clustered がクラスター化列ストア インデックス(CCSI)
を作成/利用したときの実行速度です(相対値)
。列ストア インデックスを利用することで、フル
スキャンに比べて 39.5 倍、インデックス スキャンに比べて 26.5 倍もの性能向上を実現するこ
とができます。このように、集計処理に強いのが列ストア インデックスです。
23
SQL Server 2014 自習書 No.1 新機能ダイジェスト
3.2
クラスター化列ストア インデックスの性能比較
それでは、クラスター化列ストア インデックスを試してみましょう。クラスター化列ストア イン
デックスを作成しない場合や、非クラスター化列ストア インデックス(読み取り専用)を作成した
場合との性能比較などを行ってみます。なお、列ストア インデックスは、複数コアに最適化さ れた
アーキテクチャなので、検証する際には、複数コアを搭載した物理マシン、または複数コアを 割り
当てた仮想マシンで試すようにしてください(1 コアでは性能差を確認することが難しくなります )。
データベースの作成
1.
まずは、データベースを作成します。データベースの名前は「CSItestDB 」とし、次 のよう に
CREATE DATABASE ステートメントを記述して作成します。
CREATE DATABASE C S ItestDB
ON PRIMARY ( NAME = 'CSItestDB'
, F I LENAME = 'C:\C SItestDB\CSItestDB_data.mdf'
, SIZE = 5120MB )
LOG ON ( NAME = 'CSItestDB_log'
, F I LENAME = 'C:\C SItestDB\CSItestDB_log.ldf'
, SIZE = 1024MB )
FILENAME で指定しているファイル パス(データ ファイルとトランザクション ログ ファ
イルの作成先となるフォルダー)には、「C:\CSItest DB」フォルダーを指定してい ますが 、
皆さんの環境に合わせて適宜変更してください。
テーブル「t1」の作成
2.
次に、CREATE TABLE ステートメントを利用して、通常どおりに「t1」という名前 のテー ブ
ルを作成します。
USE CSItestDB
CREATE TABLE t1
( a int IDENTITY(1, 1) PRIMARY KEY
, b int
, c char(200) DEFAULT 'dummy1'
, d char(200) DEFAULT 'dummy2' )
24
SQL Server 2014 自習書 No.1 新機能ダイジェスト
1,000 万件のデータの INSERT
3.
次に、WHILE ループを利用して、1,000 万件のデータを INSERT します。
SET NOCOUNT ON
DECLARE @i int = 1, @b int = 1
WHILE @i <= 1 0 000000
BEGIN
IF @i % 10000 = 0 SET @b = @i
INSERT INTO t 1 (b) VALUES(@b)
SET @i += 1
END
SET NOCOUNT OFF
1,000 万件のデータを追加しているので、環境にもよりますが、実行には 20 分~2 時間くら
いの時間がかかります(ディスクが低速な場合には、さらに実行時間が長くなります)
。
4.
データの追加が完了したら、次のように SELECT ステートメントを実行して、追加 された デ
ータを確認しておきましょう。
-- 上位 10万件を確認
SELECT TOP 100000 * FROM t 1
b 列は 10000
ごとに同じ値
a 列には
1 からの連番
t1 テーブルの a 列には、IDENTITY による連番、b 列には、10,000 件ごとに、1、10, 000 、
25
SQL Server 2014 自習書 No.1 新機能ダイジェスト
20,000、30,000 という値が入るようにしています。
5.
次に、COUNT 関数を利用して、データ件数が 1,000 万件であることを確認しておきます。
SELECT COUNT(*) FROM t 1
通常テーブルでの速度チェック
次に、通常テーブルでの実行速度をチェックします(この後に作成する非クラスター化列ストア イ
ンデックスや、クラスター化列ストア インデックスとの比較を行うために、通常テーブルでの 速度
をチェックします)
。
1.
まずは、実行速度をチェックするために、SET STATISTICS TIME を ON へ設定して、
GROUP BY 演算を利用した SELECT ステートメントを実行します。
SET STATISTICS TIME ON
SELECT b, MAX(a) FROM t 1
GROUP BY b
実行が完了したら、
[メッセージ]タブを開きます。
1
2
実行時間を
確認する
経過時間のところで実行時間を確認することができるので、これをメモしておいてくだ さい 。
26
SQL Server 2014 自習書 No.1 新機能ダイジェスト
2.
次に、SELECT ステートメントを選択して、ツールバーの[推定実行プラン]ボタン をクリ ッ
クし、実行プランを確認します。
2
1
SELECT ステート
メントを選択
3
Clustered
Index Scan
Clustered Index Scan(全データのスキャン)が選択されていることを確認できま す。t 1
テーブルの a 列には、PRIMARY KEY 制約を設定しているので、クラスター化イン デック ス
が自動作成されていて、このインデックス(実データ)が全スキャンされています。
3.
次に、テーブルのプロパティを開いて、テーブル サイズを確認しておきましょう。
2
3
1
オブジェクト エクスプローラーで、t1 テーブルを右クリックして、[プロパティ] をクリ ッ
クし、
[ストレージ]ページを開くと、
[データ領域]でテーブル サイズを確認することができ
ます(約 4GB のサイズであることを確認できます)
。
27
SQL Server 2014 自習書 No.1 新機能ダイジェスト
非クラスター化インデックスの作成(通常のインデックスの場合の性能チェック)
次に、非クラスター化インデックス(列ストア インデックスではなく、通常のインデックス)を作
成した場合の性能を調べてみましょう。
1.
今回作成する非クラスター化インデックスは、先ほどの GROUP BY 演算を速く実行するため
に、
「b, a」列の順番に作成します。
CREATE NONCLUSTERED INDEX idx1
ON t 1 (b, a)
2.
作成が完了したら、先ほどと同じ SELECT ステートメントを実行して、実行時間を 調べま し
ょう。
SELECT b, MAX(a) FROM t 1
GROUP BY b
1
実行時間を
確認する
経過時間が小さくなっていることを確認できると思います(弊社環境では、約 30% 速く実行
できることを確認しています)
。
3.
次に、SELECT ステートメントを選択して、ツールバーの[推定実行プラン]ボタン をクリ ッ
クし、実行プランも確認しておきましょう。
1
Index Scan
Index Scan と表示されていることを確認できると思います。
4.
次に、テーブル サイズとインデックス サイズを確認しておきましょう。
28
SQL Server 2014 自習書 No.1 新機能ダイジェスト
2
1
データ領域(テーブル サイズ)が約 4GB、インデックス領域(インデックスのサイ ズ)が 約
151MB であることを確認できます。
非クラスター化列ストア インデックスの作成、性能チェック
次に、非クラスター化列ストア インデックス(クラスター化列ストア インデックスではなく、SQL
Server 2012 からサポートされている列ストア インデックス)を作成した場合の性能を調べ てみ
ましょう。
1.
まずは、通常の非クラスター化インデックスを削除します。
DROP INDEX idx1 ON t 1
2.
次に、非クラスター化列ストア インデックスを作成します。
CREATE NONCLUSTERED COLUMNSTORE INDEX idx1
ON t 1 (a, b, c, d)
29
SQL Server 2014 自習書 No.1 新機能ダイジェスト
3.
作成が完了したら、同じ SELECT ステートメントを実行して、実行時間を調べましょう。
SELECT b, MAX(a) FROM t 1
GROUP BY b
1
実行時間を
確認する
経過時間が桁違いに小さくなっていることを確認できると思います(弊社環境では、約 27.6
倍 速く実行できることを確認しています)。
4.
次に、SELECT ステートメントを選択して、ツールバーの[推定実行プラン]ボタン をクリ ッ
クし、実行プランも確認しておきましょう。
1
NonClustered(非クラスター化)の
Columnstore インデックス スキャン
Columnstore インデックス スキャン(NonClustered)と表示されて、非クラス ター化 列
ストア インデックスのスキャンで実行されていることを確認できると思います。
5.
次に、インデックス サイズも確認しておきましょう。
1
インデックス領域(インデックスのサイズ)が約 52MB であることを確認できます(非ク ラ
スター化インデックスの場合は 約 151MB でした)
。
6.
次に、UPDATE ステートメントを実行して、データが更新できないことを確認して おきま し
30
SQL Server 2014 自習書 No.1 新機能ダイジェスト
ょう(非クラスター化列ストア インデックスは読み取り専用であることを確認します)。
UPDATE t 1
SET c = 999
WHERE a = 1
このように、非クラスター化列ストア インデックスでは、データを更新することが できま せ
ん。
クラスター化列ストア インデックスの作成(更新可能な列ストア インデックス)
次に、SQL Server 2014 からの新機能であるクラスター化列ストア インデックス(更新可能な列
ストア インデックス)を作成しましょう。
1.
まずは、非クラスター化列ストア インデックスを削除します。
DROP INDEX idx1 ON t 1
2.
次に、CREATE CLUSTERED COLUMNSTORE INDEX ステートメントを利用して、クラ ス
ター化列ストア インデックスを作成します。クラスター化列ストア インデックスには、すべ
ての列を含む必要があるので、ON 句ではテーブル名を指定するだけになります。
CREATE CLUSTERED COLUMNSTORE INDEX cidx1
ON t 1
しかし、結果はエラーになります。クラスター化列ストア インデックスを作成するには、テ ー
31
SQL Server 2014 自習書 No.1 新機能ダイジェスト
ブル内に制約やインデックスがないことが条件になるためです。t1 テーブルには、PRIMARY
KEY 制約を設定しているので、自動的にクラスター化インデックスが作成されていて 、クラ ス
ター化列ストア インデックスを作成することができていません。
3.
PRIMARY KEY 制約およびクラ スタ ー 化 イン デ ッ クス を 削 除 する た め に、 次 の よ う に
sp_help システム ストアド プロシージャを実行して、インデックス名を確認します。
EXEC sp_help 't 1 '
1
index_name に表示される「PK__t1__~」がインデックス名および PRIMARY KEY 制約
の名前になるので、これをコピーします。
4.
コピーした名前を以下の ALTER TABLE ステートメントに貼り付けて、PRIMARY KEY 制約
を削除します(PRIMARY KEY 制約を削除することによって、クラスター化インデッ クスも 一
緒に削除できます)
。
ALTER TABLE t 1
DROP CONSTRAINT PK__t1__~
sp_help で調べたイン
デックス名に置換する
5.
PRIMARY KEY 制 約 の 削 除 が 完 了 し た ら 、 も う 一 度 、 CREATE
CLUSTERED
COLUMNSTORE INDEX ステートメントを実行して、クラスター化列ストア インデックス
を作成します。
32
SQL Server 2014 自習書 No.1 新機能ダイジェスト
CREATE CLUSTERED COLUMNSTORE INDEX cidx1
ON t 1
今度は、作成が完了することを確認できます。
6.
次に、同じ SELECT ステートメントを実行して、実行時間を調べてみましょう。
SELECT b, MAX(a) FROM t 1
GROUP BY b
1
実行時間を
確認する
経過時間が桁違いに小さくなっていることを確認できると思います(弊社環境では、非クラ ス
ター化列ストア インデックスのときとほぼ同じ速度で実行できることを確認してい ます。 非
クラスター化インデックスのときと比べると、約 26.5 倍 速く実行)
。
7.
次に、SELECT ステートメントを選択して、ツールバーの[推定実行プラン]ボタン をクリ ッ
クし、実行プランも確認しておきましょう。
1
Clustered(クラスター化)の
Columnstore インデックス スキャン
Columnstore インデックス スキャン(Clustered)と表示されて、クラスター化 列スト ア
インデックスのスキャンで実行されていることを確認できると思います。
8.
次に、テーブル サイズとインデックス サイズも確認しておきましょう。
33
SQL Server 2014 自習書 No.1 新機能ダイジェスト
2
1
データ領域(テーブル サイズ)が約 37MB、インデックス領域(インデックス サイズ)が
0MB になっていることを確認できます(非クラスター化列ストア インデックスでは、データ
領域 が約 4GB、インデックス領域 が約 52MB でした)
。
ここまでの結果をまとめると、次のようになります。
39.5倍
テストに利用したハードウェア環境
・Core i7 3770K 3.5GHz
・メモリ 32GB
・SSD Plextor M3P 256GB
26.5倍
性能結果は相対値
ベンチマーク結果の公開は、使用許諾契約書
で禁じられているので、グラフ内の結果は、
クラスター化列ストア インデックスの値を
100 とした場合の相対値で表しています。
FullScan は Clustered Index Scan が実行されたとき、IndexScan は非クラスター化イ
ンデックスを作成/利用したとき、ColumnStore NonClustered は非クラスター化列スト
ア インデックスを作成/利用したとき、ColumnStore Clustered はクラスター化列ストア
インデックスを作成/利用したときの実行速度です(相対値)
。
非クラスター化列ストア インデックスとクラスター化列ストア インデックスでは、速度差は
ほとんどないことを確認できると思います。また、クラスター化列ストア インデックスを利
用することで、フル スキャンに比べて 39.5 倍、インデックス スキャンに比べて 26.5 倍も
の性能向上を確認できます。このように、集計処理に強いのが列ストア インデックスです。
34
SQL Server 2014 自習書 No.1 新機能ダイジェスト
テーブルおよびインデックス サイズをまとめると、次のようになります。
クラスター化列ストア インデッ
クスは、ディスク領域を削減で
きるメリットも有る
通常テーブルでは、約 4GB 分のテーブル領域を利用しているのに対して、クラスタ ー化列 ス
トア インデックスでは、テーブル データそのものが列ストア インデックスになるので、 わ
ずか 37MB のサイズに小さくすることができています。ただし、今回は、c および d 列に
は、まったく同じデータ(dummy1)を格納しているので、圧縮率が極端に高くな ってい る
ことを差し引く必要があることにも注意してください。
弊社のお客様のデータ(100 億件の DWH)で、クラスター化列ストア インデックスを作成
した場合は、次のような圧縮効果を確認することができました。
約 1/6
に圧縮
通常テーブルが 531GB であるところを、90GB へと、約 1/6 のサイズにすることができ
ました。このように、クラスター化列ストア インデックスは、ディスク領域を削減で きるメ リ
ットもあります。また、ディスクから読み取るサイズが小さくなる分、性能向上にも 貢献し ま
す(圧縮および解凍に伴う CPU パワーとのトレードオフも存在します)
。
9.
次に、SET STATISTICS TIME コマンドを OFF へ設定して、実行時間の記録を停 止して お
きます。
SET STATISTICS TIME OFF
35
SQL Server 2014 自習書 No.1 新機能ダイジェスト
3.3
クラスター化列ストア インデックスに対するデータの更新
次に、クラスター化列ストア インデックスに対して、データの更新を行ってみましょう。
1.
まずは、UPDATE ステートメントを実行して、データが更新できることを確認してみます。
UPDATE t 1
SET c = 999
WHERE a = 1
このように、クラスター化列ストア インデックスでは、データを更新することができます。
2.
次に、SELECT ステートメントを実行して、正しくデータが更新されたことを確認し ておき ま
しょう。
SELECT * FROM t 1 WHERE a = 1
10 万件のデータの INSERT
1.
次に、10 万件のデータを INSERT してみましょう(このスクリプトを実行する前に、S ET
STATISTICS TIME を OFF に設定しておいてください。ON のままだと、10 万件分の結
果メッセージが出力されることになり、実行時間が長くなってしまうためです)
。
SET NOCOUNT ON
DECLARE @i int = 1
WHILE @i <= 100000
BEGIN
INSERT INTO t 1 (b) VALUES(8888)
SET @i += 1
END
SET NOCOUNT OFF
36
SQL Server 2014 自習書 No.1 新機能ダイジェスト
何の問題もなく、データの INSERT が完了したことを確認できると思います。
2.
次に、SET STATISTICS TIME ON を実行して、前の Step と同じ SELECT ステートメン
ト(GROUP BY 演算)の実行時間を計測してみます。
SET STATISTICS TIME ON
SELECT b, MAX(a) FROM t 1
GROUP BY b
1
実行時間を
確認する
10 万件追加しただけにも関わらず、
実行時間が長くなっていること(弊社環境では 3 倍以上)
を確認できると思います。
これは、クラスター化列ストア インデックスでは、更新されたデータは、
「Delta ストア」と
呼ばれる、更新データの格納用の領域に格納されているためです。
カラム(Column)ストア
a
b
c
Delta ストア(Row ストア)
更新されたデータを
格納する領域
a
b
列単位で格納
インデックスの再構築に
よってカラム ストアへ移動
c
行単位で格納
…
37
SQL Server 2014 自習書 No.1 新機能ダイジェスト
クラスター化列ストア インデックスでは、カラム(列)単位でデータを格納してい るカラ ム
ストア領域と、更新データのための Delta ストア(差分領域)があり、Delta ストアにデータ
がある場合は、読み取り時のオーバーヘッドが発生します。これを回避するには、イ ンデッ ク
スを再構築するようにします。再構築を行うことで、Delta ストア内の差分データをカラムス
トアへ移動させることができるからです。
クラスター化列ストア インデックスの再構築(REBUILD)
それでは、インデックスを再構築してみましょう。
1.
クラスター化列ストア インデックスの再構築は、通常のインデックスを再構築するのと 同様 、
ALTER INDEX ステートメントを利用して、次のように実行します。
ALTER INDEX cidx1
ON t 1 REBUILD
2.
再構築が完了したら、もう一度 SELECT ステートメントを実行してみましょう。
SELECT b, MAX(a) FROM t 1
GROUP BY b
1
実行時間を
確認する
今度は、1,000 万件のときとほとんど同じスピードで検索できたことを確認できると思いま す。
このように、クラスター化列ストア インデックスでは、データの更新を行うことが できま す
が、より良いパフォーマンスを保つには、定期的にインデックスを再構築することが 重要に な
ります。
38
SQL Server 2014 自習書 No.1 新機能ダイジェスト
3.4
COLUMNSTORE_ARCHIVE(列ストア アーカイブ)
クラスター化列ストア インデックスでは、さらに圧縮率を高めた、
「COLUMNSTORE_ARCHI V E 」
(列ストア アーカイブ)というモードもあります。
カラム(Column)ストア
a
b
Columnstore Archive
c
a
b
c
さらに圧縮
さらに圧縮をすることで、ディスク使用領域をより小さくできることがメリットです(圧縮率 を高
くする分、さらに CPU パワーを余分に使うことになるので、それとのトレードオフになり ます )。
データ パーティションを利用して、複数のパーティションを作成している場合は、特定のパー ティ
ションのみを COLUMNSTORE_ARCHIVE へ設定することもできるので、アクセスさ れる 頻度
の低いパーティションのみを COLUMNSTORE_ARCHIVE へ設定するという使い方もでき ます 。
Let's Try
それでは、これも試してみましょう。
1.
COLUMNSTORE_ARCHIVE は 、 次 の よ う に
ALTER INDEX ス テ ー ト メ ン ト で の
REBUILD 時に DATA_COMPRESSION で指定することができます。
ALTER INDEX cidx1
ON t 1 REBUILD
WITH (D A TA_COMPRESSION = C O LUMNSTORE_ARCHIVE)
2.
作成が完了したら、同じ SELECT ステートメントを実行して、実行時間を調べてみま しょう 。
SELECT b, MAX(a) FROM t 1
GROUP BY b
39
SQL Server 2014 自習書 No.1 新機能ダイジェスト
1
実行時間を
確認する
今回は、データ量が 1,010 万件と少ないので、大きな実行時間の差がでないことを 確認で き
ると思います(CPU のクロック数が低い場合には、差が大きくなります)。
3.
次に、テーブル サイズも確認しておきましょう。
1
2
圧縮の種類が ColumnStoreArchive と表示されて、データ領域(テーブル サイズ)は約
15.4MB であることを確認できます(クラスター化列ストア インデックスの場合は 約
37MB でした)
。
弊社のお客様のデータ(前述の 100 億件の DWH)で、COLUMNSTORE_ARCHIVE を設
定した場合は、次のような圧縮効果を確認することができました。
約 1/8
に圧縮
27.7%
圧縮
約 1/6
に圧縮
通常テーブルが 531GB であるところを、65GB へと、約 1/8 のサイズにすることができ
40
SQL Server 2014 自習書 No.1 新機能ダイジェスト
ました。クラスター化列ストア インデックスの 90GB と比べても、27.7% も圧縮すること
ができています。
このように、さらに圧縮率を高めることができるのが、COLUMNSTORE_ARCHIVE のメリ
ットです(圧縮率を高くする分、CPU パワーを余計に利用することになるので、それ とのト レ
ードオフになります)
。
4.
最後に、SET STATISTICS TIME コマンドを OFF へ設定して、実行時間の記録を停止し て
おきます。
SET STATISTICS TIME OFF
もとに戻す(COLUMNSTORE)
1.
COLUMNSTORE_ARCHIVE へ設定したテーブル(やパーティション)をもとに戻す(通 常
の列ストアに 戻す ) に は 、 次の よ う に
ALTER INDEX ステートメント を 実 行 し ま す
(DATA_COMPRESSION で COLUMNSTORE を指定します)
。
ALTER INDEX cidx1
ON t 1 REBUILD
WITH (DATA_COMPRESSION = COLUMNSTORE)
クラスター化列ストア インデックスのまとめ
以上のように、クラスター化列ストア インデックスは、大きな性能向上およびディスク領域の 削減
を期待できる、大変便利な機能です。圧縮/解凍に伴う CPU パワーとのトレードオフや、更新時
のデータを格納するための Delta ストアを利用することによるオーバーヘッドなどがありま すが 、
インデックスを定期的に再構築するなど、うまく活用することで、大きな性能向上を実現する こと
ができます。
41
SQL Server 2014 自習書 No.1 新機能ダイジェスト
STEP 4. SQL Server 2014
の主な新機能
この STEP では、
「バッファ プール拡張」や「Power View 機能の強化」
、「ク
ラウド対応機能」、「AlwaysOn の強化」、「SELECT INTO のパラレル処理」、
「Power Query for Excel」など、SQL Server 2014 で提供された主な新機能
の概要を説明します。
この STEP では、次のことを学習します。

バッファ プール拡張(SSD をバッファ プールとして利用可能に)

Power View(パワー ビュー)機能の強化

クラウド対応(Microsoft Azure との連携)

SQL Server AlwaysOn のパワーアップ

クエリ処理エンジンの進化(SELECT INTO のパラレル処理など)

Power Query for Excel、Power Map for Excel

インデックスの再構築時の優先度の変更
42
SQL Server 2014 自習書 No.1 新機能ダイジェスト
4.1
バッファ プール拡張(SSD をバッファ プールとして利用可能に)
SQL Server 2014 では、
「バッファ プール拡張」
(Buffer Pool Extension)機能が提供されて、
より高速なストレージである SSD(Solid State Drive)やフラッシュ メモリ型の半導体ストレー
ジ(Fusion-io ioDrive2 など)をバッファ プールの一部として利用できるようになりました 。こ
れは、搭載している物理メモリが足りない場合(バッファ プールが足りない場合)かつ HDD(ハ
ード ディスク)などの低速なストレージを利用している場合に役立ちます。
もし、物理メモリが十分に足りている場合は、次のように 2 回目以降のアクセスでは、メモリ(バ
ッファ プール)からデータを取得できるので、HDD(低速なストレージ)からデータを取り 出す
必要はありません。
メモリが十分に足りている場合は、バッファ プール内にテーブル全体が載る
メモリ
ディスク(HDD)
Logical Read
論理読み取り
バッファ プール
テーブル
1回目の検索要求
2回目の検索要求
2
1
3
ディスクからの
読み取り
先行読み取り
2回目以降の読み取りは
HDD からは読み取りが発生
せず、バッファ プールから
取得するので速い
これに対して、物理メモリ(バッファ プール)が足りていない場合には、次のように HDD から
毎回データを取り出さなければなりません。
メモリが足りていない場合は、毎回 HDD からの読み取りが発生する
ディスク(HDD)
1回目の検索要求
メモリ
2回目の検索要求
バッファ プール
テーブル
1
3
2
4
バッファ プール内にはデー
タが全て載っていないので、
2回目以降の読み取り時にも
HDD からの読み取りが発生
するので低速
バッファ プールに
載りきらないので
入れ替えが発生する
もし、物理メモリが 32GB の場合に、テーブル サイズが 100GB だとすると、テーブルに対す
る全スキャンが発生したときにメモリには載りきりません。HDD の読み取り速度(実測)が
100MB/sec だったとすると、100GB を取り出すには、単純計算だと 1,000 秒(16 分 40 秒)
もの時間が(毎回)かかることになってしまいます。
このように、物理メモリが足りない場合(バッファ プールが足りない場合)かつ HDD 環境(低速
なストレージ)を利用している場合に役立つのが、
「バッファ プール拡張」機能です。バッファ プ
ール拡張を利用すれば、次のように、より高速なストレージをバッファ プールの一部として利用で
43
SQL Server 2014 自習書 No.1 新機能ダイジェスト
きるようになります。
バッファ プール拡張でバッファ プールを大きく見せかけることができる
ディスク(HDD)
1回目の検索要求
メモリ
2回目の検索要求
テーブル
バッファ プール
3
1
5
2
4
高速ストレージ
バッファ プール拡張
6
バッファ プールに
載りきらないものを
拡張領域へ格納
2回目以降の読み取り時にはバッファ
プールまたはバッファ プール拡張領
域からの読み取りだけで済むので、
HDD からの読み取りは発生しない
メモリ内のバッファ プールと、バッファ プール拡張領域
で 1つのバッファ プールのように振る舞える
本自習書内では、500 万件のデータをテーブル スキャンする場合の性能比較を行っています が、
弊社環境では、以下のような性能差を確認することができています。
46.7% 向上
約2倍の性能向上
テストに利用したハードウェア環境
・Core i7 3770K 3.5GHz
・メモリ 32GB
・HDD:WD30EZRX 3TB
・SSD :PLEXTOR M3P 256GB
性能結果は相対値
ベンチマーク結果の公開は、使用許諾契約
書で禁じられているので、グラフ内の結果
は、相対値で表しています。
もちろん、この機能は、利用している HDD や、HDD の RAID 構成、SSD やフラッシュ型ドラ
イブの種類など、ストレージの性能に非常に大きな影響を受けるので、sqlio ツールなどを利用し
て、各ストレージの I/O 性能をチェックしておくことも重要です。
バッファ プール拡張は、次のように ALTER SERVER CONFIGURATION ステートメントを利
用して、簡単に設定することができます。
ALTER SERVER CONFIGURATION
SET BUFFER POOL EXTENSION
ON (FILENAME = 'G:\SSD\SSD.BPE', SIZE = 30GB)
FILENAME で指定するドライブは、SSD やフラッシュ型半導体ストレージなどの高速 なス トレ
ージを指定するようにして、SIZE で拡張したいサイズを指定します。
44
SQL Server 2014 自習書 No.1 新機能ダイジェスト
バッファ プール拡張を試してみよう
それでは、バッファ プール拡張を試してみましょう。以降の手順では、HDD(D:ドライブ)と SSD
(C:ドライブ)を例に説明しますが、SSD が用意できない環境の場合は、USB HDD や、USB メ
モリなどを利用して(内蔵 HDD よりも低速なストレージ)を利用して、バッファ プール拡張の
効果を試すことができます。
1.
まずは、データベースを「BPEtestDB」という名前で作成しますが、作成先となる ファイ ル
パス(D:\BPEtestDB フォルダー)は、HDD など低速なストレージを選択するよ うにし て
ください。
CREATE DATABASE BPEtestDB
ON PRIMARY ( NAME = BPEtestDB_data,
FILENAME = 'D:\BPEtestDB\BPEtestDB_data.mdf',
SIZE = 3072MB )
LOG ON
( NAME = BPEtestDB_log,
FILENAME = 'D:\BPEtestDB\BPEtestDB_log.ldf',
SIZE = 3072MB )
2.
次に、クラスター化列ストア インデックスで利用した CSItestDB データベース内の t1 テ
ーブルから、500 万件分のデータをコピーします(SELECT INTO でコピーします)
。
USE BPEtestDB
SELECT TOP 5000000 * INTO t 1 FROM CSItestDB..t1
3.
コピーが完了したら、テーブル サイズを確認します。
45
SQL Server 2014 自習書 No.1 新機能ダイジェスト
2
3
1
テーブルのプロパティの[ストレージ]ページで、
[データ領域]が約 2GB であることを確
認できます。
4.
次に、COUNT(*) を実行して、500 万件のデータであることを確認します。
SELECT COUNT(*) FROM t 1
5.
続いて、COUNT(*) のステートメントを選択して、実行プランを確認します。
1
Table Scan
Table Scan が選択されていることを確認できます。テーブル サイズは、約 2GB でしたの
で、Table Scan が発生する場合は、約 2GB 分のデータの読み取りが発生すること になり ま
46
SQL Server 2014 自習書 No.1 新機能ダイジェスト
す。
6.
次に、dm_os_buffer_descriptors 動的管理ビューを利用して、バッファ プールの中身を
参照します(バッファ プール内のページごとに結果が出力されます)
。
SELECT * FROM sys.dm_os_buffer_descriptors
一番右側の is_in_bpool_extentions 列には NULL が設定されていますが、現在は 、バ ッ
ファ プール拡張を設定していないので、この場合はすべてのページが NULL に設定されま
す(バッファ プール拡張を設定後は、拡張領域を利用しているページに 1 がセットされるよ
うになります)
。
7.
次に、database_id および is_in_bpool_extension ごとに GROUP BY 演算を行って、
データベースごとのバッファ プールの使用量を確認します。
SELECT DB_NAME(database_id), is_in_bpool_extension
,COUNT(*) As 使用ページ数
,COUNT(*) * 8.0 / 1024 As 使用サイズ_MB
FROM sys.dm_os_buffer_descriptors
GROUP BY database_id, is_in_bpool_extension
ORDER BY 使用ページ数 DESC
「BPEtestDB」データベースが約 2GB 使用していて、t1 テーブル(500 万件分)が丸ごと
47
SQL Server 2014 自習書 No.1 新機能ダイジェスト
バッファ プール内に存在していることを確認できます(なお、搭載メモリが小さい場 合には 、
2GB 分のテーブルが載りきらないので、使用サイズが 2GB よりも小さくなります)
。
8.
次に、SQL Server の Max Server Memory を 1GB(1024MB)に制限して、t1 テーブ
ル(2GB)が載りきらない状況をシミュレートします。
EXEC sp_configure 's h ow a dvanced o ptions', 1
RECONFIGURE
EXEC sp_configure 'm a x s erver m emory', 1 0 24
RECONFIGURE
9.
設定後、DBCC DROPCLEANBUFFERS コマンドを実行して、バッファ プールをクリアし
ます。
DBCC DROPCLEANBUFFERS
10. 次に、SET STATISTICS コマンドを実行して、実行時間と I/O 数(読み取りページ数)を
記録するようにします。
SET STATISTICS TIME ON
SET STATISTICS IO ON
11. 設定後、先ほどと同じ COUNT(*) の SELECT ステートメントを実行して、実行時 間や読 み
取りページ数を調べます。
SELECT COUNT(*) FROM t 1
48
SQL Server 2014 自習書 No.1 新機能ダイジェスト
2
1
3
論理読み取り数を
確認する
先行読み取り数を
確認する
実行時間を
確認する
実行が完了したら、実行時間をメモしておいてください。論理読み取り数が 263,161 ページ
(約 2GB)で、Table Scan によって 2GB 分の読み取りが発生していることを確認でき ます 。
また、先行読み取り数も 約 2GB になっていて、HDD からデータを読み取っていることを 確
認できます。
HDD の読み取り速度が 100MB/sec だとすると、2GB のデータを読み取るには約 20 秒
の実行時間がかかることになります。
メモリが足りていない場合は、何度実行しても、HDD からの読み取りが発生するので、も う
一度同じステートメントを実行して、同じくらいの実行時間がかかることも確認して おいて く
ださい。HDD からの読み取りが発生していることは、先行読み取り数がカウントさ れるこ と
でも確認することができます。
12. 次に、dm_os_buffer_descriptors 動的管理ビューを参照して、データベースごと のメ モ
リ使用量を確認します。
SELECT DB_NAME (b.database_id), is_in_bpool_extension
,COUNT(*) As 使用ページ数
,COUNT(*) * 8.0 / 1024 As 使用サイズ_MB
FROM sys.dm_os_buffer_descriptors b
GROUP BY b.database_id, is_in_bpool_extension
ORDER BY 使用ページ数 DESC
「BPEtestDB」データベースは、約 800MB しか使用しておらず、t1 テーブルを丸ごとバ
ッファ プール内には載せられなかったことを確認できます。
49
SQL Server 2014 自習書 No.1 新機能ダイジェスト
バッファ プール拡張の設定
次に、バッファ プール拡張を設定します。
1.
バッファ プール拡張を設定するには、次のように ALTER SERVER CONFIGURATION ス
テートメントを実行します。バッファ プール拡張の作成先となるファイル パス(C:\SSD フ
ォルダー)は、SSD などの高速なストレージを選択するようにしてください。
ALTER SERVER CONFIGURATION
SET BUFFER POOL EXTENSION
ON (FILENAME = 'C:\SSD\SSD.BPE', SIZE = 10GB)
2.
設定後、SQL Server サービスを再起動します。
2
1
3.
再起動が完了したら、SET STATISTICS コマンドを再度実行します。
SET STATISTICS TIME ON
SET STATISTICS IO ON
4.
設定後、先ほどと同じ COUNT(*) の SELECT ステートメントを実行して、実行時 間や読 み
取りページ数を調べます。
50
SQL Server 2014 自習書 No.1 新機能ダイジェスト
SELECT COUNT(*) FROM t 1
2
1
3
論理読み取り数を
確認する
先行読み取り数を
確認する
実行時間を
確認する
1 回目の実行は、SSD(拡張領域)への書き込みが発生するため、バッファ プール拡張を設定
する前よりも実行速度が落ちます。
2 回、3 回と実行していくと、先行読み取り数のページ数が少なくなっていき、次の ように 、
先行読み取り数が 0 になることを確認します。
2
1
先行読み取り数が
0 になる
実行時間を
確認する
先行読み取り数が 0 になって、論理読み取り数のみがカウントされる場合は、すべ てのデ ー
タをバッファ プールから取得していることになるので、バッファ プール拡張が最大限に活か
されている状態になります。この状態では、弊社環境では、次のように 46.7%(約 2 倍)の
性能向上を確認できています(実行時間はバッファ プール拡張なしの場合を 100 とした場
合の相対値)
。
46.7% 向上
約2倍の性能向上
テストに利用したハードウェア環境
・Core i7 3770K 3.5GHz
・メモリ 32GB
・HDD:WD30EZRX 3TB
・SSD :PLEXTOR M3P 256GB
性能結果は相対値
ベンチマーク結果の公開は、使用許諾契約
書で禁じられているので、グラフ内の結果
は、相対値で表しています。
5.
次に、dm_os_buffer_descriptors 動的管理ビューを利用して、バッファ プールの中身を
参照します。
51
SQL Server 2014 自習書 No.1 新機能ダイジェスト
SELECT * FROM sys.dm_os_buffer_descriptors
is_in_bpool_extentions 列には 1 や 0 が設定されていることを確認できると思い ます 。
バッファ プール拡張を設定していると、拡張領域を利用しているページに 1 がセットされま
るようになります。
6.
次に、データベースごとのバッファ プール使用量を確認します。
SELECT DB_NAME (b.database_id), is_in_bpool_extension
,COUNT(*) As 使用ページ数
,COUNT(*) * 8.0 / 1024 As 使用サイズ_MB
FROM sys.dm_os_buffer_descriptors b
GROUP BY b.database_id, is_in_bpool_extension
ORDER BY 使用ページ数 DESC
「BPEtestDB」データベースが約 2GB を使用していて、t1 テーブルのデータを丸ごとバッ
ファ プール内に載せることができていることを確認できます。
52
SQL Server 2014 自習書 No.1 新機能ダイジェスト
設定を元に戻す
1.
最後に、設定を元に戻しておきましょう。バッファ プール拡張を元に戻すには、次 のよう に
ALTER SERVER CONFIGURATION ステートメントを実行します。また、Max Server
Memory の設定も元に戻しておきましょう。
ALTER SERVER CONFIGURATION
SET BUFFER POOL EXTENSION OFF
EXEC sp_configure 'm a x s erver m emory', 2147483647
RECONFIGURE
バッファ プール拡張のまとめ
以上のように、バッファ プール拡張機能は、性能向上を期待できる大変便利な機能です。この 機能
は、利用している HDD や、HDD の RAID 構成、SSD やフラッシュ型ドライブの種類な ど、ス
トレージの性能に非常に大きな影響を受けるので、sqlio ツールなどを利用して、各ストレー ジの
I/O 性能をチェックしておくことも重要になります。
53
SQL Server 2014 自習書 No.1 新機能ダイジェスト
4.2
Power View(パワー ビュー)機能の強化
SQL Server 2014 では、Power View(パワー ビュー)機能が強化されて、Analysis Services
の多次元モデル(Multidimensional Model)から Power View のレポートが作成できるようにな
りました(この機能は、SQL Server 2012 でも、SP1 の CU4 を適用することで利用することが
できます)
。
Analysis Services の
多次元モデル(キューブ)から
Power View のレポートを作成
Analysis Services の
多次元モデル(キューブ)
以下は、レポートの元となっている Analysis Services 多次元モデル
54
SQL Server 2014 自習書 No.1 新機能ダイジェスト
設定手順
Analysis Services の多次元モデルから Power View レポートを作成できるようにするには 、通
常と同じように Power View 環境をセットアップした後、SharePoint サイトで、以下のように設
定します。
1.
まずは、SharePoint サイト上で、任意のドキュメント ライブラリを開いて、
[ライ ブラリ ]
タブの[ライブラリの設定]をクリックします。
1
2
2.
ライブラリの設定ページが表示されたら、
[詳細設定]をクリックします。
1
3.
[詳細設定]ページが表示されたら、
[コンテンツ タイプの管理を許可する]で[はい ]を 選
択します。
1
[はい]を選択した後、ページを下へスクロールして、一番下にある[OK]ボタンを クリッ ク
55
SQL Server 2014 自習書 No.1 新機能ダイジェスト
します。これでコンテンツの種類を追加できるようになります。
4.
ライブラリの設定ページへ戻ったら、
[コンテンツ タイプ]セクションが表示されるように な
っているので、ここで[既存のサイト コンテンツ タイプから追加]をクリックします。
1
5.
[コンテンツ タイプの追加]ページが表示されたら、次のように[利用可能なサイト コンテ
ンツ タイプ]で「レポート データ ソース」を選択して、
[追加]ボタンをクリックし ます 。
2
1
3
「 レ ポ ー ト デ ー タ ソ ー ス 」 を 追 加 す る こ と で 、 Analysis Services の 多 次 元 モ デ ル
(Multidimensional Model)から Power View レポートを作成できるようになります 。
Analysis Services のテーブル モデル(Tabular Model)から Power View レポートを作成
する場合には、
「BI Semantic Model 接続」を追加していました。
以上で、ライブラリの設定が完了です。
6.
次に、ドキュメント ライブラリへ戻って、
[ファイル]タブで[新しいドキュメント ]メニ ュ
ーを開き、
[レポート データ ソース]をクリックします。
56
SQL Server 2014 自習書 No.1 新機能ダイジェスト
1
2
3
7.
[データ ソースのプロパティ]ページが表示されたら、次のように[名前]へ任意の ファイ ル
名(mdtest など)
、
[データ ソースの種類]で「Microsoft BI Semantic Model for Power
View」を選択します。
1
2
3
4
5
[接続文字列]へは、Analysis Services 多次元モデルへの接続情報を次のように記述 します 。
D a ta S ource=サーバー名;Initial C atalog='データベース名';Cube='キューブ名'
Data Source へ Analysis Services のサーバー名、Initial Catalog へ多次元モデルのデー
タベース名、Cube へキューブ名を記述します。記述後、
[接続テスト]ボタンをク リック し
て、接続が成功したことを確認したら、[OK ]ボタンをクリックします。
57
SQL Server 2014 自習書 No.1 新機能ダイジェスト
これで、多次元モデルを利用した Power View レポートを作成できるようになります。
8.
ドキュメント ライブラリへ戻ったら、作成したデータ ソース ファイル(mdtest)の[.. . ]
ボタンをクリックして、
「Power View レポートの作成」をクリックします。
1
2
3
これで、Power View レポートの編集ページが表示されて、任意の Power View レポートを
作成できるようになります。
従来までは、PowerPivot ファイルや、Analysis Services のテーブル モデル(Tabular Model)
からしか Power View レポートを作成することができませんでしたが、SQL Server 2014
(または SQL Server 2012 CP1 CU4 以降)からは、Analysis Services の多次元モデルか
らも作成できるようになりました。
58
SQL Server 2014 自習書 No.1 新機能ダイジェスト
4.3
クラウド対応(Microsoft Azure 連携)
SQL Server 2014 では、クラウド対応(Microsoft Azure 連携)機能も充実しています。そ の主
なものは、次のとおりです。

Microsoft Azure 上へのバックアップが可能に(SQL Server 2012 SP1 CU2 からサ
ポート)
。バックアップ ファイルの暗号化も可能

Microsoft Azure 上へのバックアップを支援するツールの提供

データベース ファイル(.mdf)を Microsoft Azure 上に配置可能に

Microsoft Azure 上の仮想マシン(VM)へのデータベースの配置(Deploy)

AlwaysOn 可用性グループのセカンダリを Microsoft Azure 上へ作成するためのウィ
ザードの提供
Microsoft Azure(BLOB ストレージ)上へのバックアップ
SQL Server 2014 からは、Microsoft Azure 上の BLOB ストレージへバックアップを実行 でき
るようになりました(この機能は、SQL Server 2012 でも、SP1 の CU2 を適用することで利用
することができます)
。
これは、次のように利用することができます。
C R EATE C REDENTIAL 資格情報名
WITH I D ENTITY = 'ストレージ アカウント名',
S E CRET = 'ストレージ アカウントのアクセス キー'
BACKUP DATABASE sampleDB
TO U R L = 'https://ストレージ アカウント名.blob.core.windows.net/コンテナー名/~.bak'
WITH C R EDENTIAL = '資格情報名', COMPRESSION
Microsoft Azure 上のストレージ アカウントの名前やアクセス キーを利用して、CREAT E
CREDENTIAL で資格情報を作成し、BACKUP ステートメントの CREDENTIAL 句でこの資格
情報を指定、
URL 句で Microsoft Azure 上の BLOB ストレージのコンテナーを指定すること で、
コンテナー内へバックアップを作成することができます。
Microsoft Azure 上でのストレ ー ジ
アカウントの作 成 は 、Microsoft
Azure 管理ポ ー タ ル
(https://manage.windowsazure.com)を利用して、次のように行うことができます。
59
SQL Server 2014 自習書 No.1 新機能ダイジェスト
1
2
[ストレージ]を選択して、画面左下に表示される[新規]をクリックすることで、新しいス トレ
ージ アカウントを作成することができます。
次のように[新規作成]画面が表示されたら、
[簡易作成]をクリックして、
[URL]にストレ ージ
アカウントの名前(画面は matustorage1)を入力します(利用可能なアカウント名でない 場合
は、赤い警告が表示されるので、重複しないようなアカウント名を入力するようにします)。
1
ストレージ アカウントの
名前(任意)を入力
2
3
4
ストレージ アカウントを
作成する場所を選択
ストレージの冗長化を選択
(価格例を参照)
5
[場所/アフィニティ グループ]でストレージ アカウントを作成するデータ センターの場所、
[レプリケーション]で冗長化の有無(画面はローカル冗長を選択)を選択して、
[ストレージ ア
60
SQL Server 2014 自習書 No.1 新機能ダイジェスト
カウントの作成]ボタンをクリックすれば、ストレージ アカウントの作成が完了です。
ストレージ アカウントの作成後は、コンテナーを作成することで、バックアップ ファイルなどを
配置できるようになります。コンテナーを作成するには、ストレージ アカウントの[→]ボタンを
クリックして、次のように[コンテナー]ページを開き、
[コンテナーを作成する]をクリック しま
す。
1
2
3
4
5
[新しいコンテナー]ダ イア ログ が表 示さ れた ら 、[ 名前] へ任 意の コン テナ ー名 ( 画 面 は
container1)
、
[アクセス]で任意のアクセス レベル(画面は プライベート)を選択して、チェッ
ク ボタンをクリックすれば、コンテナーの作成が完了です。
コンテナーの作成後は、次のように[ダッシュボード]をクリックして、ダッシュボード ページへ
移り、画面下の[アクセス キーの管理]ボタンをクリックします。
1
3
4
2
61
ストレージ
アカウント名
ストレージ アカウント
のアクセス キー
SQL Server 2014 自習書 No.1 新機能ダイジェスト
これにより、ストレージ アカウントのアクセス キーが表示されるので、これをコピーします。
コピーしたアクセス キーは、次のように CREATE CREDENTIAL ステートメントの SECRET
句へ貼り付けます。
CREATE CREDENTIAL cred
WITH IDENTITY = 'ストレージアカウント名',
SECRET = 'コピーしたアクセス キーを貼り付け'
コピーしたアクセス
キーを貼り付け
IDENTITY 句には、ストレージ アカウントの名前、cred には任意の資格情報名を入力 すれば 、
資格情報の作成が完了です。
次に、ダッシュボード ページで、次のようにサービス一覧の[BLOB]に表示される[エンド ポイ
ント]の URL(https://ストレージアカウント名.blob.core.window s.net)をコピー します 。
1
2
コピーした URL は、次のように BACKUP ステートメントの URL 句へ貼り付けて、コンテナー
名(container1 など事前に作成したコンテナー名)とバックアップ ファイル名(~.bak など)
を付加すれば、Microsoft Azure 上へのバックアップが完了です。
BACKUP DATABASE sampleDB
TO URL = 'https://アカウント名.blob.core.windows.net/container1/sampleDB.bak'
WITH CREDENTIAL = 'c r ed',
COMPRESSION, STATS
62
SQL Server 2014 自習書 No.1 新機能ダイジェスト
COMPRESSION と STATS は、必須ではありませんが、COMPRESSION によって圧縮バック
アップを実行することができ、バックアップ ファイルのサイズを小さくすることができます。これ
によって、ファイルの転送量を小さくでき、バックアップ時間を短縮することができるので、
COMPRESSION を付けることをお勧めします。また、STATS を付けることで、進行状況を[メ
ッセージ]タブで確認できるようになるので、こちらも付けることをお勧めします。
バックアップされたファイルは、
[コンテナー]ページから、次のように確認することができま す。
1
2
3
BLOB ストレージ上に
バックアップされたファイル
バックアップ ファイルを暗号化したい場合には、次のようにマスター キーとサーバー証明書を作
成することで、実行することができます。
USE master
-- マスタ キーの作成
CREATE MASTER KEY
ENCRYPTION BY PASSWORD = '強固なパスワードを指定'
go
-- サーバー証明書の作成
CREATE CERTIFICATE MyServerCert
WITH SUBJECT = 'My Certificate'
go
-- バックアップ ファイルの暗号化
BACKUP DATABASE sampleDB
TO URL = 'https://アカウント名.blob.core.windows.net/container1/sampleDB.bak'
63
SQL Server 2014 自習書 No.1 新機能ダイジェスト
WITH CREDENTIAL = 'cred',
COMPRESSION, STATS = 10,
E N CRYPTION
( A L GORITHM = A E S_256,
S E RVER C ERTIFICATE = M y ServerCert )
Microsoft Azure 上にバックアップしたファイルは、もちろんこれをもとに、リストアするこ とも
できます。これは通常通りの RESTORE DATABASE ステートメントで、次のように FROM URL
でストレージ アカウント上のバックアップ ファイルを指定することで行えます。
RESTORE DATABASE sampleDB
FROM URL = 'https://アカウント名.blob.core.windows.net/container1/sampleDB.bak'
WITH CREDENTIAL = 'cred', STATS
Microsoft Azure 上へのバックアップを支援するツールの提供
マイクロソフトでは、
「SQL Server Backup to Microsoft Azure Tool」というツールも提供し
ています。このツールは、SQL Server のデータベースをローカルにバックアップしたもの(. b ak
ファイル)を Microsoft Azure 上の BLOB ストレージへ自動的にバックアップしてくれると いう
ものです。これは、次の URL からダウンロードすることができます。
http://www.microsoft.com/ja-jp/download/details.aspx?id=40740
64
SQL Server 2014 自習書 No.1 新機能ダイジェスト
このツールでは、次のようにバックアップ対象としたいファイルをルールとして設定すること がで
きます(暗号化や圧縮にも対応しています)
。
暗号化と圧縮
にも対応
ローカルの
バックアップ ファイル
をワイルドカード指定
ストレージ アカウント
のアクセス キーと
コンテナーを指定
データベース ファイル(.mdf)を Microsoft Azure 上に配置可能に
SQL Server 2014 では、データベース ファイル(.mdf や .ldf)を、Microsoft Azure 上の BLOB
ストレージへ配置することもできます。これは、次のように CREDENTIAL を作成して、CREAT E
DATABASE でデータベースを作成するときに、ストレージ アカウント(BLOB ストレージ)へ
の URL を記述することで行えます。
Shared Access Signature の
CREDENTIAL(資格情報)を作成
Microsoft Azure 上の BLOB
ストレージのコンテナーを指定し
て、データベースの作成が可能
65
SQL Server 2014 自習書 No.1 新機能ダイジェスト
Microsoft Azure 上の仮想マシン(VM)へのデータベースの配置(Deploy)
SQL Server 2014 では、Microsoft Azure 上の仮想マシン(VM:Virtual Machine)へデータベ
ースを配置(Deploy)できる機能(丸ごと複製/配置できる機能)も提供されています。
これは、次のように配置したいデータベースを右クリックして、
[ タスク]メニューから[Wind ow s
Azure 仮想マシンにデータベースを配置]をクリックすることで行えます。
1
SQL Server へ
の接続
データベースの
選択
証明書の選択
配置で利用する
一時フォルダー
を指定
サインイン
サブスクリプ
ションの選択
66
SQL Server 2014 自習書 No.1 新機能ダイジェスト
既存の仮想マシンを選択する
ことも、新しい仮想マシンを
作成することも可能
Microsoft Azure 上の仮想マシン
とクラウド サービス、ストレージ
アカウントの選択
仮想マシン上の
クラウド アダプターへ
の接続情報の設定
配置先となる
データベース
の名前
Azure VM 上の
SQL Server
データベースが
丸ごと複製されている
Azure VM 上
に配置された
データベース
このように、SQL Server 2014 からは、Microsoft Azure の仮想マシン(VM)上に、データベー
スを配置(丸ごと複製)することも、簡単に行うことができるようになりました。
67
SQL Server 2014 自習書 No.1 新機能ダイジェスト
クラウド DR: 可用性グループのセカンダリを Microsoft Azure 上へ作成
SQL Server 2014 では、AlwaysOn 可用性グループのセカンダリを Microsoft Azure 上へ作成
するためのウィザードも提供されています。これは、次のように[新しい可用性グループ]ウ ィザ
ードの[レプリカの指定]ページで、
[Azure レプリカの追加]ボタンをクリックすることで 行え
ます。
1
2
Azure VM
(仮想マシン)
の設定
以上のように、SQL Server 2014 では、クラウド対応(Microsoft Azure 連携)機能が非常に充
実しています。
68
SQL Server 2014 自習書 No.1 新機能ダイジェスト
4.4
SQL Server AlwaysOn のパワーアップ
SQL Server 2014 からは、SQL Server AlwaysOn がパワーアップして、以下の機能がサポ ート
されるようになりました。

セカンダリを最大 8 台まで作成可能に(SQL Server 2012 では 4 台が上限)

クォーラム損失時にも読み取り可能セカンダリへのアクセスが可能

FCI(フェールオーバー クラスター インスタンス)で CSV(クラスター共有ボ リュー
ム)がサポート
セカンダリを最大 8 台まで作成可能に(SQL Server 2012 では 4 台が上限)
SQL Server 2014 からは、AlwaysOn 可用性グループ(Availability Group)で、セカンダリを
最大 8 台まで作成できるようになりました(SQL Server 2012 では 4 台が上限でした)。以下の
画面は、8 台のセカンダリを作成しているときの様子です。
最大 8台の
セカンダリを作成可能
以下は、8 台のセカンダリで構成した可用性グループを監視しているときの様子
69
SQL Server 2014 自習書 No.1 新機能ダイジェスト
最大 8台の
セカンダリを作成可能
クォーラム損失時にも読み取り可能セカンダリへのアクセスが可能
SQL Server 2014 からは、AlwaysOn 可用性グループで、WSFC(フェールオーバー クラスター)
のクォーラムが損失したときにも、読み取り可能セカンダリへのアクセスができるようになり まし
た。
SQL Server 2012 のときには、クォーラム損失時は、次のようにデータベースへアクセスす るこ
とができませんでした。
SQL Server 2012 ではクォーラムが損失していると、
復旧待ちと表示されて、DB にアクセスできない
SQL Server 2014 からは、クォーラムが損失していても、次のように読み取り可能セカンダ リへ
アクセスできるようになりました。
70
SQL Server 2014 自習書 No.1 新機能ダイジェスト
クォーラムが損失していても
読み取り可能セカンダリへアクセス可能
「同期されていません」と表示される。
DB にアクセス可能
上記は、以下のようにクォーラムが損失している状態です。
クォーラムが損失しているので
クラスターにアクセスできない状態
このように、SQL Server 2014 では、SQL Server AlwaysOn がパワーアップしました。
71
SQL Server 2014 自習書 No.1 新機能ダイジェスト
4.5
クエリ処理エンジンの進化(SELECT INTO のパラレル処理など)
SQL Server 2014 では、クエリ処理エンジン(Query Processing)が拡張されて、次の機能 を利
用できるようになりました。

SELECT INTO のパラレル処理

基数推定の進化(新しいアルゴリズム)

統計の増分更新

リソース ガバナーで I/O 数による制限が可能に
SELECT INTO でのパラレル処理
SQL Server 2014 では、SELECT INTO でパラレル処理ができるようになりました。こ れは 、実
行プランを参照することで確認することができます。たとえば、次のような単純な SELECT INTO
ステートメントを実行したとします。
SELECT * INTO BPEtestDB..t1 FROM t1
実行プランを確認すると、次のようになります(複数コア環境の場合)。
パラレル
Table Insert
パラレル処理のマーク(
)が付いた「Table Insert」を確認できると思います。
なお、SQL Server 2012 までは、実行プランは、次のように表示されます(パラレルではな い)。
72
SQL Server 2014 自習書 No.1 新機能ダイジェスト
Note: データベースの互換性レベルを 120(SQL Server 2014 レベル)へ上げる
SELECT INTO でのパラレル処理は、データベースの互換性レベルが 120(SQL Server 2014 レベル)でないと利用
することができません。データベースの互換性レベルは、次のようにデータベースのプロパティの[オプション]ペー
ジから確認/変更することができます。
2
3
1
弊社事例: SELECT INTO パラレル化の性能効果
弊社のお客様が利用している、実際の日中バッチ処理(総ステップ数が約 20,000 のストアド プ
ロシージャで、ストアド プロシージャ内で SELECT INTO を利用)で、SELECT INTO のパラ
レル化による性能効果を調べたところ、次のような結果を得ることができました。
平均で
18.3% 向上
最大で 36.6% 向上
する処理も有り
73
SQL Server 2014 自習書 No.1 新機能ダイジェスト
最大で 36.6% 向上
する処理も有り
平均で
18.3% 向上
全体(合計実行時間)
としては 20.5% 向上
合計実行時間の差
SQL Server 2012 では、抽出条件1~18 の合計実行時間が 1 時間 19 分 58 秒であったのに対
して、SQL Server 2014 に変更すると 1 時間 3 分 36 秒と、16 分 22 秒(20.5%)もの性能
向上を確認することができました。バッチのソース コードには手を加えておらず、単純に SQL
Server 2014 に置き換えただけで(2012 で利用していたデータベースを 2014 へアタッチして、
互換性レベルを 120 へ変更しただけで)、これだけの効果を得ることができました。最 大で は、
36.6% も向上する処理(抽出条件 15)もあり、SELECT INTO への依存度が大きい処理ほど、大
きな効果を確認できました。
74
SQL Server 2014 自習書 No.1 新機能ダイジェスト
リソース ガバナーで I/O 数による制限
SQL Server 2014 からは、リソース ガバナーで、I/O 数による制限ができるようになり ました 。
これは、リソース プールの作成時に、次のように設定できます。
CREATE RESOURCE POOL testResourcePool
WITH( MIN_CPU_PERCENT = 0,
MAX_CPU_PERCENT = 100,
MIN_MEMORY_PERCENT = 0,
MAX_MEMORY_PERCENT = 100,
M I N_IOPS_PER_VOLUME = 0 ,
M A X_IOPS_PER_VOLUME = 1 0 00,
AFFINITY SCHEDULER = AUTO )
-- I/O 数を 1000に制限
I/O 負 荷 が 高 い 処 理 が 原 因 で 、 シ ス テ ム 全 体 の パ フ ォ ー マ ン ス が 落 ち て い る 場 合 に は 、
MAX_IOPS_PER_VOLUME を設定して、該当処理の I/O 数を制限することで、全体 のス ルー
プットを向上させることができるようになります。
75
SQL Server 2014 自習書 No.1 新機能ダイジェスト
4.6
Power Query for Excel
Power Query for Excel は、Excel 2010/2013 のアドインとして提供されている機能 です
が、SQL Server にも大変役立つ機能なのでここで紹介します。Power Query for Excel を利用す
れば、データベースや Web ページ、Hadoop ファイル(HDFS)など、さまざまなデータソ ース
から簡単にデータを取得および加工処理をすることができます。
Power Query for Excel は、従来の Excel での[データ]タブや、PowerPivot for Excel での
データ取得機能を強力にパワーアップさせたようなもので、上画面のように、より多くのデー タソ
ースからデータを取得できるようになりました。一番左の[オンライン検索]ボタンでは、Wikipe dia
(英語版)などからデータを検索・取得できたり、[Web から]ボタンを利用すれば、Web ペー
ジ内の <Table> タグや、URL アクセス可能なファイル(Excel や CSV、XML、Text など)を
取得することもできます。
また、
[ファイルから]ボタンで OS 上のファイル(フォルダーから を指定すればフォルダー内の
複数のファイルを対象にできる)、
[データベースから]ボタンで SQL Server や Microsoft Azure
SQL データベース、Access、Oracle、DB2、MySQL などの各種データベース、
[その他のソ ース
から]ボタンで Hadoop ファイル(HDFS) や Microsoft Azure HDInsight(Microsoft Azure
の Hadoop 実装)、SAP BusinessObjects BI、SharePoint List、Exchange 、OData Feed 、
Facebook などからデータを取得することも可能です。
Power Query for Excel で取得したデータは、次のように Power Map for Excel 2013 を利
76
SQL Server 2014 自習書 No.1 新機能ダイジェスト
用すれば、地図データの可視化を簡単に行うこともできます(Power Map for Excel 2013 も Excel
2013 のアドインとして提供されています)
。
Power Query for Excel と Power Map for Excel 2013 のダウンロード
Power Query for Excel は、次の URL からダウンロードすることができます。
http://www.microsoft.com/ja-jp/download/details.aspx?id=39379
また、Power Map for Excel 2013(プレビュー版)は、次の URL からダウンロードすること
ができます。
http://www.microsoft.com/en-us/download/details.aspx?id=38395
77
SQL Server 2014 自習書 No.1 新機能ダイジェスト
Let's Try
それでは、Power Query for Excel を試してみましょう。ここでは、Wikipedia にある「都道府
県の人口一覧」
(http://ja.wikipedia.org/wiki/ 都道府県の人口一覧)を取得して、これを Power
Map for Excel で可視化してみましょう。
都道府県別
の人口
1.
まずは、Excel 2013 を起動して、
[Power Query]タブを開きます。
1
2
次に、Web ページからデータを取得するために、[Web から]ボタンをクリックします。
78
SQL Server 2014 自習書 No.1 新機能ダイジェスト
2.
次のように[Web から]ダイアログが表示されたら、以下の URL を入力して、
[OK ]ボタ
ンをクリックします。
http://ja.wikipedia.org/wiki/都道府県の人口一覧
1
2
3.
Web ページへの接続が成功すると、次のように右側にナビゲーター ペインが表示されます。
ナビゲーターが表示
4.
次に、ナビゲーター ペインで[Table_0]をマウス オーバーして、該当 Web ページ内にあ
る最初の <Table> タグの情報がプレビュー表示される(県別の人口が表示される)のを確 認
します。
79
SQL Server 2014 自習書 No.1 新機能ダイジェスト
1
県別の人口が
表示される
2
確認後、
[編集]をクリックすると、次のように[クエリー エディター]が表示されます。
5.
クエリー エディターの先頭の行は、見出しが表示されているので、次のようにグリ ッドの 左
上のセルをクリックして、
[先頭の行を見出しとして使用]をクリックします。
80
SQL Server 2014 自習書 No.1 新機能ダイジェスト
1
一番左上のセル
をクリック
2
6.
また、次の先頭の行には総数が表示されていて、今回はこれを利用しないので、次の ように グ
リッドの左上のセルをクリックして、
[上位の行の削除]をクリックします。
1
一番左上のセル
をクリック
3
2
4
[上位の行の削除]ダイアログが表示されたら、
[行数]で「1」と入力して、
[OK]ボタン を
クリックします。これで、先頭から「1」行分、データを削除することができます。
7.
次に、データを数値型に変換するために、
「2010 年」から「1920 年」までの列を選 択した 状
態で(
「2010 年」の列をマウスでクリックしてから「1920 年」の列を Shift キーを押しな
がらマウスでクリックするとまとめて選択できる)、
[データ型]から「整数」をクリ ックし ま
す。
1
8.
2010年から
1920年までの
列を選択
2
データ型が整数に変わったことを確認したら、次のように[閉じて読み込む]ボタン をクリ ッ
クします。
81
SQL Server 2014 自習書 No.1 新機能ダイジェスト
1
これで、Web ページからデータを取り込むことができ、次のように Excel 上にデータが配置
されます。
クエリを編集したい場
合は、ココをクリック
クエリを編集したい場合は、右側の[ブック クエリ]ペインで「Table 0」ボタンをクリック
すれば、再度[クエリ エディター]を起動することができます。
9.
次に、
[挿入]タブを開いて、[マップ]から[Power Map の起動]をクリックします。
82
SQL Server 2014 自習書 No.1 新機能ダイジェスト
1
2
10. これにより、Power Map for Excel が起動して、都道府県ごとに青い四角のアイコ ンが追 加
された地図が表示されるので、次のように[次へ]をクリックします。
1
11. 次に、
[2010 年]をチェックすると、棒グラフに変わって、2010 年の人口データをも とに 、
棒グラフの長さが変わることが確認できます。
1
高さに 2010年が追加さ
れる
83
SQL Server 2014 自習書 No.1 新機能ダイジェスト
また、右下の「<」や「>」ボタンを利用して、角度の調整をすることができます。
マウスのドラッグ
&ドロップで表示
場所の移動
凡例の移動
拡大・縮小
角度の調整が
できる
マウスをオーバーするとポッ
プアップで情報が表示される
表示の拡大と
縮小
12. 次に、
[1920 年]をチェックして、次のように[集合縦棒]アイコンをチェックします。
1
1
[集合縦棒]アイコ
ンをクリック
高さ に 1920年が追加さ
れる
これで、1920 年と 2010 年の人口を比較した棒グラフを作成することができます。
13. そのほか、
[テーマ]でスタイルを変更したり、
[図形]でグラフの図形を変更したり するこ と
もできます。
84
SQL Server 2014 自習書 No.1 新機能ダイジェスト
「四角」を「丸」に変更
したりできる
テーマの変更
[集合縦棒]
(棒グラフ)
、
[積上縦棒]、
[バブル]
(円グラフ)
、
[ヒート マップ]
、
[地域]など
を選択して、グラフの種類を変更することもできます。
「バブル」(円)
「積上縦棒」
「ヒートマップ」
「集合縦棒」
「地域」
[バブル]
(円グラフ)を選択した場合
85
SQL Server 2014 自習書 No.1 新機能ダイジェスト
[ヒート マップ]を選択した場合
このように、Power Query for Excel を利用すれば、いろいろなデータソースから簡 単にデ ー
タを取得および加工することができ、Power Map for Excel を利用すれば、地図データを簡
単に可視化することができるようになります。
86
SQL Server 2014 自習書 No.1 新機能ダイジェスト
4.7
インデックス再構築時のロックの優先度変更
SQL Server 2014 では、オンライン インデックスの再構築時や、パーティション スイッチ時に
ロックの優先度を変更できるようになりました。
これは、次のように利用することができます(オンライン インデックス再構築時の場合)
。
ALTER INDEX pk_index
ON t1
REBUILD
WITH ( ONLINE = ON
( W A IT_AT_LOW_PRIORITY
( M A X_DURATION = 10 minutes,
A B ORT_AFTER_WAIT = SELF ) ) )
87
SQL Server 2014 自習書 No.1 新機能ダイジェスト
おわりに
最後まで試された皆さん、いかがでしたでしょうか? SQL Server 2014 には、たくさんの新機能
が追加されていることを確認できたのではないでしょうか。インメモリ OLTP や、クラスター化列
ストア インデックス(更新可能な列ストア インデックス)
、バッファ プール拡張、SELECT INTO
のパラレル処理など、大きな性能向上を期待できるものが多数あります。
実際、弊社でも、お客様環境で利用できる/利用できた機能がたくさんあり、既に大幅な性能 向上
を確認しているものが多数あります(現在進行中のお客様でも、DWH 環境の案件なのですがクラ
スター化列ストア インデックスへ変更することで大幅に性能向上できることを確認していま す)。
皆さんも、ぜひ検証してみていただければと思います(クラスター化列ストア インデックスのスゴ
さにびっくりすると思います)
。
お勧めドキュメント
SQL Server 2014 に関するその他の情報については、弊社が執筆した以下のドキュメントが お勧
めになっています。こちらもぜひご覧いただければと思います。
SQL Server 2014 自習書シリーズ
No.2 インメモリ OLTP の概要
https://www.microsoft.com/ja-jp/sqlserver/2014/technology/self-learning.aspx
SQL Server 2014 実践シリーズ
No.1 インメモリ OLTP の実践的な利用方法
https://www.microsoft.com /ja-jp/sqlserver/2014/technology/self-learning.aspx#practical_contents
No.2 SQL Server 2014 への移行とアップロードの実践
https://www.microsoft.com /ja-jp/sqlserver/2014/technology/self-learning.aspx#practical_contents
88
SQL Server 2014 自習書 No.1 新機能ダイジェスト
執筆者プロフィール
有限会社エスキューエル・クオリティ(http://www.sqlquality.com/)
SQLQuality(エスキューエル・クオリティ)は、日本で唯一の SQL Server 専門の独立系コンサルティング
会社です。過去のバージョンから最新バージョンまでの SQL Server を知りつくし、多数の実績と豊富な経
験を持つ、OS や .NET にも詳しい SQL Server の専門家(キャリア 17 年以上)がすべての案件に対応し
ます。人気メニューの「パフォーマンス チューニング サービス」は、100%の成果を上げ、過去すべてのお
客様環境で驚異的な性能向上を実現。チューニング スキルは世界トップレベルを自負、検索エンジンでは(英
語情報を含めて)ヒットしないノウハウを多数保持。ここ数年は BI/DWH システム構築支援のご依頼が多
く、支援だけでなく実際の構築も行う。
主なコンサルティング実績/構築実績
大手製造業の「CAD 端末の利用状況の見える化」システム構築
Oracle や CSV(Notes)、TSV ファイル、Excel からデータを抽出し、SQL Server 2012 上に DWH を構築
見える化レポートには Reporting Services を利用
大手映像制作会社の BI システム構築(会計/業務システムにおける予実管理/原価管理など)
従来 Excel で管理していたシートを Reporting Services のレポートへ完全移行。
Oracle や勘定奉行からデータを抽出して、SQL Server 上に DWH を構築
大手流通系の DWH/BI システム構築支援(POS データ/在庫データ分析/ABC 分析/ポイントカード分析)
大手アミューズメント企業の BI システム構築支援(人事システムにおける人材パフォーマンス管理)
Reporting Services による勤怠状況の見える化レポートの作成、PostgreSQL/人事システムからのデータ抽出
外資系医療メーカーの BI システム構築支援(Analysis Services と Excel による販売分析システム)
OLAP キューブによる売上および顧客データの多次元分析/自由分析(ユーザーによる自由操作が可能)
大手流通系の DWH システムのパフォーマンス チューニング
データ量 100 億件の DWH、総ステップ数2万越えのストアド プロシージャのパフォーマンス チューニング
ミッション クリティカルな金融システムでのトラブル シューティング/定期メンテナンス支援
SQL Server の下位バージョンからの移行/アップグレード支援(32 ビットから x64 への対応も含む)
複数台の SQL Server の Hyper-V 仮想環境への移行支援(サーバー統合支援)
ハードウェア リプレース時のハードウェア選定(最適なサーバー、ストレージの選定)
、高可用性環境の構築
2 時間かかっていた日中バッチ実行時間を、わずか 5 分へ短縮(95.8% の性能向上)
Java 環境(Tomcat、Seasar2、S2Dao)の SQL Server パフォーマンス チューニング etc
コンサルティング時の作業例(パフォーマンス チューニングの場合)
アプリケーション コード(VB、C#、Java、ASP、VBScript、VBA)の解析/改修支援
ストアド プロシージャ/ユーザー定義関数/トリガー(Transact-SQL)の解析/改修支援
インデックス チューニング/SQL チューニング/ロック処理の見直し
現状のハードウェアで将来のアクセス増にどこまで耐えられるかを測定する高負荷テストの実施
IIS ログの解析/アプリケーション ログ(log4net/log4j)の解析
ボトルネック ハードウェアの発見/ボトルネック SQL の発見/ボトルネック アプリケーションの発見
SQL Server の構成オプション/データベース設定の分析/使用状況(CPU, メモリ, ディスク, Wait)解析
定期メンテナンス支援(インデックスの再構築/断片化解消のタイミングや断片化の事前防止策など)etc
松本美穂(まつもと・みほ)
有限会社エスキューエル・クオリティ 代表取締役 Microsoft MVP for SQL Server(2004 年 4 月~)
経産省認定データベース スペシャリスト/MCDBA/MCSD for .NET/MCITP Database Administrator
SQL Server の日本における最初のバージョンである「SQL Server 4.21a」から SQL Server に携わり、現在、SQL Server
を中心とするコンサルティングを行っている。得意分野はパフォーマンス チューニングと Reporting Services。著書の
『SQL Server 2000 でいってみよう』と『ASP.NET でいってみよう』(いずれも翔泳社刊)は、トップ セラー(前者は
28,500 部、後者は 16,500 部発行)
。近刊に『SQL Server 2012 の教科書』(ソシム刊)がある。
松本崇博(まつもと・たかひろ)
有限会社エスキューエル・クオリティ 取締役 Microsoft MVP for SQL Server(2004 年 4 月~)
経産省認定データベース スペシャリスト/MCDBA/MCSD for .NET/MCITP Database Administrator
SQL Server の BI システムとパフォーマンス チューニングを得意とするコンサルタント。アプリケーション開発(ASP/
ASP.NET、C#、VB 6.0、Java、Access VBA など)やシステム管理者(IT Pro)経験もあり、SQL Server だけでなく、
アプリケーションや OS、Web サーバーを絡めた、総合的なコンサルティングが行えるのが強み。Analysis Services と
Excel による BI システムも得意とする。マイクロソフト認定トレーナー時代の 1998 年度には、Microsoft CPLS トレーナ
ー アワード(Trainer of the Year)を受賞。
89
Fly UP