MySQL-JDBC 드라이버로 인한 버그 설명
문제 배경
회사는 전자상거래 시스템에 종사하고 있으며 전체 시스템은 Huawei Cloud를 기반으로 구축되었습니다. 시스템을 설계할 때 후속 사용자 및 주문 수가 상대적으로 많다는 점을 고려하면 일부 대규모 데이터베이스 구성 요소를 사용해야 합니다. 관계형 데이터베이스의 경우 후속 데이터 볼륨의 급격한 증가를 고려하여 MySQL에 직접 쓰는 대신 Huawei Cloud의 분산 데이터베이스 미들웨어 DDM을 사용했습니다. DDM을 사용한 후에는 기업이 인지하지 못하는 사이에 MySQL 읽기 인스턴스 수를 직접 늘려 읽기 성능을 선형적으로 향상시킬 수 있습니다. 또한 미들웨어 수준에서 하위 데이터베이스와 테이블을 지원하여 대규모 관계형 데이터베이스에 대한 작업을 제공합니다. 단순히 전자상거래 시스템에 맞게 맞춤화되었습니다.
DDM 자체는 클러스터 형태로 서비스를 제공하며, 다수의 연결 IP 주소가 개방되어 업무에 활용됩니다. 로드 밸런싱 계층이 필요합니다. 로드 밸런싱을 위해 LB를 추가하는 기존 방법을 사용하면 추가 전송 계층이 발생하여 성능 손실이 발생합니다. 따라서 MySQL-JDBC에서 제공하는 클라이언트 로드밸런싱 기능을 그대로 사용한다.
논리적 구조는 아래 그림과 같습니다.
▲기업은 MySQL-JDBC의 Loadbalance를 통해 여러 DDM 노드에 액세스할 수 있습니다. MySQL-JDBC는 로드 밸런싱 기능을 제공합니다.
문제 설명
MySQL JDBC 드라이버의 클라이언트 로드 밸런싱 기능이 잘 실행되고 있으며 성능도 놀랍습니다. 그런데 얼마 전 이유 없이 사업요청이 실패했습니다. 진짜 머니가 관련된 전자상거래 주문 모듈을 담당하고 있는데 이 문제 때문에 식은땀이 났습니다...
그래서 재빨리 백그라운드 로그를 확인해보니 DDM에 접속했을 때 예외가 발생했습니다. , Huawei Cloud DDM 서비스를 직접 제공했습니다.
Huawei Cloud의 서비스는 여전히 매우 좋습니다. 30분 이내에 전담 직원이 저에게 연락하여 문제를 해결하기 위해 협력했습니다.
저희 비즈니스 로그를 내려 DDM 지원 담당자와 함께 분석한 결과 다음과 같이 오류가 보고된 것을 확인했습니다. 근본 원인은 MySQL 드라이버의 버그로 밝혀졌으며, StackOverflow 로컬 스택을 발생시켰습니다. 오버플로... 버그로 인한 살인으로 밝혀졌습니다. DDM 서비스를 오해해서 정말 죄송합니다
스택을 보면 예외로 인해 버그가 발생한 것을 알 수 있습니다. MySQL-JDBC에서는 스택이 오버플로될 때까지 루프 호출이 발생합니다. Huawei DDM 지원 직원의 제안에 따라 드라이버 코드가 디컴파일되었으며 실제로 루프 중첩 가능성이 있음을 알 수 있습니다.
로드밸런스 폴링 연결 -> 새 연결과 이전 연결의 상태를 동기화합니다. -> 서버에 SQL을 보냅니다. ->
해당 코드는 다음과 같습니다.
이렇게 명백한 버그인데 MySQL이 발견하지 못할 거라고는 생각하지 않습니다. 현재 5.1.44 버전의 드라이버를 사용하고 있으며 최신 5.1.66 코드를 확인한 결과 이 문제가 실제로 수정되었음을 확인했습니다.
SET 및 SHOW 문을 필터링하여 확인했습니다. , 이 문제는 방지됩니다. 중첩 루프가 발생합니다.
그러나 5.1.66에서는 postProcess가 호출되는 모든 곳에 SQL이 있는 것은 아니기 때문에 여기의 코드는 널 포인터 예외를 발생시킵니다. MySQL JDBC 개발자들이 테스트를 하지 마세요...
말도 안 돼요, 5.1.44의 코드를 분석한 결과 loadBalanceAutoCommitStatementThreshold 매개 변수의 값을 적절하게 조정하면 루프 중첩도 피할 수 있다는 사실을 발견했습니다. 우리 환경을 5로 변경했습니다. 수정 후 일주일 동안 아무런 문제 없이 원활하게 실행되었습니다.
수정 계획
loadBalanceAutoCommitStatementThreshold를 5로 수정했는데, 문제는 비즈니스에 시간이 많이 걸리는 SQL이 포함된 경우 DDM 로드 불균형이 발생할 수 있다는 것입니다. 하지만 현재 상황으로 볼 때 DDM의 성능은 여전히 상대적으로 강합니다~
관련 기사:
PHP 드라이버 MongoDB 정수 문제에 대한 버그 및 전략
WebLogic에서 MySql 데이터베이스용 JDBC 드라이버 구성
관련 영상 :
부울 교육 Yan Shiba mysql 소개 비디오 튜토리얼
위 내용은 MySQL-JDBC 드라이버로 인한 버그 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











