#1227-Access denied;you need(at least one of)the SUPER privilege (s) for this operation
해결 방법: set 관련 매개변수의 수정이 필요한 경우, 콘솔 인스턴스 관리 페이지의 [데이터베이스 관리]>[매개변수 설정] 기능을 사용해 완료할 수 있습니다.pt-online-schema-change
를 참고하십시오.begin
을 먼저 실행하면 오작업으로 인한 데이터 손실 위험을 낮출 수 있습니다. 오작업 시 TencentDB for MySQL의 롤백 기능을 사용할 수 있습니다(현재 5일 이내 임의 시간대로 롤백 지원). 관련 테이블이 데이터베이스 간, 테이블 간 로직과 관련되어 있지 않다면 빠른 롤백 또는 고속 롤백을 사용해 데이터를 더욱 빨리 복구할 수 있습니다. 롤백 시 DB 테이블 이름은 '기존 DB 테이블 이름_bak'으로 생성됩니다.row_format
은 반드시 고정되지 않아야 합니다.binlog_format
이 row인 경우 일괄 삭제 데이터에 기본 키가 없으면 심각한 마스터/슬레이브 딜레이가 발생합니다.select xxx where a = x and b = x;
에서 a와 b가 함께 그룹 인덱스를 생성하고 a의 구분도가 더 높은 경우 idx_ab(a,b)'를 생성합니다. 비등호와 등호가 혼합된 판단 조건이 있는 경우 반드시 등호 조건 열을 앞에 놓아야 합니다. 예를 들어,
where a xxx and b = xxx`는 a의 구분도가 더 높아도 반드시 b를 인덱스의 가장 앞 열에 놓아야 합니다. 인덱스 a에 접근할 수 없기 때문입니다.select a,b from xxx where a = xxx
에서 a가 기본 키가 아니라면 a, b 두 개 열의 복합 인덱스를 생성할 수 있습니다. 이 경우 테이블 복구를 하지 않습니다.UPDATE, DELETE 작업은 LIMIT를 사용하지 않고, 반드시 WHERE를 사용해 정확히 매칭합니다. LIMIT는 랜덤이므로 해당 작업은 데이터 오류를 일으킬 수 있습니다.
INSERT INTO t_xxx VALUES(xxx)
를 사용하지 마십시오. 테이블 구조 변경으로 인한 데이터 오류가 발생하지 않도록, 반드시 삽입하는 열의 속성을 명시적으로 지정해야 합니다.
SQL 명령에서 가장 흔한 인덱스의 효력이 사라지는 상황에 주의해야 합니다.
내장 유형을 전환합니다. 인덱스 a의 유형이 varchar인 경우, SQL 명령을 where a = 1; varchar로 작성하면 int로 전환됩니다.
인덱스 열에 수학 계산과 함수 등의 작업을 진행합니다. 예를 들어, 함수를 사용해 날짜 열을 포맷 처리합니다.
join 열 문자 세트 불일치 시 주의해야 합니다.
여러 열의 정렬 순서 불일치에 주의해야 합니다. 인덱스가 (a,b)인 경우 SQL 명령은 order by a b desclike입니다.
모호한 쿼리를 사용할 경우 문자 세트 유형 xx%
형식은 일부 인덱스에 접근할 수 있으나, 다른 상황에서는 인덱스에 접근할 수 없습니다.
네거티브 쿼리(not, !=, not in 등) 사용 시 주의해야 합니다.
필요에 따라 요청하고 select *
를 거부하여 다음 문제를 방지합니다.
innodb_buffer_pool_size
로 가져와 조회 히트율이 감소하는 문제 최대한 대규모 트랜잭션 사용을 피하십시오. 대규모 트랜잭션을 소규모 트랜잭션으로 분할하여 마스터/슬레이브 딜레이를 방지합니다.
비즈니스 코드의 트랜잭션을 즉시 제출해 불필요한 락 대기가 발생하지 않도록 합니다.
다중 테이블 join을 적게 사용하고, 큰 테이블은 join을 금지합니다. 두 개의 테이블을 join할 때에는 반드시 작은 테이블을 드라이버 테이블로 만들고, join 열은 문자 세트가 일치해야 하며 모두 인덱스가 있어야 합니다.
LIMIT 페이징을 최적화합니다. LIMIT 80000, 10과 같은 작업은 80010개의 기록을 검색한 후 다시 10개를 반환하는 작업으로, 데이터베이스에 큰 부담을 줍니다. 먼저 첫 번째 기록의 위치를 확인하고 다시 페이징하는 것을 권장합니다. 예시: SELECT * FROM test WHERE id >= ( SELECT sql_no_cache id FROM test order by id LIMIT 80000,1 ) LIMIT 10 ;
다중 레이어 서브 쿼리가 중첩된 SQL 명령을 피하십시오. MySQL 5.5 이전의 쿼리 옵터마이저가 in을 exists로 변경하여 인덱스가 유효하지 않게 될 수 있습니다. 외부 테이블이 크면 성능이 저하됩니다.
설명:
- 위와 같은 상황을 완전히 피하기는 어렵습니다. 이런 조건들을 주요 필터링 조건으로 설정하지 않는 것을 권장합니다. 인덱스의 주요 필터링 조건 뒤에 실행하면 문제가 크지 않습니다.
- 모니터링에서 전체 테이블 스캔 양이 비교적 많은 것을 발견할 경우, 콘솔에서 매개변수를
log_queries_not_using_indexes
로 설정하고, 잠시 후 슬로우 로그 파일 분석을 다운로드할 수 있습니다. 단, 너무 오래 켜두면 슬로우 로그가 폭증할 수 있습니다.- 비즈니스 런칭 전 필요한 SQL 심사를 점검해야 하며, 상시 유지보수 시 주기적으로 슬로우 쿼리 로그를 다운로드하여 맞춤형으로 최적화해야 합니다.
문제 해결에 도움이 되었나요?