Microsoft Jet SQL 쿼리 로깅 또는 "고객의 프로그램을 어떻게 디버그합니까?"

StackOverflow https://stackoverflow.com/questions/153053

문제

문제 :

우리는 가장 큰 고객이 작성한 프로그램을 사용하여 주문을 받고 트랜 포트를 예약하고 다른 주문 관련 작업을 수행합니다. 우리는 다른 기회가 없지만 프로그램을 사용할 수있는 기회는 없으며 고객은 프로그램 문제에 관해서는 매우 지원하지 않습니다. 우리는 단지 프로그램과 함께 살아야합니다.

이제이 프로그램은 대부분 두 명 이상의 사용자와 함께 사용할 때 매우 느리게 진행되므로 커튼 뒤를보고 문제의 출처를 찾으려고 노력했습니다.

지금까지 알게 된 프로그램에 대한 몇 가지 요점 :

  • VB 6.0으로 작성되었습니다
  • 한 사용자의 컴퓨터에 폴더가있는 암호로 보호 된 액세스 -DB (Access 2000 MDB)를 사용합니다.
  • 해당 폴더는 네트워크를 통해 공유되며 다른 모든 사용자가 사용합니다.
  • MSJET40.DLL 버전 4.00.9704를 사용하여 액세스와 통신합니다. 나는 그것이 ado 인 것 같아?

나는 또한 사용했다 프로세스 모니터 파일 액세스를 모니터링하고 프로그램이 왜 그렇게 느린 지 알아 내기 위해 : 프로그램이 유휴 상태 일 때도 MDB 파일에서 수천 개의 읽기 작업을 수행하고 있습니다. 네트워크를 통해 이것은 물론 엄청나게 느립니다.

프로세스 모니터 추적 http://img217.imageshack.us/img217/1456/screenshothw5.png

진짜 질문 :

읽기 활동을 담당하는 쿼리를 모니터링하는 방법이 있습니까? 설정할 수있는 추적 플래그가 있습니까? 제트 DLL을 연결 하시겠습니까? 이 프로그램이 제트기가 프로세스에서 많은 데이터를 읽게하는 비싼 쿼리를하고 있다고 생각합니다.

추신 : 나는 이미 회사 파일 서버에 MDB를 배치하려고 시도하여 액세스가 현지 점유율보다 느리게 느슨한 성공을 거두었습니다. 또한 성공없이 클라이언트의 잠금 메커니즘 (기회 적 잠금)을 변경하려고 시도했습니다.

무슨 일이 일어나고 있는지 알고 싶습니다. 고객의 개발자가 프로그램을 더 빨리 만들도록 도와주는 어려운 사실과 제안이 필요합니다.

도움이 되었습니까?

해결책

Quess Wise Wise에서 정확히 어떤 액세스를 수행하고 있는지에 대한 지저분한 손을 얻으려면 JetshowPlan이라는 문서화되지 않은 기능이 있습니다. 레지스트리에서 켜지면 showplan.out 텍스트 파일. 세부 사항이 있습니다이 TechRepublic 기사 번갈아 하는, 여기에 요약 :

ShowPlan 옵션은 Jet 3.0에 추가되었으며 쿼리의 계획이 포함 된 텍스트 파일을 생성합니다. (ShowPlan은 하위 쿼리를 지원하지 않습니다.) LEGISTRES에 디버그 키를 추가하여 다음과 같이 활성화해야합니다.

\\HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\JET\4.0\Engines\Debug

새 디버그 키에서 이름이 지정된 문자열 데이터 유형을 추가하십시오. JETSHOWPLAN(모든 대문자를 사용해야합니다). 그런 다음 키 값을 추가하십시오 ON 기능을 활성화합니다. 액세스가 백그라운드에서 실행중인 경우 기능을 닫고 기능이 작동하도록 다시 시작해야합니다.

ShowPlan이 활성화되면 Jet는 이름이 지정된 텍스트 파일을 만듭니다. SHOWPLAN.OUT(당신의 안에서 끝날 수 있습니다 My Documents 제트가 쿼리를 컴파일 할 때마다 폴더 또는 현재 기본 폴더를 사용하고 있습니다. 그런 다음 제트가 쿼리를 실행하는 방법에 대한 단서에 대한이 텍스트 파일을 볼 수 있습니다.

키의 값을 OFF 구체적으로 사용하지 않는 한. Jet는 계획을 기존 파일에 추가하고 결국 프로세스는 실제로 속도를 늦 춥니 다. 특정 쿼리 계획을 검토해야 할 때만 기능을 켜십시오. 데이터베이스를 열고 쿼리를 실행 한 다음 기능을 비활성화하십시오.

악몽 문제를 추적하기 위해서는 타의 추종을 불허합니다. 비싼 산업 데이터베이스에서 얻는 종류입니다.

다른 팁

네트워크에 Packet Sniffer (Wireshark와 같은)를 던져서 한 사용자와 호스트 시스템 사이의 트래픽을 볼 수 있습니까?

ODBC 연결을 사용하는 경우 로깅을 활성화 할 수 있습니다.

  1. ODBC 데이터 소스 관리자를 시작하십시오.
  2. 추적 탭을 선택하십시오
  3. 지금 추적 시작 버튼을 선택하십시오.
  4. 적용 또는 확인을 선택하십시오.
  5. 앱을 잠시 실행하십시오.
  6. ODBC 관리자로 돌아갑니다.
  7. 추적 탭을 선택하십시오.
  8. 지금 추적 중지 버튼을 선택하십시오.
  9. 추적은 로그 파일 경로 상자에 처음 지정된 위치에서 볼 수 있습니다.

첫 번째 질문 : MS Access 2000 이상의 사본이 있습니까?

그렇다면 : MDB가 "비밀번호 보호"라고 말할 때 MS Access를 사용하여 열리려고 할 때 비밀번호에 대한 프롬프트가 발생하거나 사용자 이름과 비밀번호를 자랑하는 것을 의미합니까? (또는 "foo.mdb 객체를 사용하는 데 필요한 권한이 없습니다."라는 오류 메시지를 제공합니다.?)

후자 (사용자 수준 보안) 인 경우 MDB와 함께하는 해당 .MDW 파일을 찾으십시오. 당신이 그것을 발견하면, 이것은 MDB를 열기위한 "키"로 사용되는 "작업 그룹 정보 파일"입니다. 다음과 같은 대상으로 데스크탑 단축키를 만들어보십시오.

"Path to MSACCESS.EXE" "Path To foo.mdb" /wrkgrp "Path to foo.mdw"

MS Access는 VB6 앱이 요구하는 것과 동일한 사용자 이름과 비밀번호를 자극해야합니다. 이를 통해 최소한 MDB 파일을 열고 테이블 구조를보고 명백한 설계 결함이 있는지 확인할 수 있습니다.

그 외에도, 내가 아는 한, Eduardo는 개발자의 소스 코드에서 디버거를 실행하여 실시간 쿼리가 수행하는 작업을 정확히 찾아야 할 것이 좋습니다.

개발자의 도움 없이는 불가능합니다. 죄송합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top