Upload
masayuki-ozawa
View
1.254
Download
0
Embed Size (px)
Citation preview
SQL Server 2014 データベースエンジン新機能
小澤真之 (@Masayuki_Ozawa)
自己紹介
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
はじめに
SQLWorld★大阪#17
本資料は SQL Server 2014 CTP1 をベースに作成しています。そのため、製品版では動作が変わる可能性があります。あらかじめご了承ください。
2013/09/143
本日セッションの内容
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
クラスター化列ストアインデックス
SQLWorld★大阪#17 2013/09/145
データのストア方法
SQLWorld★大阪#17
行ストア (Row Store)
列ストア (Column Store)
2013/09/146
行ストア (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) 構造ページ
列ストア (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
SQL Server 2012 の列ストアインデックス
SQLWorld★大阪#17
高い圧縮効率
xVelocity エンジン (旧 VertiPaq) を使用したデータの圧縮
列ストアインデックスはデータストア内のデータ型が同じであるため、効率よく圧縮をすることができる
読み取り専用の非クラスター化列ストアインデックスのみが設定可能
読み取りのみが可能であり更新 / 追加 / 削除は通常の T-SQL では行えない。
追加 / 削除に関してはパーティショニングのスイッチをすることで実施。
2013/09/149
列ストアと非クラスター化列ストアインデックス
DEMO
2013/09/14SQLWorld★大阪#1710
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
列ストア
クラスター化列ストアインデックスの構成
SQLWorld★大阪#17
Rowgroup
Segment Segment Segment Segment
Rowgroup
ID12345
ID
姓井口平岡小畑小宮前川
名拓海頼子美樹喜一郎涼子
性別男女女男女
姓 名 性別
行ストア(差分ストア : Delta Store)
クラスター化列ストアインデックスで新しく追加された領域
削除済みビットマップ
2013/09/1412
作成の方法
SQLWorld★大阪#17
SSMS または T-SQL で作成可能
CREATE CLUSTERED COLUMNSTORE INDEX[ClusteredColumnStoreIndex-CCITable] ON [dbo].[CCITable] WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE)GO
2013/09/1413
行ストアを使用した更新
SQLWorld★大阪#17
更新系のデータは行ストアに格納をする 追加 (INSERT) / 一括挿入 (BULKINSERT)
行ストアに追加されたデータを格納 100 万行単位で格納しそれ以上になった場合はそれまでの行ストアを圧縮して、新規の行ストアを追加 行ストアを CLOSED にしバックグラウンドジョブ (既定で 5 分間隔) で圧縮 (COMPRESSED)
削除 (DELETE) 列ストア内のデータの削除については削除用のビットマップを設定 行ストアのデータの削除についてはストアからデータを削除
更新 (UPDATE) 削除と追加を組み合わせる
削除用のビットマップを設定
行ストアにデータを追加
検索 (SELECT) 列ストアと行ストアのデータを結合して使用
2013/09/1414
インデックスのメンテナンス
SQLWorld★大阪#17
インデックスの再構成 (REORGANIZE)
CLOSED となった行ストアをバックグラウンドジョブの開始を待たずに圧縮
インデックスの再構築 (REBUILD)
オフライン再構築のみ可能 (オンライン再構築は不可)
行ストアと列ストアの内容をマージしインデックス全体を最適化
列ストア内の削除済ビットマップが設定されているデータを削除
2013/09/1415
クラスター化列ストアインデックス
DEMO
SQLWorld★大阪#17 2013/09/1416
バッファプール拡張
SQLWorld★大阪#17 2013/09/1417
データのキャッシュアウト
SQLWorld★大阪#17
メモリのサイズは有限で一般的にはデータベースサイズより小さい
メモリ上にデータが格納できなくなった場合は、参照回数の少ないページをメモリ上からキャッシュアウトさせ領域を確保
他のプロセスでメモリが必要になった場合は、大量のメモリをページアウトさせることがある。→ ワーキングセットのトリミング
再度データが必要になった場合はディスクからデータを読み込む
低速なディスクからの読み込みはオーバーヘッドがある
2013/09/1418
ページの構造
SQLWorld★大阪#17
バッファヘッダ(参照状況 : breferences)
8KB ページ
ページヘッダ
ページオフセット
2013/09/1419
データの参照回数の確認
DEMO
SQLWorld★大阪#17 2013/09/1420
バッファプール拡張
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
設定方法
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
利用状況の取得方法
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
バッファプール拡張
DEMO
SQLWorld★大阪#17 2013/09/1424
リソースガバナーの機能拡張
SQLWorld★大阪#17 2013/09/1425
リソースガバナー
SQLWorld★大阪#17
SQL Server 2008 で追加されたリソースを制御するための機能 リソース : CPU / メモリ
リソースプール : 使用するリソースの上限 MIN_CPU_PERCENT / MAX_CPU_PERCENT / MIN_MEMORY_PERCENT /
MAX_MEMORY_PERCENT
ワークロードグループ : リソースプールのリソースの利用の許可割合
分類子関数 : どのワークロードグループに割り当てるかを制御
リソースプール
ワークロードグループ
ワークロードグループ
分類子関数接続
2013/09/1426
機能拡張
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
設定方法
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
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
参考) Hyper-V のリソース制御
SQLWorld★大阪#17 2013/09/1430
Widnows Server 2012 からN/W の帯域制御が可能
Widnows Server 2012 R2 からディスクの IOPS の制御が可能
リソースガバナーの機能拡張
DEMO
SQLWorld★大阪#17 2013/09/1431
その他の機能拡張
SQLWorld★大阪#17 2013/09/1432
その他の機能
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