21

各パーティションの現在の圧縮設定とともに、データベース内のすべてのテーブルとインデックスを一覧表示する一般的な SQL ステートメントを持っている人はいますか?

ありがとう。

編集:これは、テーブルをクエリしようとして得た限りですが、結合が正しいかどうかはわかりません(インデックスの存在が原因であると思われる重複が発生しています)

SELECT [t].[name], [p].[partition_number], [p].[data_compression_desc]
FROM [sys].[partitions] AS [p]
INNER JOIN sys.tables AS [t] ON [t].[object_id] = [p].[object_id]
4

4 に答える 4

40

最後のクエリを共有したいと思いました。これにより、2 つの結果セットが得られます。1 つ目はヒープとクラスター化インデックスのデータ圧縮であり、2 つ目は非クラスター化インデックスのインデックス圧縮です。

SELECT [t].[name] AS [Table], [p].[partition_number] AS [Partition],
    [p].[data_compression_desc] AS [Compression]
FROM [sys].[partitions] AS [p]
INNER JOIN sys.tables AS [t] ON [t].[object_id] = [p].[object_id]
WHERE [p].[index_id] in (0,1)

SELECT [t].[name] AS [Table], [i].[name] AS [Index],  
    [p].[partition_number] AS [Partition],
    [p].[data_compression_desc] AS [Compression]
FROM [sys].[partitions] AS [p]
INNER JOIN sys.tables AS [t] ON [t].[object_id] = [p].[object_id]
INNER JOIN sys.indexes AS [i] ON [i].[object_id] = [p].[object_id] AND [i].[index_id] = [p].[index_id]
WHERE [p].[index_id] > 1
于 2013-06-10T09:08:10.553 に答える
11

これらの答えはすべてまともで機能します。私は自分の仕事のためにそれを少し装飾したので、少し貢献する時が来たと思いました. このクエリは、Jason の回答からスキーマを追加します (これが必要でした)。また、いくつかの結合の問題を整理し、結果を非常に単純な要約にまとめます。

-- Returns user tables and indexes in a DB and their Compression state
select s.name [Schema], t.name [Table], i.name [Index], p.data_compression_desc Compression
     , case when p.index_id in (0, 1) then 'Table' else 'Index' end CompressionObject
  from sys.tables t
  join sys.schemas s on t.schema_id = s.schema_id
  join sys.indexes i on t.object_id = i.object_id
  join sys.partitions p on (i.object_id = p.object_id and i.index_id = p.index_id)
where t.type = 'U'
order by 1, 2, p.index_id, 3

これを「作業リスト」として使用して、すべてを圧縮するスクリプトを生成しました。これは、db を Azure VM にリフトシフトしただけであり、パフォーマンスを向上させるために IOPS を削減したいからです。これが誰かを助けることを願っています。

于 2014-08-02T17:36:46.040 に答える
4

これでうまくいくはずです。小さなサブセットでテストして、必要なものが得られることを確認してください。

SELECT DISTINCT s.name [Schema], t.name [Table], i.name [Index Name], p.partition_number, p.data_compression_desc
-- uncommenting the below line will give you dupes
--, p.index_id
FROM sys.schemas s
INNER JOIN sys.tables t
    ON s.schema_id = t.schema_id
    INNER JOIN sys.indexes i
        ON t.object_id = i.object_id
    INNER JOIN sys.partitions p
        ON t.object_id = p.object_id
ORDER BY s.name, t.name

おそらくだまされている理由は、テーブルごとに複数のパーティション レコードがあるためです。たとえば、複数の index_id です。index_id の意味については、このMSDNの記事を参照してください。DISTINCTを追加すると、重複の問題が解決するはずです

于 2013-06-07T22:22:24.413 に答える