64.2. 인덱스 액세스 스포츠 토토 베트맨 기능#

색인 액세스 스포츠 토토 베트맨이 제공해야 하는 색인 구성 및 유지 관리 기능IndexAmRoutine다음은:

IndexBuildResult *
ambuild(관계 힙Relation,
         관계 지수관계,
         IndexInfo *indexInfo);

새 색인을 구축하세요. 인덱스 관계가 물리적으로 생성되었지만 비어 있습니다. 액세스 스포츠 토토 베트맨에 필요한 고정 데이터와 테이블에 이미 존재하는 모든 튜플에 대한 항목으로 채워져야 합니다. 일반적으로ambuild함수가 호출됩니다table_index_build_scan()테이블에서 기존 튜플을 검색하고 인덱스에 삽입해야 하는 키를 계산합니다. 함수는 새 인덱스에 대한 통계를 포함하는 palloc'd 구조체를 반환해야 합니다.

공허
ambuildempty(관계 indexRelation);

빈 색인을 구축하고 초기화 포크에 씁니다(INIT_FORKNUM) 해당 관계의 이 메소드는 기록되지 않은 인덱스에 대해서만 호출됩니다. 초기화 포크에 기록된 빈 인덱스는 서버를 다시 시작할 때마다 기본 관계 포크 위에 복사됩니다.

부울
aminsert(관계 인덱스Relation,
          데이텀 *값,
          부울 *isnull,
          ItemPointer heap_tid,
          관계 힙관계,
          IndexUniqueCheck checkUnique,
          부울 인덱스변경되지 않음,
          IndexInfo *indexInfo);

기존 색인에 새 튜플을 삽입하십시오.그리고isnull배열은 색인화할 키 값을 제공하며heap_tid은 인덱싱할 TID입니다. 액세스 방법이 고유 인덱스를 지원하는 경우(해당amcanunique플래그가 참임) 그런 다음checkUnique수행할 고유성 검사 유형을 나타냅니다. 이는 고유 제한조건이 연기 가능한지 여부에 따라 달라집니다. 참조PostgreSQL : 문서 : 16 : 64.5. 토토 베이 고유성 점검12216_12274힙관계고유성 검사를 수행할 때 매개변수(이후 튜플 활성 여부를 확인하려면 힙을 조사해야 합니다).

124PostgreSQL: 문서: 16: 64.2. 인덱스 액세스 스포츠 토토 베트맨 기능49indexUnchanged부울 값은 색인화할 튜플의 성격에 대한 힌트를 제공합니다. true인 경우 튜플은 인덱스에 있는 일부 기존 튜플의 중복입니다. 새 튜플은 논리적으로 변경되지 않은 후속 MVCC 튜플 버전입니다. 이는 다음과 같은 경우에 발생합니다.업데이트색인에 포함된 열을 수정하지 않지만 그럼에도 불구하고 색인에 새 버전이 필요한 경우가 발생합니다. 인덱스 AM은 이 힌트를 사용하여 동일한 논리적 행의 여러 버전이 누적되는 인덱스 부분에 상향식 인덱스 삭제를 적용할지 결정할 수 있습니다. 키가 아닌 열이나 부분 인덱스 조건자에만 나타나는 열을 업데이트해도 값에는 영향을 미치지 않습니다.indexUnchanged. 핵심 코드는 각 튜플의indexUnchanged오탐과 거짓 부정을 모두 허용하는 낮은 오버헤드 접근 방식을 사용하는 값입니다. 인덱스 AM은 처리하면 안 됩니다.indexUnchanged튜플 가시성 또는 버전 관리에 관한 정보의 권위 있는 소스로.

함수의 부울 결과 값은 다음 경우에만 중요합니다.checkUniqueisUNIQUE_CHECK_PARTIAL. 이 경우 true 결과는 새 항목이 고유한 것으로 알려졌음을 의미하고, false는 해당 항목이 고유하지 않을 수 있음을 의미합니다(그리고 지연된 고유성 확인을 예약해야 함). 다른 경우에는 지속적인 잘못된 결과가 권장됩니다.

일부 색인은 모든 튜플을 색인화하지 않을 수 있습니다. 튜플을 색인화하지 않는 경우,아민서트아무것도 하지 않고 그냥 돌아가야 합니다.

