JetDefragment 함수
적용 대상: Windows | Windows Server
JetDefragment 함수
JetDefragment 함수는 데이터베이스 내의 데이터 organization 개선하는 데이터베이스 조각 모음 작업을 시작하고 중지합니다. 이 작업은 데이터베이스 내에서 기존 디스크 할당을 보다 효율적으로 사용하여 데이터베이스 증가를 제한하기 위해 수행됩니다. 또한 데이터가 더 밀접하게 압축되도록 하여 작업 집합을 줄일 수 있습니다. 마지막으로, 더 나은 데이터 organization 통해 일반적인 작업을 가속화하여 애플리케이션 성능을 향상시킬 수 있습니다.
데이터베이스 조각 모음은 온라인 작업이며 쿼리 작업 또는 데이터 업데이트와 같은 일반 데이터베이스 작업을 중단하지 않습니다. 또한 JetDefragment 는 모든 기존 데이터의 복사본을 만들지 않습니다. 대신 데이터베이스를 조각 모음합니다. 마지막으로 JetDefragment 는 다시 사용하기 위해 내부 데이터베이스 공간을 복구하지만 운영 체제 파일 시스템에 과도한 공간을 해제하지는 않습니다.
데이터의 결과 형식은 훨씬 더 효율적일 수 있지만 일반적으로 최적이 아닙니다. 조각 모음은 이미 논리적으로 삭제된 데이터를 포함하는 다시 사용하기 위해 데이터베이스 페이지를 해제하는 것으로 제한됩니다. 조각 모음을 사용하면 단일 페이지에 맞을 수 있는 경우 두 페이지의 데이터를 결합하여 경우에 따라 데이터베이스 페이지를 다시 사용할 수 있습니다.
이 작업은 읽기 전용 데이터베이스의 복사본을 최적의 형식으로 만드는 JetCompact 와 다릅니다.
JET_ERR JET_API JetDefragment(
__in JET_SESID sesid,
__in JET_DBID dbid,
__in JET_PCSTR szTableName,
__out_opt unsigned long* pcPasses,
__out_opt unsigned long* pcSeconds,
__in JET_GRBIT grbit
);
매개 변수
sesid
이 호출에 사용할 세션입니다.
dbid
조각 모음할 데이터베이스입니다.
szTableName
사용하지 않는 매개 변수입니다. 조각 모음은 지정된 데이터베이스 ID로 설명된 전체 데이터베이스에 대해 수행됩니다.
pcPasses
온라인 조각 모음 작업을 시작할 때 이 입력 매개 변수는 최대 조각 모음 패스 수를 설정합니다. 온라인 조각 모음 작업을 중지할 때 이 출력 버퍼는 수행된 패스 수로 설정됩니다.
이 매개 변수를 NULL로 설정하면 온라인 조각 모음 통과 횟수가 제한되지 않습니다.
pcSeconds
온라인 조각 모음 작업을 시작할 때 이 입력 매개 변수는 조각 모음의 최대 시간을 설정합니다. 온라인 조각 모음 작업을 중지할 때 이 출력 버퍼는 조각 모음에 사용되는 시간으로 설정됩니다.
이 매개 변수가 NULL로 설정되거나 pcSeconds 가 음수 값을 가리키는 경우 조각 모음의 최대 시간은 무제한입니다.
grbit
다음 옵션 중 0개 이상을 지정하는 비트 그룹입니다.
값 |
의미 |
---|---|
JET_bitDefragmentAvailSpaceTreesOnly |
ESE 데이터베이스 공간 할당의 사용 가능한 공간 부분을 조각 모음합니다. 데이터베이스 공간은 소유 공간과 사용 가능한 공간이라는 두 가지 유형으로 나뉩니다. 소유된 공간은 테이블 또는 인덱스로 할당되고 사용 가능한 공간은 테이블 또는 인덱스 내에서 각각 사용할 준비가 되어 있습니다. 사용 가능한 공간은 동작에서 훨씬 더 동적이며 소유된 공간이나 테이블 또는 인덱스 데이터보다 더 많은 온라인 조각 모음이 필요합니다. |
JET_bitDefragmentBatchStart |
새 조각 모음 작업을 시작합니다. |
JET_bitDefragmentBatchStop |
조각 모음 작업을 중지합니다. |
반환 값
이 함수는 다음 반환 코드 중 하나를 사용하여 JET_ERR 데이터 형식을 반환합니다. 가능한 ESE 오류에 대한 자세한 내용은 확장 가능한 스토리지 엔진 오류 및 오류 처리 매개 변수를 참조하세요.
반환 코드 |
설명 |
---|---|
JET_errSuccess |
작업이 성공적으로 완료되었습니다. |
JET_errClientRequestToStopJetService |
JetStopService 호출로 인해 세션과 연결된 instance 모든 작업이 중단되었으므로 작업을 완료할 수 없습니다. |
JET_errDatabaseFileReadOnly |
조각 모음을 위해 선택한 데이터베이스는 읽기 전용이며 조각 모음을 포함하여 어떤 방식으로도 업데이트할 수 없습니다. |
JET_errDistributedTransactionAlreadyPreparedToCommit |
지정된 세션은 커밋할 준비가 되었으며 현재 트랜잭션이 커밋되거나 롤백될 때까지 새 업데이트를 시작할 수 없습니다. |
JET_errInstanceUnavailable |
세션과 연결된 instance 해당 데이터의 무결성을 보호하기 위해 모든 데이터에 대한 액세스를 해지해야 하는 심각한 오류가 발생하여 작업을 완료할 수 없습니다. 이 오류는 Windows XP 이상 릴리스에서만 반환됩니다. |
JET_errInvalidDatabaseId |
지정된 데이터베이스 ID가 instance 알려진 데이터베이스와 일치하지 않습니다. |
JET_errNotInitialized |
세션과 연결된 instance 아직 초기화되지 않았기 때문에 작업을 완료할 수 없습니다. |
JET_errRestoreInProgress |
세션과 연결된 instance 복원 작업이 진행 중이므로 작업을 완료할 수 없습니다. |
JET_errSessionSharingViolation |
동시에 둘 이상의 스레드에 동일한 세션을 사용할 수 없습니다. 이 오류는 Windows XP 이상 릴리스에서만 반환됩니다. |
JET_errTermInProgress |
세션과 연결된 instance 종료 중이므로 작업을 완료할 수 없습니다. |
JET_errTransReadOnly |
지정된 세션에는 읽기 전용 권한만 있으며 조각 모음을 포함하여 업데이트를 수행할 수 있는 작업을 시작할 수 없습니다. |
JET_errVersionStoreOutOfMemory |
이 오류는 버전 저장소의 구성된 크기가 미해결 업데이트를 모두 보유하기에 충분하지 않은 경우에 발생합니다. |
JET_wrnDefragAlreadyRunning |
JET_bitDefragmentBatchStart 옵션이 전달되었지만 조각 모음 작업이 지정된 데이터베이스에서 이미 조각 모음을 실행하고 있습니다. |
JET_wrnDefragNotRunning |
JET_bitDefragmentBatchStop 옵션이 전달되었지만 현재 조각 모음 작업이 실행되고 있지 않습니다. |
성공하면 지정된 옵션을 사용하여 지정된 데이터에 대해 조각 모음 작업을 시작하는 요청된 작업이 수행되거나 기존 조각 모음 작업을 중지하는 작업이 수행됩니다.
실패 시 온라인 조각 모음 작업을 시작하거나 중지하는 요청된 작업이 수행되지 않습니다. 다른 부작용이 발생하지 않습니다.
설명
온라인 조각 모음은 매개 변수 설정과 이 API에 의해 모두 제어됩니다. 기본 시스템 매개 변수 값은 JET_OnlineDefragAll 지원되는 모든 데이터 구조에 대해 조각 모음을 사용하도록 설정됨을 의미합니다. 그러나 JetSetSystemParameter를 사용하면 온라인 조각 모음을 사용하지 않도록 설정하거나 데이터베이스 공간 트리만, 데이터베이스만, 스트리밍 파일만 또는 이러한 옵션의 조합에 대해 선택적으로 사용하도록 설정할 수 있습니다. 온라인 조각 모음에 대한 시스템 설정이 사용되지 않는 설정으로 설정된 경우 JetDefragment 는 설정을 JET_OnlineDefragAll 처리합니다.
각 데이터베이스에 대해 최대 하나의 작업이 실행될 수 있습니다. 태스크는 ESE를 호스팅하는 프로세스에서 스레드로 실행됩니다.
조각 모음 작업이 자체 세션을 할당하기 때문에 조각 모음 작업이 계속되는 동안 온라인 조각 모음 작업을 시작하는 데 사용되는 세션을 데이터베이스 작업에 사용할 수 있습니다. 지정된 세션은 작업 시작 세션과 관련된 권한을 검사 데만 사용되며 실제로 조각 모음 작업 자체에 사용되지 않습니다.
요구 사항
요구 사항 | 값 |
---|---|
클라이언트 |
Windows Vista, Windows XP 또는 Windows 2000 Professional이 필요합니다. |
서버 |
Windows Server 2008, Windows Server 2003 또는 Windows 2000 Server가 필요합니다. |
머리글 |
Esent.h에 선언되었습니다. |
라이브러리 |
ESENT.lib를 사용합니다. |
DLL |
ESENT.dll 필요합니다. |
유니코드 |
JetDefragmentW(유니코드) 및 JetDefragmentA(ANSI)로 구현됩니다. |
참고 항목
JET_ERR
JET_SESID
JetCompact
JetDefragment2
JetSetSystemParameter
JetStopService