PT-업그레이드의 쿼리가 TCPDUMP로 수집 된 PT 업그레이드에서 "테이블"DB.TABLE '또는 "TABLE'DB.TABLE '또는"TABLE'DB.TABLE '없음 "이 없습니다.
-
26-09-2020 - |
문제
다음 tcpdump 명령을 사용하여 마스터에서 쿼리를 수집했습니다.
tcpdump -i any -s 65535 -x -n -nn -q -tttt 'port 3306' > tcpdump.tcp
.
쿼리는 여러 데이터베이스간에 실행됩니다.
i 다음이 파일을 다음 명령을 사용하여 pt-query-digest를 통해 실행됩니다.
pt-query-digest --output=slowlog --no-report --sample 100 --type tcpdump tcpdump.tcp > slow.log
.
다음과 같은 두 개의 노예에 대해 PT-업그레이드를 실행했습니다 :
pt-upgrade --user user --ask-pass --run-time=1h --upgrade-table percona.pt_upgrade h=10.1.1.1 h=10.1.1.2 slow.log
.
쿼리가 실행되어야하는 데이터베이스를 지정하는 것으로 나타나지 않으므로 실패가 있습니다.
여러 DBS에서 쿼리를 수집 할 때 PT 업그레이드를 사용하도록 어떻게되어 왔는가? 이는 문서에서 어디서나 지정되지 않았습니다.
특정 데이터베이스에 대한 쿼리를 출력 한 다음 PT 업그레이드로 --Database를 지정하는 것만으로 pt-query-digest로 -filter를 사용하여 -filter를 사용해야합니다. 데이터베이스 당 헹굼 및 반복하십시오.
내 거대한 TCPDUMP 캡처를 구문 분석하는 데 몇 시간이 걸리므로 여기에있는 모든 지침은 인정 받고 있습니다.
감사합니다!
p.s.
이이 . 기사 출발점 으로서만 구식입니다. 예를 들어, PT-Query-Digest에는 더 이상 - 프린트 옵션이 없습니다.
해결책
-
- asmple을 생략하면 작동하지 않습니다 -
-
(수동에서)
또한 pt-query-digest가 데이터베이스를보고하지 못할 수 있습니다. TCPDUMP 출력을 파싱 할 때 쿼리가 쿼리됩니다.데이터베이스가 발견됩니다 새 클라이언트의 초기 연결 이벤트 또는 언제 실행됩니다.TCPDUMP 출력이 이들 중 어느 것도 포함하지 않으면 pt-query-digest는 데이터베이스를 검색 할 수 없습니다.
- tcpdump 대신 일반 로그를 사용하는 것을 고려하십시오.
다른 팁
비슷한 문제가 있습니다. 나는 테이블을 누락하고 사용법을 놓치고 있습니다. 때로는 사용 문이 있지만 잘못된 데이터베이스가있는 경우가 있습니다. 나는 아주 간단한 해결 방법을 사용합니다.
(Prelude) 첫 번째 문제 : My Slow.log는 60Go 길이
-
i -l 옵션을 사용하여 분할로 로 편집하는 명령문이 없는지 확인하십시오.
머리 - Numberoflines ab >> AA는 예를 들어
-
문제의 루트 인 명령문을 찾습니다 (숫양이있는 RAM에 1Go를 갖고 싶지 않으려는 경우)
-
sed -e '/ nameofscriptinyourfilewhichisinthefirstline.php/, +nd'
-
문제를 개발자에게 전달하고 편집 된 Slowlog를 다시 실행하십시오.
-
아무도 오류가 더 이상 발견되지 않을 때까지 2 ~ 4 단계를 반복합니다. 이런 종류의 명령을 통해 SED 목록을 실행할 수 있습니다
sed -e '...'| sed -e '...'| sed - '...'> corelec_aa
n은 편집 해야하는 줄의 수입니다. (내 관점에서 개발자가 디버깅 목적으로 논문 정보를 넣어야하며 어쨌든 우리의 역사적인 프레임 워크의 일부입니다).
Fianl 문제 : 파서가 그들을 이해할 수 없기 때문에 같은 "%"와 같은 쿼리가 통증이 있음을 발견했습니다. (여전히 해결책을 찾고 있습니다).
이렇게하면 기쁩니다. 깨끗하지는 않지만, 그것은 오랫동안 그것이 우리가 어떻게 든 그것이 그것을 만들었 지 만, 우리의 프레임 워크에 맞지 않는 모든 쿼리를 찾을 수있게 해줍니다. 그리고 우리는 MySQL 버전에서 매우 늦은 이래로, 결국 저를 위해 일하기를 즐겁게하는 것이 나의 기쁨입니다. ;)
p.s. : 이것은 내 첫 번째 게시물입니다.
우리가 끝난 일은 테이블 이름을 기반으로하는 Slow.log에서 데이터베이스 별 (원시) 로그 파일에 대한 쿼리를 쿼리하는 것입니다.그런 다음 우리는 PT-업그레이드를 사용하여 rawlog와 --database를 지정했습니다.