인덱스 AM이 SQL 문 내에서 연속적인 인덱스 삽입을 통해 데이터를 캐시하려는 경우 공간을 할당할 수 있습니다.indexInfo-ii_Context그리고 데이터에 대한 포인터를 저장합니다indexInfo-ii_AmCache(처음에는 NULL이 됩니다).

IndexBulkDeleteResult *
ambulkdelete(IndexVacuumInfo *정보,
              IndexBulkDeleteResult *통계,
              IndexBulkDeleteCallback 콜백,
              무효 *callback_state);

색인에서 튜플을 삭제합니다. 이것은대량 삭제전체 색인을 스캔하고 각 항목을 삭제해야 하는지 확인하여 구현하려는 작업입니다. 전달된콜백함수는 스타일에서 호출되어야 합니다콜백(TID, callback_state)는 bool을 반환합니다., 참조된 TID로 식별되는 특정 인덱스 항목을 삭제할지 여부를 결정합니다. 삭제 작업의 효과에 대한 통계를 포함하는 NULL 또는 palloc'd 구조체를 반환해야 합니다. 정보를 전달할 필요가 없으면 NULL을 반환해도 괜찮습니다.amvacuumcleanup.

제한적이기 때문에maintenance_work_mem, ambulkdelete많은 튜플을 삭제하려면 두 번 이상 호출해야 할 수도 있습니다.통계인수는 이 인덱스에 대한 이전 호출의 결과입니다. (a 내의 첫 번째 호출에서는 NULL입니다.진공작업). 이를 통해 AM은 전체 작업에 걸쳐 통계를 축적할 수 있습니다. 일반적으로ambulkdelete전달된 경우 동일한 구조체를 수정하고 반환합니다.통계null이 아닙니다.

IndexBulkDeleteResult *
amvacuumcleanup(IndexVacuumInfo *정보,
                 IndexBulkDeleteResult *통계);

다음 이후 정리진공연산(0개 이상ambulkdelete호출). 인덱스 통계를 반환하는 것 외에는 아무 작업도 수행할 필요가 없지만 빈 인덱스 페이지 회수와 같은 대량 정리를 수행할 수 있습니다.통계무엇이든 마지막이군요ambulkdelete호출이 반환되었습니다. 또는 다음의 경우 NULL입니다.ambulkdelete삭제할 필요가 있는 튜플이 없기 때문에 호출되지 않았습니다. 결과가 NULL이 아닌 경우 palloc 구조체여야 합니다. 포함된 통계는 업데이트하는 데 사용됩니다.pg_class, 다음 사람이 보고합니다.진공if상세주어집니다. 동안 인덱스가 전혀 변경되지 않은 경우 NULL을 반환해도 괜찮습니다.진공작업이지만 그렇지 않으면 올바른 통계가 반환되어야 합니다.

amvacuumcleanup또한 완료 시 호출됩니다.분석작업. 이 경우통계은 항상 NULL이며 모든 반환 값은 무시됩니다. 이 경우는 다음을 확인하여 구별할 수 있습니다.info-analyze_only. 액세스 스포츠 토토 베트맨은 이러한 호출에서 삽입 후 정리 외에는 아무것도 수행하지 않고 autovacuum 작업자 프로세스에서만 수행하는 것이 좋습니다.

부울
amcanreturn(관계 indexRelation, int attno);

색인이 지원할 수 있는지 확인색인 전용 스캔주어진 열에 대해 열의 원래 인덱스 값을 반환합니다. 속성 번호는 1부터 시작합니다. 즉, 첫 번째 열의 attno는 1입니다. 지원되면 true를 반환하고 그렇지 않으면 false를 반환합니다. 이 함수는 포함된 열에 대해 항상 true를 반환해야 합니다(지원되는 경우). 포함된 열에는 검색할 수 없는 지점이 거의 없기 때문입니다. 액세스 방법이 인덱스 전용 스캔을 전혀 지원하지 않는 경우,amcanreturn필드의 필드IndexAmRoutine구조체는 NULL로 설정될 수 있습니다.

공허
amcostestimate(PlannerInfo *루트,
                IndexPath *경로,
                이중 루프_카운트,
                비용 *indexStartupCost,
                비용 *indexTotalCost,
                선택성 *indexSelectivity,
                이중 *색인상관관계,
                더블 *indexPages);

