연결 거부, 권한, 스키마 변경, 잠금, 복제와 연결 풀 문제를 서버 상태와 클라이언트 설정으로 나누어 확인합니다.
먼저 확인할 범위
제품 버전, 연결 대상, 트랜잭션 상태, 실행 계획과 최근 스키마 변경을 먼저 보존하세요.
MySQL 외래 키 오류: 정수 타입과 signedness부터 대조하기
MySQL 8.4 제약 조건과 가상 스키마 비교로 INT·BIGINT·UNSIGNED 차이를 좁히고, 데이터 오류와 DDL 오류를 구분합니다.
Redis Cluster TTL과 CROSSSLOT: 서로 다른 두 조건
해시 태그의 슬롯 계산을 직접 확인하고 SET의 만료 보존과 여러 키 스크립트의 슬롯 조건을 분리합니다.
PgBouncer transaction 모드에서 search_path를 믿기 어려운 이유
세션 상태와 트랜잭션 수명을 비교해 schema 선택을 안전하게 설계하고, prepared statement 지원을 버전별로 구분합니다.
PgBouncer SCRAM 실패: 클라이언트 인증과 서버 로그인을 분리
클라이언트→PgBouncer와 PgBouncer→PostgreSQL 인증을 구분해, 암호 형식·드라이버·backend 로그인 오류를 비교합니다.
PgBouncer cl_waiting: 풀 크기보다 먼저 대기 원인 나누기
database/user 풀별 대기와 PostgreSQL 쿼리·잠금 시간을 함께 읽어, 전역 연결 수 증설이 맞지 않는 경우를 구분합니다.
Elasticsearch unassigned shard: 과거 사유와 현재 거부 구분
unassigned.reason과 allocation explain의 decider를 구분해, 재시도·디스크·필터·원본 손실을 다른 조치로 연결합니다.
RabbitMQ memory alarm: ready·unacked·연결 메모리 나누기
알람과 큐 적체를 같은 원인으로 단정하지 않고, consumer 처리·ACK·연결 수의 관찰값을 결합해 다음 조치를 정합니다.
Redis MISCONF: 쓰기 차단보다 먼저 RDB 실패를 확인하기
RDB 저장 실패·권한·공간·fork 부담을 구분하고, 쓰기 보호 해제를 복구 완료로 오인하지 않는 판단 순서입니다.
UUID Data too long: 36자·32자·16바이트의 저장 계약
Python UUID 길이 실험과 MySQL·MariaDB 형식 차이를 대조해, 컬럼 확장 전에 인코딩·드라이버·역변환을 확인합니다.
SQLite WAL 증가와 database is locked를 구분하는 작은 실험
두 SQLite 연결로 오래 열린 읽기 트랜잭션과 두 번째 writer 대기를 나눠 확인하고, 504 원인 단정의 한계를 설명합니다.