본문 바로가기

운영/압축

MS SQL 2008에서 PAGE 압축 한 후 압축 정보 보기

728x90

MS SQL Enterprise Edition 에서는 데이터에 대한 압축을 할 수가 있습니다.

데이터의 PAGE 압축이 되어있는지 여부를 확인하고 싶습니다.

 

1. 압축된 인덱스 및 해당 테이블을 찾을 수 있습니다.

SELECT OBJECT_NAME(I.OBJECT_ID) AS 'TABLENAME',
        I.NAME,
        *
FROM sys.partitions  AS P
JOIN sys.objects AS O ON P.OBJECT_ID=O.OBJECT_ID
JOIN sys.indexes AS I ON P.OBJECT_ID=I.OBJECT_ID 
        AND P.INDEX_ID=I.INDEX_ID
WHERE DATA_COMPRESSION<>0

 

2. 압축된 인덱스와 압축 안된 인덱스를 모두 가지고 있는 테이블을 찾으려고 합니다.

 

찾고자 하는 이유는 압축된 인덱스가 있다는 것은 압축해야 하는 테이블이라고 생각되며, 만약 테이블에 압축 안된 인덱스들이 존재한다면 앞으로 압축을 해야 하는 인덱스일 가능성이 크기 때문입니다.

SELECT *
FROM (
        --압축된 인덱스가 존재하는 테이블 추출
        SELECT DISTINCT 
                OBJECT_NAME(I.OBJECT_ID) AS 'TABLENAME'
        FROM sys.partitions AS P
        JOIN sys.objects AS O ON P.OBJECT_ID=O.OBJECT_ID
        JOIN sys.indexes AS I ON P.OBJECT_ID=I.OBJECT_ID 
                AND P.INDEX_ID=I.INDEX_ID
        WHERE DATA_COMPRESSION<>0
)AS A
JOIN (
        --테이블에 속한 인덱스
        SELECT OBJECT_NAME(OBJECT_ID) AS TABLENAME,
               NAME,
               TYPE_DESC,
               IS_DISABLED
        FROM sys.indexes
)AS B ON A.TABLENAME=B.TABLENAME
LEFT JOIN (
        --압축된 인덱스만 추출
        SELECT OBJECT_NAME(I.OBJECT_ID) AS 'TABLENAME',
               I.NAME
        FROM sys.partitions AS P
        JOIN sys.objects AS O ON P.OBJECT_ID=O.OBJECT_ID
        JOIN sys.indexes AS I ON P.OBJECT_ID=I.OBJECT_ID 
                AND P.INDEX_ID=I.INDEX_ID
        WHERE DATA_COMPRESSION<>0
)AS C ON B.TABLENAME=C.TABLENAME AND B.NAME=C.NAME
WHERE C.NAME IS NULL 
        AND IS_DISABLED=0

위의 쿼리를 실행하면 아래와 같은 결과값을 얻을 수 있습니다.

압축된 인덱스가 존재하는 테이블 중 압축 안된 인덱스리스트가 결과값으로 조회가 됩니다.

728x90