인덱스 스캔 비용을 추정합니다. 이 기능은 다음에서 자세히 설명됩니다.PostgreSQL : 문서 : 16 : 64.6. 색인 토토 캔 추정 기능, 아래.

바이테아 *
amoptions(ArrayType *reloptions,
           부울 검증);

인덱스에 대한 reloptions 배열을 구문 분석하고 검증합니다. 이는 null이 아닌 reloptions 배열이 인덱스에 존재할 때만 호출됩니다.reloptions텍스트다음 형식의 항목을 포함하는 배열이름=. 함수는 다음을 구성해야 합니다.바이테아값, 다음으로 복사될 값rd_options색인의 relcache 항목 필드입니다. 의 데이터 내용바이테아값은 정의할 액세스 스포츠 토토 베트맨에 대해 열려 있습니다. 대부분의 표준 액세스 스포츠 토토 베트맨은 struct를 사용합니다.StdRdOptions. 언제확인이 true이면 옵션 중 하나라도 인식되지 않거나 잘못된 값이 있는 경우 함수는 적절한 오류 메시지를 보고해야 합니다. 언제확인가 false이면 유효하지 않은 항목은 자동으로 무시되어야 합니다. (확인이미 저장된 옵션을 로드하는 경우 false입니다.pg_catalog; 유효하지 않은 항목은 액세스 스포츠 토토 베트맨이 옵션에 대한 규칙을 변경한 경우에만 찾을 수 있으며, 이 경우 사용되지 않는 항목을 무시하는 것이 적절합니다.) 기본 동작을 원할 경우 NULL을 반환해도 괜찮습니다.

부울
amproperty(Oid index_oid, int attno,
            IndexAMProperty 소품, const char *propname,
            bool *res, bool *isnull);

부동산메서드를 사용하면 색인 액세스 스포츠 토토 베트맨이 기본 동작을 재정의할 수 있습니다.pg_index_column_has_property및 관련 기능. 액세스 스포츠 토토 베트맨에 인덱스 속성 조회에 대한 특별한 동작이 없는 경우,부동산필드의 필드IndexAmRoutine구조체는 NULL로 설정될 수 있습니다. 그렇지 않으면,부동산메소드가 호출됩니다index_oid그리고attno둘 다 0입니다.pg_indexam_has_property전화 또는 함께index_oid유효하고attno0은pg_index_has_property전화 또는 함께index_oid유효하고attno0보다 큼pg_index_column_has_property호출.소품는 테스트 중인 속성을 식별하는 열거형 값이고,propname은 원래 속성 이름 문자열입니다. 핵심 코드가 속성 이름을 인식하지 못하는 경우소품isAMPROP_UNKNOWN. 액세스 방법은 다음을 확인하여 사용자 정의 속성 이름을 정의할 수 있습니다.propname경기용(사용pg_strcasecmp일치, 핵심 코드와의 일관성을 위해); 핵심 코드에 알려진 이름은 검사하는 것이 좋습니다.소품. 만약부동산메소드 반환그런 다음 속성 테스트 결과를 결정했습니다. 설정해야 합니다.*res반환하거나 설정할 부울 값으로*isnullNULL을 반환합니다. (참조된 변수는 모두 다음과 같이 초기화됩니다.거짓통화 전.) 만약부동산메소드 반환거짓그러면 핵심 코드는 속성 테스트 결과를 결정하기 위한 일반적인 논리를 진행합니다.

순서 연산자를 지원하는 액세스 방법을 구현해야 함AMPROP_DISTANCE_ORDERABLE속성 테스트. 핵심 코드는 이를 수행하는 스포츠 토토 베트맨을 모르고 NULL을 반환하기 때문입니다. 구현하는 것이 유리할 수도 있습니다.AMPROP_RETURNABLE테스트, 색인을 열고 호출하는 것보다 더 저렴하게 수행할 수 있는지 여부amcanreturn는 핵심 코드의 기본 동작입니다. 기본 동작은 다른 모든 표준 속성에 만족해야 합니다.

문자 *
ambuildphasename(int64 위상 번호);

주어진 빌드 단계 번호의 텍스트 이름을 반환합니다. 단계 번호는 다음을 통해 인덱스 빌드 중에 보고된 번호입니다.pgstat_progress_update_param인터페이스. 그런 다음 단계 이름이pg_stat_progress_create_index보기.

