사용 가능한 디스크 공간 (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_TBLBLOB열에 큰 이진 데이터를 포함합니다 . 의 문서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.