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