부울
amvalidate(Oid opclassoid);

액세스 방법이 합리적으로 수행할 수 있는 한 지정된 연산자 클래스에 대한 카탈로그 항목을 검증합니다. 예를 들어, 여기에는 필요한 모든 지원 기능이 제공되는지 테스트하는 것이 포함될 수 있습니다.검증하다opclass가 유효하지 않은 경우 함수는 false를 반환해야 합니다. 문제는 다음으로 보고되어야 합니다.ereport메시지, 일반적으로정보레벨.

공허
amadjustmembers(Oid opfamilyoid,
                 오이드 오클라소이드,
                 *연산자 나열,
                 *함수 나열);

액세스 스포츠 토토 베트맨이 합리적으로 수행할 수 있는 한 제안된 새 연산자와 연산자 계열의 함수 구성원을 검증하고 기본값이 만족스럽지 않은 경우 종속성 유형을 설정합니다. 이것은 동안 호출됩니다.오퍼레이터 클래스 생성그리고 그 동안ALTER OPERATOR 제품군 추가; 후자의 경우opclassoidisInvalidOid.목록인수는 다음의 목록입니다OpFamilyMember구조체, 정의된 대로amapi.h. 이 함수로 수행되는 테스트는 일반적으로 다음에서 수행되는 테스트의 하위 집합입니다.검증하다, 이후amadjustmembers전체 구성원 집합을 보고 있다고 가정할 수 없습니다. 예를 들어, 지원 기능의 서명을 확인하는 것은 합리적이지만 필요한 모든 지원 기능이 제공되는지 확인하는 것은 합리적이지 않습니다. 모든 문제는 오류를 발생시켜 보고할 수 있습니다. 의 종속성 관련 필드OpFamilyMember구조물은 opclass에 대한 하드 종속성을 생성하기 위해 핵심 코드에 의해 초기화됩니다.연산자 클래스 생성또는 다음과 같은 경우 opfamily에 대한 소프트 종속성ALTER OPERATOR 제품군 추가. amadjustmembers다른 동작이 더 적절할 경우 이 필드를 조정할 수 있습니다. 예를 들어, GIN, GiST 및 SP-GiST는 항상 연산자 멤버가 opfamily에 대한 소프트 종속성을 갖도록 설정합니다. 왜냐하면 연산자와 opclass 사이의 연결은 이러한 인덱스 유형에서 상대적으로 약하기 때문입니다. 따라서 운영자 구성원을 자유롭게 추가하고 제거하는 것이 합리적입니다. 선택적 지원 기능에는 일반적으로 소프트 종속성이 부여되므로 필요한 경우 제거할 수 있습니다.

물론 색인의 목적은 색인 생성 가능 항목과 일치하는 튜플에 대한 스캔을 지원하는 것입니다.어디조건, 흔히 a라고 함한정자또는스캔 키. 인덱스 스캐닝의 의미는 다음에서 더 자세히 설명됩니다.PostgreSQL : 문서 : 16 : 64.3. 인덱스 와이즈 토토, 아래. 인덱스 액세스 방법은 다음을 지원할 수 있습니다.일반색인 스캔,비트맵색인 스캔 또는 둘 다. 인덱스 액세스 방법이 제공해야 하거나 제공할 수 있는 스캔 관련 기능은 다음과 같습니다.

IndexScanDesc
ambeginscan(관계 인덱스Relation,
             int nkeys,
             int norderbys);

인덱스 스캔을 준비하세요.n키그리고노더비매개변수는 스캔에 사용될 한정어 및 순서 연산자의 수를 나타냅니다. 이는 공간 할당 목적으로 유용할 수 있습니다. 스캔 키의 실제 값은 아직 제공되지 않습니다. 결과는 palloc'd 구조체여야 합니다. 구현상의 이유로 인덱스 액세스 방법반드시호출하여 이 구조체를 생성RelationGetIndexScan(). 대부분의 경우ambeginscan호출을 하고 아마도 잠금을 획득하는 것 외에는 거의 수행하지 않습니다. 인덱스 스캔 시작의 흥미로운 부분은 다음과 같습니다.amrescan.

공허
amrescan(IndexScanDesc 스캔,
          스캔키 키,
          int nkeys,
          ScanKey 주문,
          int norderbys);