InnoDB의 전체 텍스트 검색 기능은 매우 강력하여 데이터베이스 쿼리 효율성과 대량의 텍스트 데이터를 처리 할 수있는 능력을 크게 향상시킬 수 있습니다. 1) InnoDB는 기본 및 고급 검색 쿼리를 지원하는 역 색인화를 통해 전체 텍스트 검색을 구현합니다. 2) 매치 및 키워드를 사용하여 검색, 부울 모드 및 문구 검색을 지원합니다. 3) 최적화 방법에는 워드 세분화 기술 사용, 인덱스의 주기적 재건 및 캐시 크기 조정, 성능과 정확도를 향상시키는 것이 포함됩니다.

이 기사는 MySQL의 Alter Table 문을 사용하여 열 추가/드롭 테이블/열 변경 및 열 데이터 유형 변경을 포함하여 테이블을 수정하는 것에 대해 설명합니다.

전체 테이블 스캔은 MySQL에서 인덱스를 사용하는 것보다 빠를 수 있습니다. 특정 사례는 다음과 같습니다. 1) 데이터 볼륨은 작습니다. 2) 쿼리가 많은 양의 데이터를 반환 할 때; 3) 인덱스 열이 매우 선택적이지 않은 경우; 4) 복잡한 쿼리시. 쿼리 계획을 분석하고 인덱스 최적화, 과도한 인덱스를 피하고 정기적으로 테이블을 유지 관리하면 실제 응용 프로그램에서 최상의 선택을 할 수 있습니다.

예, MySQL은 Windows 7에 설치 될 수 있으며 Microsoft는 Windows 7 지원을 중단했지만 MySQL은 여전히 호환됩니다. 그러나 설치 프로세스 중에 다음 지점이 표시되어야합니다. Windows 용 MySQL 설치 프로그램을 다운로드하십시오. MySQL의 적절한 버전 (커뮤니티 또는 기업)을 선택하십시오. 설치 프로세스 중에 적절한 설치 디렉토리 및 문자를 선택하십시오. 루트 사용자 비밀번호를 설정하고 올바르게 유지하십시오. 테스트를 위해 데이터베이스에 연결하십시오. Windows 7의 호환성 및 보안 문제에 주목하고 지원되는 운영 체제로 업그레이드하는 것이 좋습니다.

기사는 인증서 생성 및 확인을 포함하여 MySQL에 대한 SSL/TLS 암호화 구성에 대해 설명합니다. 주요 문제는 자체 서명 인증서의 보안 영향을 사용하는 것입니다. [문자 수 : 159]

기사는 MySQL Workbench 및 Phpmyadmin과 같은 인기있는 MySQL GUI 도구에 대해 논의하여 초보자 및 고급 사용자를위한 기능과 적합성을 비교합니다. [159 자].

클러스터 인덱스와 비 클러스터 인덱스의 차이점은 1. 클러스터 된 인덱스는 인덱스 구조에 데이터 행을 저장하며, 이는 기본 키 및 범위별로 쿼리에 적합합니다. 2. 클러스터되지 않은 인덱스는 인덱스 키 값과 포인터를 데이터 행으로 저장하며 비 예산 키 열 쿼리에 적합합니다.

기사는 MySQL에서 파티셔닝, 샤딩, 인덱싱 및 쿼리 최적화를 포함하여 대규모 데이터 세트를 처리하기위한 전략에 대해 설명합니다.
