재원군 님이 쓰신 글 :
:
:
:
:
:
:
:
델파이로 재고관리 프로그램을 만들었는데..
:
몇달동안 사용하다보니 GDB파일의 용량이
:
너무 커져서 DELETE를 사용해서 이전달의
:
레코드들을 삭제하는 메뉴를 추가시켰습니다.
:
:
그렇구 나서 파일의 용량을 보니..
:
용량이 하나도 줄지 않았습니다.
:
:
DELTET문을 말고 다른 명령어가 있는지,
:
아니면 다른 방법이 있는건지 찾을수가
:
없어서 이렇게 글을 올립니다.
:
:
안녕히 게세요,...
:
:
데이터베이스에서 DELETE 명령을 내리면, 논리적으로 레코드가 삭제될 뿐,
물리적인 GDB 파일의 용량이 바로 줄어들지는 않습니다.
(SQL 규약에서 이런 것까지는 규정하지 않았죠.)
매번 DELETE를 할 때마다 GDB파일이 줄어든다면 엄청난 성능의 저하가 따를 겁니다.
물리적으로 GDB 파일을 줄이기 위해서는 Sweeping을 실행해야 합니다.
(이런 개념은 물론 다른 DBMS에도 있습니다. 심지어 M$ Access도 있지요.)
미리 지정된 Sweeping Interval만큼 트랜잭션을 수행한 후에 자동으로 Sweeping이 일어나도록 설정되어 있습니다.
Sweeping Interval 설정 방법은 다음과 같습니다.
1) IBConsole로 관리하신다면, [Database]-[Properties...]에서 [Sweeping Interval]값을 바꾸세요.
Default로 20000번 트랜잭션 수행 후, 스위핑하도록 되어 있습니다.
2) Command line tools를 쓰신다면, (n번 트랜잭션 수행후 스위핑하려면) 명령 프롬프트에서
gfix -h n db_name
3) IBX에서 설정하는 방법
IBConfigService1->SetSweepInterval(n);
님의 경우와 같이, 간혹 수동으로 스위핑해야 할 경우도 있습니다.
방법은 다음과 같습니다.
1) IBConsole로 관리하신다면, [Database]-[Maintenance]-[Sweep]을 선택하면 됩니다.
2) Command line tools를 쓰신다면, (DB 이름이 db_name일때) 명령 프롬프트에서
gfix -s db_name
을 입력하면 됩니다.
3) IBX의 경우
[델파이]
IBValidationService1.Options := [SweepDB];
[C++빌더]
IBValidationService1->Options = TValidateOption() << SweepDB;