都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

ある方向けに容量とか、圧縮状態をチェックするクエリを書いてみた

 これでいいんではないでしょうか?

SELECT
    [ファイルグループ] = ds.name,
    [論理名] = df.name,
    [ファイルの格納場所] = df.physical_name,
    [ファイルの状態] = df.state_desc,
    [アロケーションユニット種別] = au.type_desc,
    [現在のファイルサイズ(Kbyte)] = df.size * 8,
    [スキーマ名] = s.name,
    [テーブル名] = t.name,
    [インデックス名] = i.name,
    [インデックスタイプ] = i.type_desc,
    [インデックス列] = STUFF(indnm, 1, 1, ''),
    [付加列] = STUFF(incnm, 1, 1, ''),
    [圧縮種別] = p.data_compression_desc,
    [パーティション番号] = p.partition_number,
    [行数] = p.rows,
    [使用済みのページ数] = au.data_pages,
    [実際に使用されるページ総数] = au.used_pages,
    [予約されたページ総数] = au.total_pages
FROM
    sys.data_spaces ds
    INNER JOIN
        sys.allocation_units au ON
        ds.data_space_id = au.data_space_id
    INNER JOIN
        sys.partitions p ON
        (
            au.container_id = p.hobt_id AND
            au.type IN(1,3)
        ) 
        OR
        (
            au.container_id = p.partition_id AND
            au.type = 2
        )
	INNER JOIN sys.database_files df ON
	    ds.data_space_id  = df.data_space_id
    INNER JOIN
        sys.tables t ON
        p.object_id = t.object_id
    INNER JOIN
        sys.schemas s ON
        t.schema_id = s.schema_id
    INNER JOIN
        sys.indexes i ON
        p.object_id = i.object_id AND
        p.index_id  = i.index_id
CROSS APPLY
(
    SELECT
        ',' + c.name
    FROM
        sys.index_columns ic
        INNER JOIN 
            sys.columns c ON
            ic.object_id = c.object_id AND
            ic.column_id = c.column_id
    WHERE
        i.object_id = ic.object_id AND
        i.index_id = ic.index_id AND
        ic.is_included_column = 0
    ORDER BY
        ic.key_ordinal
    FOR XML PATH('')
) AS cra1(indnm) 
CROSS APPLY
(
    SELECT
        ',' + c.name
    FROM
        sys.index_columns ic
        INNER JOIN 
            sys.columns c ON
            ic.object_id = c.object_id AND
            ic.column_id = c.column_id
    WHERE
        i.object_id = ic.object_id AND
        i.index_id = ic.index_id AND
        ic.is_included_column = 1
    ORDER BY
        ic.key_ordinal
    FOR XML PATH('')
) AS cra2(incnm)
ORDER BY
    ds.name ASC,
    df.name ASC,
    s.name ASC,
    i.name ASC,
    i.index_id ASC

f:id:koogucc11:20160417131509p:plain

 容量のチェックと圧縮状態チェックであればこんなんでもいいでしょう。

SELECT
    [ファイルグループ] = ds.name,
    [論理名] = df.name,
    [ファイルの格納場所] = df.physical_name,
    [ファイルの状態] = df.state_desc,
    [アロケーションユニット種別] = au.type_desc,
    [現在のファイルサイズ(Kbyte)] = df.size * 8,
    [スキーマ名] = s.name,
    [テーブル名] = t.name,
    [インデックス名] = i.name,
    [インデックスタイプ] = i.type_desc,
    [圧縮種別] = p.data_compression_desc,
    [パーティション番号] = p.partition_number
FROM
    sys.data_spaces ds
    INNER JOIN
        sys.allocation_units au ON
        ds.data_space_id = au.data_space_id
    INNER JOIN
        sys.partitions p ON
        (
            au.container_id = p.hobt_id AND
            au.type IN(1,3)
        ) 
        OR
        (
            au.container_id = p.partition_id AND
            au.type = 2
        )
	INNER JOIN sys.database_files df ON
	    ds.data_space_id  = df.data_space_id
    INNER JOIN
        sys.tables t ON
        p.object_id = t.object_id
    INNER JOIN
        sys.schemas s ON
        t.schema_id = s.schema_id
    INNER JOIN
        sys.indexes i ON
        p.object_id = i.object_id AND
        p.index_id  = i.index_id
ORDER BY
    ds.name ASC,
    df.name ASC,
    s.name ASC,
    i.name ASC,
    i.index_id ASC

f:id:koogucc11:20160417131807p:plain

 ご査収のほど、よろしくお願いいたします。

 できることを、やりましょう!カードでも、Tポイントでも。
donation.yahoo.co.jp
 ポンタのポイントでも寄付できます!
www.lawson.co.jp
 JALマイレージでも寄付できます!
JALマイレージバンク - 「平成28年熊本地震」被災者支援マイル
 ANAマイレージでも寄付できます。
www.ana.co.jp

 Kindle は 0円 です。Kindle を使える人は是非!

東京防災

東京防災

東京には、さまざまな災害リスクが潜んでいます。東京の多様な地域特性、都市構造、都民のライフスタイルなどを考慮してつくられた、完全東京仕様の防災ブック。それが「東京防災」です。本書には、知識をつけるだけではなく、今すぐできる具体的な“防災アクション”を多く掲載しています。もしものときに備えて、身を守る力をつけましょう。

 備えましょう。

非常用持ち出し袋36点セット リュックタイプの防災セット

非常用持ち出し袋36点セット リュックタイプの防災セット

サッと固まる非常用トイレ袋(30回分) 災害での断水時でもトイレが使える!

サッと固まる非常用トイレ袋(30回分) 災害での断水時でもトイレが使える!

KAKURI サバイバルシート(防寒・保温シート)

KAKURI サバイバルシート(防寒・保温シート)

 水は大切です。もう少し買い足そうかな。

 アルファ米も買い足すか。