33
SQL Server 2014 データベースエンジン新機能 小澤 真之 (@Masayuki_Ozawa)

SQL Server 2014 データベースエンジン新機能

Embed Size (px)

Citation preview

Page 1: SQL Server 2014 データベースエンジン新機能

SQL Server 2014 データベースエンジン新機能

小澤真之 (@Masayuki_Ozawa)

Page 2: SQL Server 2014 データベースエンジン新機能

自己紹介

SQLWorld★大阪#17

フリーランスのエンジニアとして SQL Server を中心に案件に従事

勉強会やブログで SQL Server の情報を発信

Twitter: @Masayuki_Ozawa

Facebook : https://www.facebook.com/masayuki.ozawa

勉強会:SQLTO (http://sqlto.net)

ブログ : SE の雑記 (http://engineermemo.wordpress.com)

2013/09/142

Page 3: SQL Server 2014 データベースエンジン新機能

はじめに

SQLWorld★大阪#17

本資料は SQL Server 2014 CTP1 をベースに作成しています。そのため、製品版では動作が変わる可能性があります。あらかじめご了承ください。

2013/09/143

Page 4: SQL Server 2014 データベースエンジン新機能

本日セッションの内容

SQLWorld★大阪#17

SQL Server 2014 のデータベースエンジンの以下の新機能についての紹介

詳細については以下を参照 What's New (Database Engine)

http://msdn.microsoft.com/en-us/library/bb510411(v=sql.120).aspx

クラスター化列ストアインデックス

バッファプール拡張

リソースガバナーの機能拡張

2013/09/144

Page 5: SQL Server 2014 データベースエンジン新機能

クラスター化列ストアインデックス

SQLWorld★大阪#17 2013/09/145

Page 6: SQL Server 2014 データベースエンジン新機能

データのストア方法

SQLWorld★大阪#17

行ストア (Row Store)

列ストア (Column Store)

2013/09/146

Page 7: SQL Server 2014 データベースエンジン新機能

行ストア (Row Store)

SQLWorld★大阪#17

行を基準としたデータストア

SQL Server の通常のデータストア方法

ID 姓 名 性別

1 井口 拓海 男

2 平岡 頼子 女

3 小畑 美樹 女

4 小宮 喜一郎 男

5 前川 涼子 女

1 列分のデータがほしい場合でも行単位でデータを取得する必要がある。 (正確にはページ)

2013/09/147

ルートノード

中間ノード

リーフノード

ID

ID ID

ID 姓 名 性別 ID 姓 名 性別 ID 姓 名 性別 ID 姓 名 性別

B-Tree (Balanced Tree) 構造ページ

Page 8: SQL Server 2014 データベースエンジン新機能

列ストア (Column Store)

SQLWorld★大阪#17

列を基準としたデータストア

SQL Server 2012 で追加された列ストアインデックス

ID 姓 名 性別

1 井口 拓海 男

2 平岡 頼子 女

3 小畑 美樹 女

4 小宮 喜一郎 男

5 前川 涼子 女

1 列のデータがほしい場合には対象列のデータ (セグメント) のみを読み込む

Rowgroup

Segment Segment Segment Segment

Rowgroup

Columnstore インデックス

ID12345

ID

姓井口平岡小畑小宮前川

名拓海頼子美樹喜一郎涼子

性別男女女男女

姓 名 性別

Dictionary

Segment

内部構成

2013/09/148

Page 9: SQL Server 2014 データベースエンジン新機能

SQL Server 2012 の列ストアインデックス

SQLWorld★大阪#17

高い圧縮効率

xVelocity エンジン (旧 VertiPaq) を使用したデータの圧縮

列ストアインデックスはデータストア内のデータ型が同じであるため、効率よく圧縮をすることができる

読み取り専用の非クラスター化列ストアインデックスのみが設定可能

読み取りのみが可能であり更新 / 追加 / 削除は通常の T-SQL では行えない。

追加 / 削除に関してはパーティショニングのスイッチをすることで実施。

2013/09/149

Page 10: SQL Server 2014 データベースエンジン新機能

列ストアと非クラスター化列ストアインデックス

DEMO

2013/09/14SQLWorld★大阪#1710

Page 11: SQL Server 2014 データベースエンジン新機能

SQL Server 2014 の列ストアインデックス

SQLWorld★大阪#17

更新可能な列ストアインデックス(Updateable clustered columnstore indexes) クラスター化列ストアインデックス (CCI) を使用することで更新が可能

SQL Server 2012 Parallel Data Warehouse ではすでに実装済みの機能 http://www.microsoft.com/ja-jp/sqlserver/2012/pdw/default.aspx

アーカイブデータ圧縮 列ストアインデックスに高圧縮のモード (COLUMNSTORE_ARCHIVE) を指定することが可能 クラスター化 / 非クラスター化列ストアインデックスの両方に指定可能

圧縮効率は上がるが CPU 使用率も上がるので負荷とのトレードオフ

バッチモードの処理対象の追加 バッチモードで処理される JOIN 句が追加等

2013/09/1411

Page 12: SQL Server 2014 データベースエンジン新機能

列ストア

クラスター化列ストアインデックスの構成

SQLWorld★大阪#17

Rowgroup

Segment Segment Segment Segment

Rowgroup

ID12345

ID

姓井口平岡小畑小宮前川

名拓海頼子美樹喜一郎涼子

性別男女女男女

姓 名 性別

行ストア(差分ストア : Delta Store)

クラスター化列ストアインデックスで新しく追加された領域

削除済みビットマップ

2013/09/1412

Page 13: SQL Server 2014 データベースエンジン新機能

作成の方法

SQLWorld★大阪#17

SSMS または T-SQL で作成可能

CREATE CLUSTERED COLUMNSTORE INDEX[ClusteredColumnStoreIndex-CCITable] ON [dbo].[CCITable] WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE)GO

2013/09/1413

Page 14: SQL Server 2014 データベースエンジン新機能

行ストアを使用した更新

SQLWorld★大阪#17

更新系のデータは行ストアに格納をする 追加 (INSERT) / 一括挿入 (BULKINSERT)

行ストアに追加されたデータを格納 100 万行単位で格納しそれ以上になった場合はそれまでの行ストアを圧縮して、新規の行ストアを追加 行ストアを CLOSED にしバックグラウンドジョブ (既定で 5 分間隔) で圧縮 (COMPRESSED)

削除 (DELETE) 列ストア内のデータの削除については削除用のビットマップを設定 行ストアのデータの削除についてはストアからデータを削除

更新 (UPDATE) 削除と追加を組み合わせる

削除用のビットマップを設定

行ストアにデータを追加

検索 (SELECT) 列ストアと行ストアのデータを結合して使用

2013/09/1414

Page 15: SQL Server 2014 データベースエンジン新機能

インデックスのメンテナンス

SQLWorld★大阪#17

インデックスの再構成 (REORGANIZE)

CLOSED となった行ストアをバックグラウンドジョブの開始を待たずに圧縮

インデックスの再構築 (REBUILD)

オフライン再構築のみ可能 (オンライン再構築は不可)

行ストアと列ストアの内容をマージしインデックス全体を最適化

列ストア内の削除済ビットマップが設定されているデータを削除

2013/09/1415

Page 16: SQL Server 2014 データベースエンジン新機能

クラスター化列ストアインデックス

DEMO

SQLWorld★大阪#17 2013/09/1416

Page 17: SQL Server 2014 データベースエンジン新機能

バッファプール拡張

SQLWorld★大阪#17 2013/09/1417

Page 18: SQL Server 2014 データベースエンジン新機能

データのキャッシュアウト

SQLWorld★大阪#17

メモリのサイズは有限で一般的にはデータベースサイズより小さい

メモリ上にデータが格納できなくなった場合は、参照回数の少ないページをメモリ上からキャッシュアウトさせ領域を確保

他のプロセスでメモリが必要になった場合は、大量のメモリをページアウトさせることがある。→ ワーキングセットのトリミング

再度データが必要になった場合はディスクからデータを読み込む

低速なディスクからの読み込みはオーバーヘッドがある

2013/09/1418

Page 19: SQL Server 2014 データベースエンジン新機能

ページの構造

SQLWorld★大阪#17

バッファヘッダ(参照状況 : breferences)

8KB ページ

ページヘッダ

ページオフセット

2013/09/1419

Page 20: SQL Server 2014 データベースエンジン新機能

データの参照回数の確認

DEMO

SQLWorld★大阪#17 2013/09/1420

Page 21: SQL Server 2014 データベースエンジン新機能

バッファプール拡張

SQLWorld★大阪#17

高速なディスクをキャッシュとして利用し階層化 (L2 キャッシュ) ディスクに書き込むオーバーヘッドがあるため、キャッシュに使用するディスクによっては全体のスループットへの影響が懸念される (個人的な感想)

キャッシュアウトが発生した場合に、高速なディスク (SSD) にデータをキャッシュアウトさせ、再度読み込みが発生した場合はそこからデータを読み込む Max Server Memory = 128 GB まで バッファプール拡張の最大サイズは Max Server Memory の 32 倍まで 有効 / 無効化はオンラインでできるが、サイズを小さくしたい場合は、サービスの再起動が必要となることがある

Buffer Pool Extensionhttp://msdn.microsoft.com/en-us/library/dn133176(v=sql.120).aspx

データベース(mdf / ndf)

メモリ(L1 キャッシュ)

SSD(L2 キャッシュ)

2013/09/1421

Page 22: SQL Server 2014 データベースエンジン新機能

設定方法

SQLWorld★大阪#17

バッファプール拡張はデータベース単位ではなくインスタンス単位で設定をする 有効化

ALTER SERVER CONFIGURATIONSET BUFFER POOL EXTENSION ON(FILENAME = 'F:¥ExtendPool¥ExtendPool.BPE', SIZE = 20GB)

無効化 ALTER SERVER CONFIGURATION

SET BUFFER POOL EXTENSION OFF

2013/09/1422

Page 23: SQL Server 2014 データベースエンジン新機能

利用状況の取得方法

SQLWorld★大阪#17

キャッシュされているデータがメモリ / 拡張領域のどちらに格納されているかを DMV / 拡張イベント / パフォーマンスモニターから取得可能

DMV sys.dm_os_buffer_descriptors

従来から存在していた DMV が拡張

sys.dm_os_buffer_pool_extension_configuration

拡張イベント buffer_pool_eviction_thresholds_recalculated

buffer_pool_extension_pages_evicted

buffer_pool_extension_pages_read

buffer_pool_extension_pages_written

パフォーマンスモニター SQLServer:Buffer Manager

Extension ~系のカウンターが追加

2013/09/1423

Page 24: SQL Server 2014 データベースエンジン新機能

バッファプール拡張

DEMO

SQLWorld★大阪#17 2013/09/1424

Page 25: SQL Server 2014 データベースエンジン新機能

リソースガバナーの機能拡張

SQLWorld★大阪#17 2013/09/1425

Page 26: SQL Server 2014 データベースエンジン新機能

リソースガバナー

SQLWorld★大阪#17

SQL Server 2008 で追加されたリソースを制御するための機能 リソース : CPU / メモリ

リソースプール : 使用するリソースの上限 MIN_CPU_PERCENT / MAX_CPU_PERCENT / MIN_MEMORY_PERCENT /

MAX_MEMORY_PERCENT

ワークロードグループ : リソースプールのリソースの利用の許可割合

分類子関数 : どのワークロードグループに割り当てるかを制御

リソースプール

ワークロードグループ

ワークロードグループ

分類子関数接続

2013/09/1426

Page 27: SQL Server 2014 データベースエンジン新機能

機能拡張

SQLWorld★大阪#17

SQL Server 2012

CAP_CPU_PERCENT

CPU の利用上限を厳密に設定することができるようになった

以前のバージョンの CPU 制限は負荷が低いときは制限を超えて利用できた

SQL Server 2014

MAX_IOPS_PER_VOLUME / MIN_IOPS_PER_VOLUME

ディスクボリューム単位に IOPS が設定できるようになった

ディスク負荷に余裕がある (低い) 場合でも上限値で制御がされる

ALTER RESOURCE POOL (Transact-SQL)

http://msdn.microsoft.com/ja-jp/library/bb934024(v=sql.120).aspx

2013/09/1427

Page 28: SQL Server 2014 データベースエンジン新機能

設定方法

SQLWorld★大阪#17

現状は GUI からは設定できないため、クエリから設定をする

CAP_CPU_PERCENT もクエリからのみ設定可能

CREATE RESOURCE POOL [IOLimit] WITH

(CAP_CPU_PERCENT = 100,

MAX_IOPS_PER_VOLUME = 50,

MIN_IOPS_PER_VOLUME = 50)

設定後の確認も GUI からはできないため設定状況はsys.resource_governor_resource_pools で確認

2013/09/1428

Page 29: SQL Server 2014 データベースエンジン新機能

I/O の制御状態の確認

SQLWorld★大阪#17

SQLServer:Resource Pool Stats の項目が拡張されている

Disk Read Bytes/sec

Disk Read IO Throttled/sec

Disk Read IO/sec

Disk Write Bytes/sec

Disk Write IO Throttled/sec

Disk Write IO/sec

2013/09/1429

Page 30: SQL Server 2014 データベースエンジン新機能

参考) Hyper-V のリソース制御

