>  기사  >  데이터 베이스  >  mysql8.x에서 삽입 무시 성능 문제를 해결하는 방법

mysql8.x에서 삽입 무시 성능 문제를 해결하는 방법

PHPz
PHPz앞으로
2023-06-03 11:25:112823검색

Mysql 8.x에서 Insert 무시 성능 문제

mysql에서는 교체 효율성이 매우 낮습니다. 여러 프로세스가 동시에 사용되면 테이블이 잠기므로 업데이트에는 중복을 사용해야 한다는 것은 잘 알려져 있습니다. 삽입 무시 작업을 사용하더라도 성능 문제가 발생할 수 있다고는 예상하지 못했습니다. 이 문제를 기록하고 싶습니다.

초기화 데이터를 테이블에 삽입하기 위해 삽입 무시를 사용하여 데이터베이스에 동시에 데이터를 삽입하는 10개의 프로세스를 열었습니다. 각 삽입 무시 문에는 7개의 데이터 행이 포함됩니다. 예기치 않게 온라인에 접속하여 스크립트를 실행하기 시작한 후 데이터베이스에 많은 잠금 테이블이 나타났습니다. innodb 상태 로그를 보면 잠겨 있는 것은 테이블의 자동 증가 ID의 기본 키입니다.

오랜 시간 동안 디버깅한 결과, 삽입 무시 시 삽입된 데이터의 각 행에 대해 S 잠금이 수행되어 동시에 고유 ID를 감지하는 것으로 나타났습니다. 기본 키는 의도 잠금(삽입 의도)으로 추가됩니다. 고유 키가 더 복잡하면 다른 삽입도 추가하려고 할 때 기본 키의 삽입 의도 잠금이 항상 사용됩니다. 삽입 의도가 기본 키 ID에 잠겨 교착 상태가 발생합니다.

위 상황은 mysql 8.x에서 발견되었습니다. 이전에 mysql 하위 버전에서 관련 문제를 겪은 적이 없어서 하위 버전 mysql의 insertignore에 함정이 있는지는 모르겠지만, 8.x 버전이 삽입하는 것이 가장 좋습니다. 여러 행의 데이터를 삽입하지 마세요. 특히 고유 키가 더 복잡한 경우(3~4개 필드로 구성됨)

mysql insertignore() 함수

INSERT IGNORE 문

언제 이 INSERT 문을 사용하여 여러 행이 있는 테이블에 추가하면 처리 중에 오류가 발생하면 MySQL은 문을 종료하고 오류를 반환합니다. 결과적으로 테이블에 행이 삽입되지 않습니다.

단, insert 무시 문을 사용하면 오류를 일으키는 유효하지 않은 데이터가 포함된 행은 무시되고 유효한 데이터가 포함된 행이 테이블에 삽입됩니다.

아아아아

위 내용은 mysql8.x에서 삽입 무시 성능 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제