가능한 새로운 스캔 키를 사용하여 인덱스 스캔을 시작하거나 다시 시작합니다. (이전에 전달된 키를 사용하여 다시 시작하려면 NULL이 전달됩니다.및/또는orderbys.) 키 수 또는 정렬 기준 연산자가 전달된 것보다 큰 것은 허용되지 않습니다.ambeginscan. 실제로는 중첩 루프 조인에 의해 새로운 외부 튜플이 선택되어 새로운 키 비교 값이 필요할 때 다시 시작 기능이 사용되지만 스캔 키 구조는 동일하게 유지됩니다.

부울
amgettuple(IndexScanDesc 스캔,
            스캔 방향 방향);

주어진 스캔에서 다음 튜플을 가져오며, 주어진 방향(인덱스에서 앞으로 또는 뒤로)으로 이동합니다. 튜플을 얻었으면 true를 반환하고, 일치하는 튜플이 남아 있지 않으면 false를 반환합니다. 실제 경우 튜플 TID는스캔구조. 참고하세요성공은 인덱스에 스캔 키와 일치하는 항목이 포함되어 있다는 의미일 뿐, 튜플이 반드시 힙에 여전히 존재하거나 호출자의 스냅샷 테스트를 통과한다는 의미는 아닙니다. 성공하면,amgettuple또한 설정해야 함스캔-xs_recheck참 또는 거짓. False는 인덱스 항목이 스캔 키와 확실히 일치함을 의미합니다. True는 이것이 확실하지 않음을 의미하며, 스캔 키로 표시되는 조건을 가져온 후 힙 튜플에 대해 다시 확인해야 합니다. 이 조항은 다음을 지원합니다.손실색인 연산자. 재검사는 스캔 조건까지만 확장됩니다. 부분 인덱스 조건자(있는 경우)는 절대로 다시 확인되지 않습니다.amgettuple발신자.

