【SQLServer】インデックス再構築では自動生成された統計情報は更新されない

以下を参考にSQLServerのチューニングを実施したが、その際の気づきを残しておく。

 

blogs.msdn.microsoft.com

 

インデックス再構築によって更新される統計は、更新対象インデックスの統計であって、それ以外の統計 (更新対象ではないインデックスや列の統計) は更新されません。

とあるが、自動生成された統計情報は更新対象ではない。

   

 インデックスを作成した列に対しては統計情報が一つ自動で作成されるが、それ以外の列にも自動生成されることがある*1。AUTO_CREATE_STATISTICSがONのデータベースでは、以下の通り統計情報の自動生成が行われうる*2

例えば、WHERE B=xxx という検索を行なったときに、B 列にインデックスが 作成されていない場合は、_WA_Sys_B_XXX という統計が作成されます。 この統計は、使われなくなった場合には、自動的に削除されるのでほっておいても 問題ありません。明示的に削除したい場合は DROP STATISTICS を使います。

 なお、自動生成された場合は必ず単一列を対象とした統計情報となる*3

 

 すなわち、一つのヒープに対して複数のインデックスが存在でき、それぞれに統計情報が一つ対応して存在するが、それ以外にも自動生成された統計情報が存在しうる。インデックス再構築の際にサンプル率100%で更新される統計情報は前者のみで、後者は対象外となる*4

 

  余談だが、統計情報の更新をサンプル率100%で定期的に実施するのであれば、その更新頻度次第では、既定のサンプリングレートで更新されてしまう自動更新による統計情報の劣化を防ぐため、AUTO_UPDATE_STATISTICS オプションをオフにしておくのを忘れないように気をつけたい。

 

 

TCPコネクションにおけるハーフオープンとは

2ホスト間でTCPコネクションを確立する際、3wayハンドシェイクと呼ばれる以下のようなTCPパケットのやりとりを行う。

 

①クライアントがサーバへSYNパケットを送信

②サーバがSYN+ACNパケットを返信

③クライアントがACNパケットを送信

 

クライアントが②の後③を行わなければ、サーバはACNの待機をタイムアウトまで続ける。この確立しないTCPコネクションの状態のことをハーフオープンと呼ぶ。

 

ハーフオープンのコネクションが存在すると、サーバはタイムアウトまでACNパケット受信待ちを行うため、一定量のリソースを消費する。

このことを利用し、クライアントからサーバへ大量のハーフオープンのコネクションを意図的に行い、サーバのリソースを消費する攻撃をTCP SYNフラッド攻撃(または単にSYNフラッド攻撃)と呼ぶ。

 

参考

TCP/IP - TCP 3ウェイハンドシェイク

Insider's Computer Dictionary:TCP SYNフラッド攻撃 とは? - @IT

【SQLServer】2008R2 のSQL Server AuditにおいてApplication Nameは取得できるか

不可能。

SQLServer2017より可能となった。

 

 

SQLServerの監査ログ出力機能にはSQL Server Audit と Profiler(Trace)の2つがある。

SQL Server Auditで出力した監査ログの参照方法は、SSMS上のGUI操作*1とfn_get_audit_file システム関数*2があるが、fn_get_audit_fileでapplication_nameが取得できるようになるのはSQLServer 2017から*3

 

 なお、client_ipについてはサーバ監査ログファイルからfn_get_audit_fileで取得したテーブル内の、additional_information列にxml情報として埋め込まれている。

 

 

 参考

SQL Server Audit と Profiler(Trace) のパフォーマンス差のメモ - お だ のスペース

プロファイラ vs. SQL Server Audit(SQL Server 監査) - 松本崇博 Blog (SQL Server Tips)

 event log - Method for Extracting application name from SQL Server Audit log or SQL Audit trace? - Stack Overflow

インディケーションレート

 インディケーション・レートは、店頭デリバティブ取引において、市場レートを基に計算した参考レートのことをいいます。また、インディケーション(Indication)とは、「クォーテーション(Quotation)」とも呼ばれ、相場気配や市場(マーケット)の水準を示す参考レートを提示することをいいます。

 

スワップスワップション・オプションなどのOTC金利デリバティブ取引では、約定時のレート(ファームレート)とは別に、事前に参考レートを提示することがあるらしい。

 

参考:

インディケーション・レートとは|金融経済用語集