連載
» 2015年06月23日 05時00分 公開

クエリストアって何だ? SQL Server 2016のパフォーマンス向上に注目Database Watch(2015年6月版)(2/2 ページ)

[加山恵美,@IT]
前のページへ 1|2       

パフォーマンス改善の新機能2:クエリストア

 同じデータベース、アプリケーションを使っているのに、ある日突然パフォーマンスが劣化することがあります。これはデータベース管理者にとって恐怖です。原因はいろいろと考えられますが、「クエリ実行計画」に関係する場合が少なくありません。

 RDBMSではクエリに対して結果を返すために、どのような順番で処理をすれば速く結果が返せるかをあらかじめ見積もり、処理の順序を決定しています。この時、クエリの内容を把握し、どの順番で処理するかを定めたものが「クエリ実行計画」です。

 乱暴な例え方かもしれませんが、乗り換え案内のアプリで「どのルートを使えば目的地に最も早く着くか」を調べるようなものです。「この路線なら○分乗車、最寄り駅から×分徒歩」とかかる時間を比較するのと同様に、最近のRDBMSでは「オプティマイザ」がクエリ応答に掛かる「コスト」を比較しています(クエリ実行計画最適化)。乗り換え案内の例で言えば、経路に当たるものがクエリ実行計画だとイメージしていいでしょう。

 いつもと同じデータベースでいつもと同じ問い合わせをしているのに、データ量の増減やパッチ適用後など何らかの条件が変わることにより、処理にかかる時間が変わってしまうことがあるのです。しかし、データベース管理者によっては「最速ではなくても、毎日の運用を考えた場合、常に処理時間が安定している方が好ましい」と、実行計画を指定したいときがあります。

 こうした要望に応えるために、SQL Server 2016では「クエリストア」という機能でクエリの実行履歴を保存します。この履歴から、時間がかかったクエリを調べたり、特定のクエリ実行計画を強制したりといった調整が可能になります。

パフォーマンス改善の新機能3:テンポラルデータベース

 データベースのデータは常に更新され続けていることもあれば、そうでない場合もあります。業務によっては「○年から×年まで」と特定の期間でデータを切り出したり、監査のために「いつ時点でのデータ」を必要としたりすることもあります。

 そこで、SQL Server 2016では最新のデータが入っているテーブルを「テンポラルテーブル」、履歴のデータを「履歴テーブル」と分けて持ち、組み合わせて使うことで処理履歴も考慮した結果を出します。

 実際にこの機能を利用する際には、履歴テーブルの肥大化が懸念されそうです。テンポラルテーブルは常に書き換わるので一定のサイズに収まりますが、履歴テーブルは過去の処理履歴を蓄積することになるため、どんどん大きくなると予想できます。ストレージを圧迫することになるわけです。

 考えられる対応策として、比較的低速で安価なストレージに履歴テーブルを格納するという方法があります。SQL Server 2016には、他にも選択肢があります。テンポラルテーブルをオンプレミスで運用するとしても、履歴テーブルはMicrosoft AzureのSQL Databaseに格納するという選択肢も考えられます。先述したようにSQL ServerとSQL Databaseは、名前は違えどコードラインは同じです。北川氏によると、SQL Server 2016では、連携して使うテーブルを両者に分けて格納することもできてしまうといいます。

 他にもSQL Server 2016では「Always Encrypted」というデータをマスクしたまま運用する機能もあります。セキュリティ対策には有効となりそうです。またAlwaysOn機能は拡張され、Standardエディションで利用可能となるといったうれしいニュースもあります。他にもより高度な分析のための機能も追加されていく予定です。クラウド時代に適したRDBMSとしてより一層進化していきそうです。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。