색인이 지원하는 경우PostgreSQL : 문서 : 16 : 11.9. 무지개 토토 전용 스캔 및 무지개 토토 커버(즉,amcanreturn모든 열에 대해 true를 반환합니다. 성공하면 AM도 확인해야 합니다.스캔-xs_want_itup, 이것이 사실이라면 색인 항목에 대해 원래 색인화된 데이터를 반환해야 합니다. 해당 열amcanreturnfalse를 반환하면 null로 반환될 수 있습니다. 데이터는 형식으로 반환될 수 있습니다.IndexTuple포인터가 다음에 저장됨스캔-xs_itup, 튜플 설명자 포함스캔-xs_itupdesc; 또는 a의 형태로힙튜플포인터가 다음에 저장됨스캔-xs_hitup, 튜플 설명자 포함스캔-xs_hitupdesc. (후자 형식은 형식에 맞지 않을 수 있는 데이터를 재구성할 때 사용해야 합니다.IndexTuple.) 두 경우 모두 포인터가 참조하는 데이터 관리는 액세스 방법의 책임입니다. 데이터는 적어도 다음 시점까지 양호한 상태로 유지되어야 합니다.amgettuple, amrescan, 또는수정스캔스캔을 요청하세요.

amgettuple액세스 방법이 지원하는 경우에만 기능을 제공해야 합니다.일반색인 스캔. 그렇지 않은 경우에는amgettuple필드 안의 필드IndexAmRoutine구조체는 NULL로 설정되어야 합니다.

int64
amgetbitmap(IndexScanDesc 스캔,
             TIDB비트맵 *tbm);

주어진 스캔에서 모든 튜플을 가져와서 호출자 제공에 추가TIDB비트맵(즉, 또는 이미 비트맵에 있는 세트에 대한 튜플 ID 세트). 가져온 튜플의 수가 반환됩니다(예를 들어 일부 AM은 중복을 감지하지 못하는 대략적인 수일 수 있습니다). 비트맵에 튜플 ID를 삽입하는 동안amgetbitmap은 특정 튜플 ID에 대해 검색 조건을 다시 확인해야 함을 나타낼 수 있습니다. 이는 다음과 유사합니다.xs_recheck출력 매개변수amgettuple. 참고: 현재 구현에서 이 기능에 대한 지원은 비트맵 자체의 손실 저장에 대한 지원과 통합되어 있으므로 호출자는 다시 확인 가능한 튜플에 대한 스캔 조건과 부분 인덱스 조건자(있는 경우)를 모두 다시 확인합니다. 그러나 그것이 항상 사실이 아닐 수도 있습니다.amgetbitmap그리고amgettuple동일한 인덱스 스캔에서는 사용할 수 없습니다. 사용할 때 다른 제한 사항도 있습니다.amgetbitmap, 설명된 대로PostgreSQL : 문서 : 16 : 64.3. 인덱스 와이즈 토토.

amgetbitmap액세스 방법이 지원하는 경우에만 함수를 제공해야 합니다.비트맵색인 스캔. 그렇지 않은 경우에는amgetbitmap그 안에 있는 필드IndexAmRoutine구조체는 NULL로 설정되어야 합니다.

공허
amendscan(IndexScanDesc 스캔);

스캔을 종료하고 자원을 해제합니다.스캔구조체 자체는 해제되어서는 안 되지만, 액세스 방법에 의해 내부적으로 취해진 모든 잠금 또는 핀은 해제되어야 하며, 다음에 의해 할당된 다른 메모리도 해제되어야 합니다.ambeginscan및 기타 스캔 관련 기능.

공허
ammarkpos(IndexScanDesc 스캔);

현재 스캔 위치를 표시합니다. 액세스 방법은 스캔당 하나의 기억된 스캔 위치만 지원하면 됩니다.

ammarkpos기능은 액세스 방법이 순서화된 스캔을 지원하는 경우에만 제공되어야 합니다. 그렇지 않은 경우에는ammarkpos필드의 필드IndexAmRoutine구조체가 NULL로 설정될 수 있습니다.

공허
amrestrpos(IndexScanDesc 스캔);

가장 최근에 표시된 위치로 스캔을 복원합니다.

amrestrpos기능은 액세스 방법이 순서화된 스캔을 지원하는 경우에만 제공되어야 합니다. 그렇지 않은 경우에는amrestrpos필드의 필드IndexAmRoutine구조체가 NULL로 설정될 수 있습니다.

일반 인덱스 스캔을 지원하는 것 외에도 일부 인덱스 유형을 지원할 수 있습니다.병렬 인덱스 스캔: 여러 백엔드가 색인 스캔을 수행하는 데 협력할 수 있습니다. 인덱스 액세스 방법은 각 협력 프로세스가 일반적인 비병렬 인덱스 스캔으로 수행되는 튜플의 하위 집합을 반환하도록 항목을 정렬해야 하지만, 이러한 하위 집합의 합집합은 일반적인 비병렬 인덱스 스캔에서 반환되는 튜플 집합과 동일해야 합니다. 또한 병렬 스캔에서 반환된 튜플의 전역 순서가 필요하지 않지만 각 협력 백엔드 내에서 반환된 튜플 하위 집합의 순서는 요청된 순서와 일치해야 합니다. 병렬 인덱스 스캔을 지원하기 위해 다음 기능을 구현할 수 있습니다.

크기
amestimateparallelscan (void);

병렬 스캔을 수행하기 위해 액세스 방법이 필요한 동적 공유 메모리의 바이트 수를 추정하고 반환합니다. (이 숫자는 AM 독립적 데이터에 필요한 공간을 대신하는 것이 아니라 추가되는 것입니다.ParallelIndexScanDescData.)

병렬 스캔을 지원하지 않거나 필요한 추가 저장 바이트 수가 0인 액세스 방법에 대해서는 이 기능을 구현할 필요가 없습니다.

공허
aminitparallelscan(void *target);

이 함수는 병렬 스캔 시작 시 동적 공유 메모리를 초기화하기 위해 호출됩니다.대상최소한 이전에 반환된 바이트 수를 가리킵니다.amestimateparallelscan, 이 함수는 원하는 데이터를 저장하기 위해 해당 공간을 사용할 수 있습니다.

병렬 스캔을 지원하지 않는 액세스 방법이나 필요한 공유 메모리 공간에 초기화가 필요하지 않은 경우에는 이 기능을 구현할 필요가 없습니다.

공허
amparallelrescan(IndexScanDesc 스캔);

이 함수는 구현된 경우 병렬 인덱스 스캔을 다시 시작해야 할 때 호출됩니다. 다음으로 설정된 공유 상태를 재설정해야 합니다.aminitparallelscan스캔이 처음부터 다시 시작됩니다.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.