SQL Server 2008では、SQL Server(2008 R2)の特定のインスタンス(またはすべてのインスタンス)のテーブルスペース使用率をどのように(SQLクエリを通じて)見つけることができますか?SQL Server 2008での合計表領域使用状況を調べる方法は?
また、SQL Serverのすべての名前付きインスタンスの一覧を取得するための最良の方法(クエリ)は何ですか?
SQL Server 2008では、SQL Server(2008 R2)の特定のインスタンス(またはすべてのインスタンス)のテーブルスペース使用率をどのように(SQLクエリを通じて)見つけることができますか?SQL Server 2008での合計表領域使用状況を調べる方法は?
また、SQL Serverのすべての名前付きインスタンスの一覧を取得するための最良の方法(クエリ)は何ですか?
は、スクリプトを使用します。
set nocount on
declare @indexes table(
QualifiedName nvarchar(512),
IndexId int,
FGName nvarchar(128),
Type nvarchar(50),
NumKeys int,
IndexKB numeric(28,0),
UsedKB numeric(28,0),
FreeKB numeric(28,0),
Rows numeric(28,0),
RowModCtr numeric(28,0),
OrigFillFactor int,
tableid bigint
)
insert into @indexes
select
db_name() + '.' + isnull(su.name,'<unknown-user>') + '.' + so.name + '.' + isnull(i.name,'<Heap>') QualifiedName,
i.index_id IndexId,
(select isnull(name,'') from sys.filegroups where data_space_id = i.data_space_id) FGName,
case
when so.type = 'V' then 'Indexed View: '
else ''
end +
case
when i.index_id = 0 then 'Heap'
when i.index_id = 1 then 'Clustered'
else 'Non Clustered'
end Type,
0 NumKeys,
a.used_pages* 8 IndexKB,
CASE
When a.type <> 1 Then a.used_pages * 8
When p.index_id < 2 Then a.data_pages * 8
Else 0
END UsedKB,
(a.total_pages-a.used_pages)* 8 FreeKB,
p.rows Rows,
0 RowModCtr,
i.fill_factor OrigFillFactor,
convert(bigint,db_id()) * power(convert(bigint,2),48) + convert(bigint,su.schema_id) * power(convert(bigint,2),32) + so.object_id tableid
from
sys.objects so with (readpast)
inner join sys.schemas su with (readpast) on su.schema_id = so.schema_id
inner join sys.indexes i with (readpast) on so.object_id = i.object_id
inner join sys.partitions p with (readpast) ON i.object_id = p.object_id and i.index_id = p.index_id
inner join sys.allocation_units a with (readpast) on p.partition_id = a.container_id
where
(so.type = 'U') and a.type_Desc = 'IN_ROW_DATA'
and isnull(INDEXPROPERTY(i.object_id, i.name, 'IsStatistics'),0) = 0
and isnull(INDEXPROPERTY(i.object_id, i.name, 'IsAutoStatistics'),0) = 0
and isnull(INDEXPROPERTY(i.object_id, i.name, 'IsHypothetical'),0) = 0
order by
IndexKB desc
select
i.QualifiedName,
i.IndexId,
i.FGName,
i.Type,
i.NumKeys,
i.IndexKB,
(i.UsedKB - isnull(t.s_UsedKB,0)) UsedKB,
(i.FreeKB - isnull(t.s_FreeKB,0)) FreeKB,
i.Rows,
i.RowModCtr,
i.OrigFillFactor
from
@indexes i
left outer join (
select tableid, sum(UsedKB) s_UsedKB, sum(FreeKB) s_FreeKB
from @indexes
where IndexId > 1
group by tableid
) t on t.tableid = i.tableid
and i.IndexId <= 1
order by
IndexKB desc
うーん...私を少し混乱させるものの数。申し訳ありませんが、noobのように聞こえますが、SQL Serverを初めて使用しています。残っている合計テーブルスペースの割合が欲しいだけです。上記のVikramの答えがそのトリックを行うかどうか、任意のアイデア? – LittleLebowski
@deathfarg固定サイズのデータベースファイルを持っていない場合、「残っている合計テーブルスペースの割合」はありません。私が理解したように、あなたはテーブルで占められている総スペースを望んでいます - そして、はい - Vikramの答えが良くなります、 –
大丈夫、ありがとう。あなたはそれを正しいと思っています...私はテーブルが占有しているスペース全体が必要です。しかし、それはまた私に不思議に思っていました。次に、総DB領域を見つける方法は?そこにもprocはありますか? – LittleLebowski
は何が必要このです:
EXEC sp_spaceused null, false
結果:
database_name database_size unallocated space
--------------- ------------------ ------------------
DATABASE_NAME 220.25 MB 69.92 MB
reserved data index_size unused
------------------ ------------------ ------------------ ------------------
110672 KB 80368 KB 26944 KB 3360 KB
それは単純で甘いようです。私はそれを試してみましょう。 – LittleLebowski
たぶん[http://dba.stackexchange.comで尋ねたより良いです/](http://dba.stackexchange.com/) – Filburt
試してみてくださいhttp://msdn.microsoft.com/en-us/library/ms188776.aspx –
[このページ]( http://www.mssqltips.com/sqlservertip/1177/determining-space-used-for-each-table-in-a-sql-server-database/)おそらくあなたの質問に答えます – harry