Shoeisha Technology Media

EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

あまり知られていないSQL Server 2012の機能強化点(前編)

edited by DB Online   2012/05/14 00:00

2. Better Diagnostics for Space Problems

  SQL Server 2012では、DBCC INDやDBCC EXTENTINFOといったアンドキュメンテッドのコマンドにとって代わるsys.dm_db_database_page_allocationsという名前の新しい動的管理関数が導入されました。DBCC INDやDBCC EXTENTINFOコマンドは、我々サポートチームがお客様のデータベース使用量やストレージに関する問題を取り扱う際に、広く使用されてきたコマンドです。たとえば、データベースの圧縮に関する問題や、テーブルやインデックスが過度にファイル スペースを使用してしまっているような問題を調査するときに使用されます。

  DBCC INDやDBCC EXTENTINFOコマンドは、DBCCコマンドであるという性質上、いくつかの制限がありました。たとえば、DBCCコマンドは出力結果がテーブル形式でないため、コマンドの出力結果に対してフィルタリングやグルーピングを行いたい場合、一度、DBCCコマンドをEXECUTEステートメントで実行してから、その出力結果をテーブルにインポートする必要があります。SQL Server 2012で新しく追加されたsys.dm_db_database_page_allocations動的管理関数はテーブル形式で結果を返すので、このようなDBCC INDやDBCC EXTENTINFOコマンドの制限を解決してくれます。

 Sys.dm_db_database_page_allocations動的管理関数は、以下の引数を受け取ります。

databaseID database id [not null]
tableId object id or NULL
indexId index id or NULL
partitionId partition id or NULL
mode LIMITED or DETAILED

 この動的管理関数の出力結果には、指定されたオブジェクトやインデックスのページ割り当て情報が含まれます。なお、object id , index id または、partition id にNULLを指定すると、すべての情報が返されます。最後のmodeパラメータは、より詳細な情報を出力するかどうかを指定するオプションです。既定では、LIMITEDとなっており、関数の実行が適切な時間で終了するように出力内容が制限されます。DETAILEDを指定することでより詳細な情報を採取できますが、その分実行時間が長くなりますので、必要に応じて使い分けてください。以下は、sys.dm_db_database_page_allocationsを実行するときのサンプル コードです。

select * from sys.dm_db_database_page_allocations( DB_ID('Test_db') ,
OBJECT_ID('Test1') , NULL , NULL , 'LIMITED' )
go

select * from sys.dm_db_database_page_allocations( DB_ID('Test_db') , 
OBJECT_ID('Test1') , NULL , NULL , 'DETAILED' )
go

著者プロフィール

バックナンバー

連載:あたらしいSQL Server/Denaliの世界

もっと読む

All contents copyright © 2007-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5