SQLWorld★大阪#17 2013/09/1430

Widnows Server 2012 からN/W の帯域制御が可能

Widnows Server 2012 R2 からディスクの IOPS の制御が可能

Page 31: SQL Server 2014 データベースエンジン新機能

リソースガバナーの機能拡張

DEMO

SQLWorld★大阪#17 2013/09/1431

Page 32: SQL Server 2014 データベースエンジン新機能

その他の機能拡張

SQLWorld★大阪#17 2013/09/1432

Page 33: SQL Server 2014 データベースエンジン新機能

その他の機能

SQLWorld★大阪#17

並列 SELECT INTO SELECT INTO を並列スレッドで実行できるようになった (Parallel INSERT)

データベースでの基数の推定 データの基数の推定ロジックが先行して実装されていた SQL Database と同じになった

無効化するには TF 2312 + TF 9481 を使用

Windows Azure SQL データベースでの基数の推定http://msdn.microsoft.com/ja-jp/library/dn369871.aspx

SQL 2014 New Cardinality Estimatorhttp://www.sqlstash.com/2013/06/28/sql-2014-cardinality-estimator/

AlwasyOn 可用性グループの機能拡張 最大で 9 台構成 (プライマリ 1 台 + セカンダリ 8 台で構成可能)

クラスタークォーラムが損失している状態でのセカンダリの利用

Windows Azure との相互利用 Windows Azure VM にバックアップしたデータベースを展開してインスタンスを作成 Windows Azure VM とオンプレミスで AlwaysOn 可用性グループを構築

Azure の VPN の機能と組み合わせて利用

2013/09/1433