사용 가능한 디스크 공간 (DB2)을 DELETE + REORG하지 않는 이유는 무엇입니까?


18

DB2에는 큰 이진 데이터가 포함 된 테이블이 있습니다. 이제 전체 테이블을 제거하고 runstats, reorg, runstats를 실행했지만 디스크 공간의 양은 변경되지 않습니다. 여기서 무엇이 잘못 될 수 있습니까?

테이블은 다음과 같이 만든 자체 테이블 공간에 있습니다.

CREATE BUFFERPOOL "MY_BP" SIZE 250 AUTOMATIC PAGESIZE 4096;
CREATE LARGE TABLESPACE MY_TBS IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 4096 MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 64 PREFETCHSIZE 64 BUFFERPOOL MY_BP OVERHEAD 10.500000 TRANSFERRATE 0.140000 FILE SYSTEM CACHING;

다음과 같이 삭제 / 재구성했습니다.

DELETE FROM MY_TBL
RUNSTATS ON TABLE MY_TBL WITH DISTRIBUTION AND DETAILED INDEXES ALL
REORG TABLE MY_TBL
RUNSTATS ON TABLE MY_TABLE WITH DISTRIBUTION AND DETAILED INDEXES ALL
ALTER TABLESPACE MY_TBS REDUCE

MY_TBL 테이블은 2.5GB를 차지했으며 삭제 / 조정 후 3MB 만 사용합니다 .

FWIW : DB2 / NT v9.5.2를 실행하고 있습니다.


db2 v8의 시스템에서 작동합니까?
— Tony

답변:


22

자동 저장 장치를 사용하고있는 것 같습니다. (그렇지 않으면 이런 일이 발생할 수는 없습니다. 자동 저장소를 사용하면 쉽게 할 수 있습니다.)

문제는 데이터베이스가 자체 공간을 확보했지만 디스크를 운영 체제로 다시 릴리스하지 않았을 가능성이 큽니다. 테이블 스페이스의 High Water Mark를 확인하면 매우 쉽게 표시 할 수 있습니다.

다음을 수행하십시오

db2 list tablespaces show detail

각 테이블 스페이스와 디스크에서 사용중인 테이블 스페이스가 표시됩니다. Used pages데이터베이스가 사용중인 디스크 페이지 수입니다. total pages(디스크에 청구 된 총계) 와를 비교 High water mark (pages)하면 실제로 필요한 것보다 더 많은 것을 "청구"하는 경우 표시됩니다. (즉, 낮은 사용 페이지, 매우 높은 총 페이지 및 전체 페이지에 근접한 높은 워터 마크).

이 사용되지 않는 공간을 제거하고 운영 체제로 되돌리려면 다음을 발행하십시오 (자동 스토리지에서) db2 alter tablespace <tablespace name> reduce max. 예

db2 alter tablespace ts1 reduce max;

그러면 DB2가 상위 워터 마크를 낮추고 사용되지 않은 디스크를 운영 체제로 다시 해제합니다. (시스템 임시 또는 사용자 임시 테이블 스페이스가 아닌 일반 및 대형 테이블 스페이스에 대해서만이 작업을 수행 할 수 있습니다.)

자동 스토리지없이 DMS를 사용하는 경우 약간 다른 명령 세트를 사용해야합니다.

db2 alter tablespace <tablespace name> lower high water mark;
db2 alter tablespace reduce (<containter name> or [all containers] integer K|M|G or integer PERCENT);

예

db2 alter tablespace ts1 lower high water mark;
db2 alter tablespace reduce (all containers 500 M);

우리가 일하는 곳에서 우리는 디스크 공간을 확보하기 위해 재구성을 한 후에 자동으로 실행되도록 유지 관리 스크립트 중 일부에 이것을 넣습니다. 우리의 경우 DB2 LUW 9.7 FP 4를 사용하므로 버전에 맞는 정보에 액세스 할 수 있도록 9.5에 대한 Information Center를 다시 확인하는 것이 좋습니다.

편집 : 테이블 스페이스가 DB2 9.7로 업그레이드 된 데이터베이스에서 제공된 경우 재 확보 가능한 스토리지 속성 세트가 없을 것입니다. DMS에서 자동 스토리지로 업그레이드 한 경우에도 마찬가지입니다. 실제로 높은 워터 마크를 낮출 수 없으므로 물기가 없습니다. 테이블 및 데이터를 덤프하고 테이블 스페이스를 삭제해야합니다. 그런 다음 자동 스토리지를 사용하여 테이블 스페이스를 다시 작성하고 테이블의 데이터를 가져 오십시오.


+1-사이트에 기여하는 DB2 전문가를 만나면 좋습니다. 우리는 과거에 그 영역에서 약했습니다.
— Philᵀᴹ

1
DB2 9.5에서는 간단한 주석 만 사용 alter tablespace <tbsp> lower high watermark하거나 alter tablespace <tbsp> reduce max구문을 사용할 수 없습니다. 이러한 구문은 DB2 9.7까지 도입되지 않았습니다.
— Ian Bjorhovde

초기 게시물에서 언급했듯이 이미 대부분을 시도했지만 제대로 작동하지 않았습니다. 지금까지 해결책을 찾았습니다. LONGLOBDATA 옵션을 지정하지 않아서 디스크 공간을 회수 할 수 없습니다. BLOB 또는 CLOB에서 디스크 공간을 회수하려는 경우 필요합니다. 내 질문에 대한 답변을 여기에서 확인하십시오. 어쨌든 나는 당신이 당신의 대답에 노력을 기울여 주셔서 감사합니다, +1!
— Alexander Tobias Bockstaller

9

테이블 MY_TBL은 BLOB열에 큰 이진 데이터를 포함합니다 . 의 문서REORG명령 따르면 DB2는 시간이 많이 걸리고 클러스터링을 향상시키지 않기 때문에 이러한 오브젝트의 재구성을 피한다고 말합니다. 그러나 LONGLOBDATA옵션이 지정된 경우 DB2는 LOB 데이터를 강제로 재구성 할 수 있습니다 . 사용되지 않은 공간은 DB2에서 재사용 할 수 있으므로 새 데이터를 삽입하면 먼저 새 데이터를 할당하기 전에 사용되지 않는 기존 페이지가 채워집니다.

달리는

REORG TABLE MY_TBL LONGLOBDATA

빈 테이블이 사용하고있는 2.5GB의 디스크 공간을 성공적으로 회수했습니다.

나는이 옵션에 대해 몰랐고 처음으로 문서를 읽을 때 그것을 감독했다.


좋은 지적. 그러나 방금 DB2NightShow 에피소드 "Blob의 공격"에서 배운 내용에서 LONGLOBDATA 옵션을 너무 자주 실행하지 않아 성능 문제가 발생할 수 있습니다 (온라인 REORG를 수행하려는 경우). .
— Chris Aldrich

우리가 다루고있는 데이터베이스에는 산업용 머신의 로그 데이터가 포함되어 있습니다. 이러한 데이터베이스에 대한 쿼리는 시간이 중요하지 않으므로 재구성 중에 성능이 저하되면 문제가되지 않습니다.
— Alexander Tobias Bockstaller
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.