ChatGPT의 말:
서비스 지연 발생 시, 특히 WAS(Tomcat 등)가 리눅스 기반이고, DB 서버 또한 리눅스 기반이라면 WAS ↔ DB 사이의 병목 원인 파악이 중요합니다. 아래는 WAS 서버와 DB 서버 각각에서 확인 가능한 항목과 그에 따른 조치사항을 TA 역량 기준으로 정리한 것입니다.
🛠 서비스 지연 발생 시 확인 포인트 및 조치 사항
✅ [1] WAS 리눅스 서버에서 확인할 수 있는 항목
| 🔹 CPU 사용률 | top, vmstat, sar -u 등으로 확인 | 특정 프로세스(JVM 등)가 CPU를 과다 점유 시 thread dump로 원인 분석 |
| 🔹 Memory 사용량 | free -m, top, ps aux --sort=-%mem | OutOfMemory 가능성, GC 빈도 증가 여부 확인 (heap size 조정, GC 튜닝) |
| 🔹 Thread 상태 | jstack or kill -3 PID | Blocking, deadlock, DB connection hang 여부 분석 |
| 🔹 GC 로그 | -Xlog:gc*, catalina.out | Full GC 빈도 높으면 heap 크기 조정, 객체 누수 점검 |
| 🔹 Connection Pool 상태 | 로그 or JMX (HikariCP, DBCP 등) | 커넥션 pool 고갈 시 maxActive 증가 또는 leak 분석 |
| 🔹 WAS 로그 | catalina.out, access.log, stderr.log 등 | 특정 API 지연, 5xx 오류 유무 확인, 스택 트레이스 분석 |
| 🔹 네트워크 지연 | ping, telnet, curl, ss, traceroute | DB 서버와의 RTT 지연 시 네트워크 MTU, NAT, DNS 등 확인 |
| 🔹 IO 병목 | iostat, iotop, sar -d | 로그 flush, 임시파일 처리 지연 → SSD/IOPS 확인 |
✅ [2] 리눅스 DB 서버에서 확인할 수 있는 항목
| 🔹 DB CPU 사용률 | top, vmstat, DB 자체 CPU 사용률 확인 | 쿼리 실행 계획 재점검, 인덱스 누락 가능성 |
| 🔹 DB 커넥션 수 | SHOW PROCESSLIST (MySQL), v$session (Oracle) | 커넥션 포화 시 WAS Pool 줄이거나 커넥션 수 증가 |
| 🔹 Lock 현황 | DB 락 대기 확인 (ex: show engine innodb status, v$lock) | 트랜잭션 정리, 장시간 미커밋 트랜잭션 종료 |
| 🔹 슬로우 쿼리 | slow query log, 쿼리 분석기 | 인덱스 부재, join 순서 조정, 쿼리 리팩토링 |
| 🔹 디스크 IO | iostat, df -h, sar -d | 테이블스페이스 확장, 디스크 병목 확인 |
| 🔹 네트워크 대역폭 | iftop, nload, netstat | WAS ↔ DB간 패킷 누락/RTT 지연 여부 확인 |
| 🔹 시스템 캐시 | free -m, vmstat, DB buffer pool 상태 | 버퍼 캐시 hit율 저하 시 캐시 크기 조정 |
✅ [3] 공통 로그 또는 상호 관련 체크 포인트
| 🔸 DB 커넥션 timeout | WAS 로그에서 Connection Timeout 오류 시, DB 서버 alive 여부 & pool 수 확인 |
| 🔸 Socket timeout | WAS에서 DB 응답을 기다리는 시간 초과 → DB에서 슬로우 쿼리, Lock 가능성 |
| 🔸 GC 후 커넥션 누락 | Full GC 중에 커넥션이 반환되지 않는 경우 pool 고갈 발생 |
| 🔸 DNS 해석 오류 | /etc/resolv.conf, DNS TTL 문제로 응답 지연 유발 가능성 |
| 🔸 KeepAlive 설정 누락 | WAS ↔ DB 간 connection reuse 미흡 → TCP handshake 증가 |
📌 [TA 조치 가이드 예시]
예시 1: ThreadPool 정상 + GC 적음 + Connection Pool 고갈
- 원인: DB에서 응답 지연 or 커넥션 미반납
- 조치: 커넥션 pool 설정 개선 (maxWait, validationQuery), 미반납 위치 추적
예시 2: GC 빈번 + Full GC 발생 + Memory 부족
- 원인: heap size 부족, 객체 누수
- 조치: heap size 조정, GC 로그 기반 객체 분석, 메모리 leak 추적
예시 3: DB에서 슬로우 쿼리 + lock 다발
- 원인: 대용량 join 쿼리, 인덱스 누락, 커밋 지연
- 조치: 인덱스 추가, 쿼리 튜닝, 트랜잭션 처리 방식 개선
📎 함께 보면 좋은 명령어 리스트
| CPU | top, mpstat -P ALL 1 |
| 메모리 | free -m, vmstat 1 |
| IO | iostat -xm 1, iotop |
| 네트워크 | ping, ss -ntpl, traceroute |
| GC | jstat -gc <pid>, jmap, jstack |
| DB 커넥션 | `netstat -anp |
원하시면 이 내용을 PDF 보고서 형식이나 문제화 시켜드릴 수도 있습니다.
예:
- "서비스 지연의 주요 확인 항목을 분류하시오"
- "다음 중 WAS 서버에서만 가능한 분석 항목은?" 등
필요하신 방향 알려주시면 확장해 드리겠습니다!
나의 말:
ChatGPT의 말:
전혀 많지 않습니다.
오히려 TA 직무역량을 끌어올리기 위해서는 반드시 세부 항목까지 정밀하게 점검할 수 있어야 합니다.
아래는 “WAS 리눅스 서버에서 서비스 지연 시 확인 가능한 항목”에 대한 세부 지표(메트릭), 로그 위치, 확인 명령어 및 주의 깊게 봐야 할 포인트를 카테고리별로 정리한 것입니다.
🛠 WAS 리눅스 서버 서비스 지연 진단 항목 – 세부 점검표
| 🧠 CPU 사용 | 전체 사용률 | top, mpstat, sar -u | idle 0%이면 과부하, 특정 프로세스가 독점하는지 확인 |
| Java 프로세스 CPU | top -Hp <pid>, ps -mp <pid> -o THREAD,tid,time | 특정 Thread가 100% CPU 점유? (busy wait, 무한루프 등) | |
| runqueue 상태 | vmstat 1 5, sar -q | runq가 CPU core 수보다 많으면 thread starvation 가능성 |
| 💾 Memory 사용 | Free/Used | free -m, vmstat -s, top | available 메모리 부족 시 SWAP 발생 가능성 |
| Swap 사용률 | free, top, vmstat 1 | Swap in/out 발생 여부, swap이 많으면 GC 지연 유발 | |
| 프로세스별 | ps aux --sort=-%mem | java, redis 등 메모리 상위 점유 프로세스 파악 | |
| RSS / VSS | cat /proc/<pid>/status | 실제 물리 사용량 (RSS)과 가상 메모리 비교 |
| 🔁 Thread 상태 | Thread Dump | jstack <PID>, kill -3 <PID> | WAITING 상태가 많은가? DB/외부 API 호출 blocking 여부 확인 |
| Deadlock 감지 | jstack 분석 시 Found one Java-level deadlock 메시지 | 동기화 순서 문제, synchronized 블럭 내 I/O 처리 금지 원칙 위반 |
| 🔄 GC 동작 | GC 로그 | -Xlog:gc*, catalina.out, gc.log | Full GC 주기, STW 시간(Stop-The-World), Minor/Full 비율 |
| GC Heap 상태 | jstat -gc <PID>, jmap -heap <PID> | Old 영역이 급격히 증가? → GC 튜닝 필요 | |
| OutOfMemory | catalina.out, hs_err_pid*.log | java.lang.OutOfMemoryError 발생 여부 (heap, metaspace 등 종류 구분) |
| 🔌 Connection Pool | 상태 모니터링 | (라이브러리별 JMX or log 확인) | maxActive 도달, active 커넥션 장시간 점유 여부 |
| validation query 설정 | context.xml, application.yml | DB 연결 유효성 체크 실패 시 재사용 불가 문제 | |
| 커넥션 Leak | catalina.out 또는 leakDetectionThreshold 설정 | 특정 API 호출 후 반납 누락되는 커넥션 있는지 확인 |
| 🧾 WAS 로그 | 에러 로그 | catalina.out, localhost_access_log.*, stderr.log | 특정 URI, 시간대에서 500, 503 다발 여부 |
| 응답 시간 | access.log, ELK 연동 | 응답 시간 지연이 API 전체인지, 특정 경로만인지 파악 | |
| Stack trace | catalina.out, spring.log | NullPointer, SQLTimeout, GC, OOM, 등 Exception trace 확인 |
| 🌐 네트워크 | DB연결 응답 속도 | curl, nc, telnet <host> 3306 | 연결 지연, timeout, DNS 지연 여부 확인 |
| 인터페이스 트래픽 | iftop, nload, netstat -i | 트래픽 폭주, 패킷 손실 여부 | |
| 방화벽/보안 차단 | iptables -L, firewalld, tcpdump | 특정 포트 차단 또는 SYN flooding 감지 |
| 🗃 IO 병목 | 디스크 I/O | iostat -xm 1, iotop | 로그 flush, GC 로그 출력 지연 여부 |
| 디스크 용량 | df -h, du -sh * | 디스크 100% 시 write hang 발생 가능성 | |
| inode 상태 | df -i | inode 부족 시 신규 파일 생성 불가 현상 발생 |
✅ 현장적용 요약 (Checklist)
| 특정 API만 느린가? | 비즈니스 로직 문제, DB 쿼리, 외부 API 병목 |
| 전체적으로 느린가? | GC, ThreadPool, CPU 부하, IO 병목 가능성 |
| 갑자기 느려졌나? | 배포 이후 이슈, 코드 누수, 세션 증폭 가능성 |
| 일정 시간 간격으로? | Full GC, 백업, 배치 등 주기성 작업 확인 |
| 모든 요청이 Timeout? | DB, Redis, 인증 서버 등 백엔드 연결 확인 |
📎 보너스: 정리 PDF / 암기카드 버전 제작 가능
- “WAS 지연 진단표 v1.0”으로 PDF화 가능
- 항목별 문제화(객관식/단답형/시나리오형)
- 주간점검용 진단 리스트도 별도 제공 가능
나의 말:
ChatGPT의 말:
아주 좋습니다. 아래는 서비스 지연 발생 시 리눅스 기반 DB 서버(예: MySQL, MariaDB, PostgreSQL, Oracle 등)에서 점검할 수 있는 세부 항목입니다.
장애 원인 분석 → 메트릭/로그 확인 → 조치사항 흐름을 따라 TA 직무역량 기준으로 정리하였습니다.
🛠 DB 서버 지연 원인 진단 세부 항목 (Linux 기반)
| 🔸 CPU 사용 | 전체 CPU 사용률 | top, vmstat 1, sar -u 1 3 | DB 프로세스가 CPU를 과도하게 사용 중인지 확인 |
| DB 프로세스별 사용률 | `ps aux | grep mysqld` 등 | |
| Load Average | uptime, top | CPU core 대비 load 값 과도하면 지연 가능성 |
| 🔸 Memory / 캐시 | 전체 메모리 사용 | free -m, top | free 메모리 부족하면 캐시 적중률 하락 |
| OS-level 캐시 히트율 | vmstat, sar -B | swap 발생 여부, swap in/out 증가 시 성능 저하 | |
| DB buffer pool 상태 | MySQL: SHOW ENGINE INNODB STATUS PostgreSQL: pg_stat_bgwriter |
buffer pool hit ratio < 90% → 캐시 크기 조정 필요 |
| 🔸 Lock / 트랜잭션 | 활성 세션 | MySQL: SHOW FULL PROCESSLIST Oracle: v$session |
"Locked" or "Waiting" 상태 다수 존재 여부 |
| InnoDB Lock | SHOW ENGINE INNODB STATUS | Deadlock, long trx 확인 (Undo 영역 증가 포함) | |
| Long Transaction | SELECT * FROM information_schema.innodb_trx | 미커밋 트랜잭션이 오래 지속되면 lock 발생 | |
| Blocking 트랜잭션 | performance_schema.threads 또는 lock wait 쿼리 | 다른 세션을 막고 있는 트랜잭션 파악 |
| 🔸 쿼리 성능 | 슬로우 쿼리 로그 | /var/log/mysql/slow.log, SET GLOBAL slow_query_log = 1 | 실행 시간 긴 쿼리 확인 (Full Scan, filesort 등) |
| 실행 계획 | EXPLAIN SELECT ... | 인덱스 미사용, JOIN 순서 이상 등 | |
| 쿼리 캐시 적중률 | SHOW STATUS LIKE 'Qcache%' | 캐시 hit이 낮으면 비효율적인 쿼리 패턴 |
| 🔸 Connection 상태 | 총 커넥션 수 | SHOW STATUS LIKE 'Threads_connected' | WAS Connection Pool보다 많으면 과포화 |
| wait 이벤트 | SHOW STATUS LIKE 'Threads_running' | Active connection이 많은 경우 병목 발생 | |
| connection error | SHOW STATUS LIKE 'Aborted_connects' | WAS → DB 연결 실패 여부 점검 필요 |
| 🔸 IO 성능 | 디스크 사용률 | iostat -xm 1, df -h, sar -d | IOPS 병목, 디스크 과부하, 사용률 100% 확인 |
| Tablespace 크기 | information_schema.tables | 자동 확장 미설정 or 할당량 초과 여부 | |
| InnoDB Checkpoint 지연 | SHOW ENGINE INNODB STATUS | dirty page flush 지연 시 성능 저하 가능 |
| 🔸 네트워크 지연 | RTT (왕복 지연 시간) | ping <WAS IP>, mtr, traceroute | WAS ↔ DB 네트워크 지연, DNS 해석 시간 확인 |
| DB 포트 응답 | telnet <DB IP> 3306, nc -zv <host> 5432 | WAS ↔ DB 간 연결 실패 원인 진단 |
| 🔸 로그 분석 | Error 로그 | /var/log/mysql/error.log Oracle: alert.log |
디스크 오류, replication 실패, 쿼리 에러 여부 |
| Replication 상태 | SHOW SLAVE STATUS (MySQL) | Seconds_Behind_Master 지연 → slave delay 확인 | |
| Binlog / Redo log 상태 | MySQL: binlog position Oracle: archive log |
로그 순서 꼬임, log full 등으로 인한 insert hang 발생 가능 |
✅ 진단 시나리오 예시 (TA 관점 조합)
| 전체 쿼리 느림 | → CPU 과부하 or buffer pool hit ratio 저하 or I/O 병목 |
| 특정 API만 느림 | → 해당 쿼리만 슬로우 로그 확인, explain 실행 계획 분석 |
| 간헐적 커넥션 오류 | → 커넥션 수 제한 도달 or WAS 커넥션 미반납 |
| 자주 timeout | → blocking 트랜잭션 존재, Lock 대기 상태 반복 |
| 쿼리는 빠른데 응답이 늦음 | → network RTT or WAS GC delay |
🛠 DB 성능 저하 진단 문제집 (총 30문항 / TA 역량 평가용)
✅ NO.01 [객관식 | 하]
문제: DB 서버의 성능 저하 발생 시 가장 먼저 확인해야 할 항목은 무엇인가?
A. 방화벽 설정
B. 스키마 구조
C. 현재 실행 중인 세션 및 Lock 상태
D. 서비스 포트 번호
- 정답: C
- 해설: 세션 상태, long transaction, lock 등은 DB 성능 저하의 핵심 원인이며, 실시간 점검 필요 항목이다.
✅ NO.02 [객관식 | 중]
문제: MySQL에서 Deadlock을 확인할 수 있는 명령은?
A. SHOW STATUS
B. SHOW ENGINE INNODB STATUS
C. SHOW TABLE STATUS
D. EXPLAIN SELECT
- 정답: B
- 해설: InnoDB 내부 상태 및 Deadlock, latch wait, flush 상태 등을 모두 확인할 수 있다.
✅ NO.03 [단답형 | 중]
문제: PostgreSQL에서 슬로우 쿼리를 통계적으로 확인할 수 있는 확장 모듈은?
- 정답: pg_stat_statements
- 해설: 실행 빈도와 평균 실행 시간을 집계하여 성능 분석에 활용되는 통계 뷰이다.
✅ NO.04 [객관식 | 상]
문제: WAS는 정상이며 DB 연결도 성공하나, 쿼리 처리 속도가 느린 경우 가장 먼저 확인할 항목은?
A. DB CPU 사용률
B. 쿼리 실행 계획(EXPLAIN)
C. JDBC 설정
D. WAS GC 로그
- 정답: B
- 해설: 쿼리 실행 계획을 통해 full scan, join 순서 문제 여부를 파악하는 것이 핵심이다.
✅ NO.05 [객관식 | 중]
문제: 다음 중 슬로우 쿼리의 가장 일반적인 원인은?
A. 커넥션 풀 최대값 초과
B. Replication 지연
C. 인덱스 미사용
D. JDBC 타임아웃 미설정
- 정답: C
- 해설: 인덱스가 없으면 full scan이 발생하여 성능 저하로 이어진다.
✅ NO.06 [시나리오형 | 상]
문제: 서비스 신규 배포 후 전체 응답이 지연되었다. WAS는 정상이며 DB 연결도 문제없다. 어떤 점검을 해야 하는가?
- 정답: 슬로우 쿼리 로그 → 해당 SQL의 실행계획 → 인덱스 또는 쿼리 구조 개선
- 해설: 배포된 기능 내 SQL 변경이 성능에 영향을 미쳤을 가능성이 크다.
✅ NO.07 [객관식 | 중]
문제: MySQL에서 커넥션 수 급증 시 확인해야 할 설정 항목은?
A. max_connections
B. key_buffer_size
C. query_cache_limit
D. innodb_log_file_size
- 정답: A
- 해설: max_connections 값을 초과하면 새로운 연결이 실패한다.
✅ NO.08 [단답형 | 하]
문제: MySQL에서 현재 실행 중인 쿼리를 확인하는 명령어는?
- 정답: SHOW FULL PROCESSLIST
- 해설: 활성 세션 목록, 상태, 실행 쿼리를 함께 확인할 수 있다.
✅ NO.09 [객관식 | 상]
문제: Buffer pool hit ratio가 낮으면 어떤 현상이 발생하는가?
A. 네트워크 병목
B. 디스크 IO 증가
C. 커넥션 타임아웃
D. DNS 장애
- 정답: B
- 해설: 메모리 적중률이 낮으면 디스크 접근이 늘어나 성능 저하가 발생한다.
✅ NO.10 [시나리오형 | 상]
문제: 특정 SQL이 평균 0.01초에서 2초로 느려졌고, Explain 결과에 'Using filesort'가 포함되어 있다. 조치 방안은?
- 정답: 정렬 조건에 맞는 인덱스 추가 또는 covering index 활용
- 해설: filesort는 디스크 기반 정렬로 성능에 악영향을 준다.
✅ NO.11 [객관식 | 중]
문제: PostgreSQL에서 vacuum 작업이 주기적으로 수행되지 않을 경우 발생 가능한 문제는? A. 사용자 인증 실패
B. dead tuple 축적으로 성능 저하
C. 백업 실패
D. DB 커넥션 수 감소
- 정답: B
- 해설: vacuum 미실행 시 dead tuple이 누적되어 디스크 공간 낭비 및 성능 저하 유발
✅ NO.12 [단답형 | 중]
문제: MySQL에서 long transaction 상태를 확인할 수 있는 정보 스키마 테이블은?
- 정답: information_schema.innodb_trx
- 해설: InnoDB 트랜잭션 관련 정보를 확인하여 미커밋 트랜잭션 파악 가능
✅ NO.13 [객관식 | 중]
문제: DB 연결은 되지만 쿼리 응답이 매우 느린 경우 가장 먼저 확인할 항목은? A. DNS 설정
B. 트랜잭션 Lock 상태
C. 네트워크 속도
D. JDBC 드라이버 버전
- 정답: B
- 해설: DB 쿼리 지연은 대부분 Lock 또는 Block 상태로 인해 발생한다.
✅ NO.14 [객관식 | 상]
문제: 대용량 테이블에서 delete를 많이 했지만 디스크 사용량이 줄지 않을 때 확인할 사항은? A. truncate 사용 여부
B. auto_increment 설정
C. purge thread 정상 작동 여부
D. binary log format
- 정답: C
- 해설: InnoDB purge thread가 작동하지 않으면 실제 데이터는 삭제되지 않아 공간이 해제되지 않는다.
✅ NO.15 [시나리오형 | 상]
문제: 전체 서비스 응답 지연이 발생하였고 WAS 로그에는 DB connection timeout이 다수 기록됨. DB에서 우선 확인할 항목은?
- 정답: SHOW PROCESSLIST로 long-running 트랜잭션, Lock 상태 확인 → 필요시 트랜잭션 kill
- 해설: DB의 응답이 늦어 커넥션 유지시간이 길어지면 connection pool 고갈로 timeout 발생 가능
✅ NO.16 [객관식 | 중]
문제: 슬로우 쿼리 로그가 비어 있는 경우에도 쿼리 지연이 발생할 수 있는 가장 가능성 높은 원인은? A. 트리거 사용
B. replication lag
C. DB timezone 불일치
D. Lock 대기 중
- 정답: D
- 해설: 쿼리는 실행되지만 결과 반환이 느린 경우는 Lock이나 blocking이 원인인 경우가 많다.
✅ NO.17 [객관식 | 중]
문제: 다음 중 쿼리 실행 계획(Execution Plan)에서 주의 깊게 봐야 할 항목은? A. 포트 번호
B. Index key length
C. Using temporary, Using filesort
D. 캐릭터셋 종류
- 정답: C
- 해설: 'Using temporary', 'Using filesort'는 정렬/필터링을 위한 디스크 연산으로 성능 저하 요인이다.
✅ NO.18 [단답형 | 하]
문제: MySQL에서 커넥션 수가 현재 몇 개인지 확인하는 명령은?
- 정답: SHOW STATUS LIKE 'Threads_connected';
- 해설: 현재 DB에 연결된 세션 수를 나타낸다.
✅ NO.19 [객관식 | 상]
문제: WAS에서 DB는 연결되지만 쿼리 응답이 느리고, DB I/O도 높지 않을 때 주요 의심 지점은? A. Connection Pool 최소값
B. Thread pool 크기
C. DB Lock 상태
D. 데이터베이스 캐릭터셋 설정
- 정답: C
- 해설: 쿼리 실행은 되었지만 다른 트랜잭션과의 충돌로 인해 응답 지연이 되는 경우가 많다.
✅ NO.20 [시나리오형 | 중]
문제: DB 운영 중 특정 시간대에만 응답이 급격히 느려진다. CPU/Memory/IO는 정상이었다. 어떤 항목을 추가로 점검할 것인가?
- 정답: 특정 시간대 배치 작업, 통계 수집, 백업, 재인덱싱 작업 여부 확인
- 해설: 특정 시점에만 발생하는 경우 백그라운드 작업으로 인한 자원 경합이 의심된다.
✅ NO.21 [객관식 | 중]
문제: MySQL InnoDB에서 purge thread가 동작하지 않을 경우 어떤 현상이 발생하는가? A. 인덱스가 무효화됨
B. undo 로그 누적으로 디스크 증가
C. primary key constraint 실패
D. 캐릭터셋 충돌 오류
- 정답: B
- 해설: 미삭제 트랜잭션 정보가 계속 쌓이며 디스크 공간이 줄어들고 성능도 저하된다.
✅ NO.22 [단답형 | 상]
문제: PostgreSQL에서 트랜잭션 락 정보를 확인할 수 있는 뷰 이름은?
- 정답: pg_locks
- 해설: 세션 간의 락 충돌 여부를 파악할 수 있다.
✅ NO.23 [객관식 | 중]
문제: 다음 중 슬로우 쿼리 로그를 활성화하는 MySQL 설정은? A. enable_slow_log
B. log_slow_queries
C. slow_query_log
D. trace_queries_slow
- 정답: C
- 해설: slow_query_log = 1 로 설정해야 슬로우 쿼리가 기록된다.
✅ NO.24 [객관식 | 상]
문제: 다음 중 WAS ↔ DB 사이에서 발생할 수 있는 응답 지연 원인이 아닌 것은? A. DB Lock
B. WAS의 GC 지연
C. 네트워크 RTT 증가
D. MySQL 계정 잠금
- 정답: D
- 해설: 계정 잠금 시 애초에 연결이 되지 않으며, 연결 이후 지연과는 무관하다.
✅ NO.25 [시나리오형 | 상]
문제: MySQL에서 replication slave 지연이 수 분 이상 발생 중이다. 원인과 조치는?
- 정답: 바이너리 로그가 너무 많거나 IO/SQL thread가 지연 → 'SHOW SLAVE STATUS' 로 위치, thread 상태 확인 → skip counter 또는 delay 해소
- 해설: 지연 원인이 적용 쿼리 자체일 수도 있어 slow query 확인 필요
✅ NO.26 [객관식 | 하]
문제: DB에서 'Too many connections' 에러가 발생할 때 WAS 단에서 고려할 조치는? A. WAS 힙메모리 증가
B. DB 서버 업그레이드
C. Connection pool 크기 조정 및 재사용 확인
D. DB 리스타트
- 정답: C
- 해설: WAS에서의 미반납 또는 커넥션 과잉 요청이 근본 원인일 수 있음
✅ NO.27 [객관식 | 중]
문제: 다음 중 쿼리 실행계획에서 반드시 인덱스를 사용했다고 판단할 수 있는 키워드는? A. type = ALL
B. type = index
C. key = NULL
D. rows > 10000
- 정답: B
- 해설: type=index는 covering index scan이 발생했음을 의미함
✅ NO.28 [단답형 | 중]
문제: MySQL에서 가장 최근의 DDL 변경 사항을 기록하는 로그 파일은?
- 정답: binary log (binlog)
- 해설: insert/update/delete 뿐 아니라 alter, create 등도 기록됨
✅ NO.29 [객관식 | 상]
문제: 쿼리 튜닝 전후를 비교할 때 가장 적절한 측정 기준은? A. CPU 사용률
B. 실행 시간, rows scanned, rows returned
C. 테이블 스키마
D. 로그 파일 크기
- 정답: B
- 해설: rows scanned 및 실행 시간은 실행계획 튜닝의 핵심 성능 지표다
✅ NO.30 [시나리오형 | 상]
문제: 수십 개의 쿼리가 동시에 실행될 때 디스크 사용률은 낮으나 성능이 급격히 저하되었다. 병목 원인은?
- 정답: 트랜잭션 간 Lock 경합 → Lock wait time 분석, 트랜잭션 분리
- 해설: 자원은 남아 있어도 논리적 경합으로 지연이 발생할 수 있다.
| 01 | 세션/Lock 상태 | DB 성능 저하 시 가장 먼저 세션 및 Lock 상태 확인 |
| 02 | INNODB STATUS | Deadlock은 SHOW ENGINE INNODB STATUS로 확인 |
| 03 | pg_stat_statements | PostgreSQL 슬로우 쿼리 통계용 확장 모듈 |
| 04 | EXPLAIN | 응답 지연 시 쿼리 실행 계획부터 점검 |
| 05 | 인덱스 | 인덱스 미사용은 슬로우 쿼리의 주 원인 |
| 06 | 신규 배포 성능 | 배포 후 지연 시 SQL 변경 확인 및 인덱스 점검 |
| 07 | max_connections | 커넥션 수 증가 시 max_connections 확인 필요 |
| 08 | PROCESSLIST | 현재 쿼리 확인은 SHOW FULL PROCESSLIST |
| 09 | Buffer Pool | Hit ratio 낮으면 디스크 I/O 급증 |
| 10 | Using filesort | Explain에 filesort 보이면 인덱스 최적화 필요 |
| 11 | Vacuum | PostgreSQL에서 vacuum 누락 시 dead tuple 누적 |
| 12 | innodb_trx | MySQL 트랜잭션 상태 확인은 information_schema.innodb_trx |
| 13 | Lock 상태 | 연결 성공했지만 지연 시 Lock 대기 가능성 큼 |
| 14 | purge thread | delete 후 공간 미반환은 purge thread 문제 가능 |
| 15 | Connection Timeout | 응답 지연 시 long trx 및 Lock 여부 우선 확인 |
| 16 | Lock 지연 | 슬로우 로그 없어도 Lock 지연은 발생 가능 |
| 17 | filesort/temp | Explain에서 Using filesort/temp는 성능 저하 원인 |
| 18 | Threads_connected | 현재 커넥션 수는 SHOW STATUS LIKE 'Threads_connected' |
| 19 | WAS 지연 | DB I/O 낮은데 지연되면 Lock 상태 확인 |
| 20 | 특정 시간대 지연 | 배치/백업 등 시간대 작업 경합 여부 확인 |
| 21 | purge 지연 | InnoDB purge thread 미작동 시 디스크 증가 |
| 22 | pg_locks | PostgreSQL 락 정보는 pg_locks 뷰로 확인 |
| 23 | slow_query_log | 슬로우 쿼리 활성화는 slow_query_log=1 설정 |
| 24 | 계정잠금 | DB 계정잠금은 연결 실패이지 지연 원인은 아님 |
| 25 | replication 지연 | Slave 지연 시 SHOW SLAVE STATUS로 IO/SQL thread 확인 |
| 26 | Connection Pool | Too many connections 시 pool 미반납 여부 점검 |
| 27 | type=index | Explain에서 type=index는 covering index 사용 |
| 28 | binary log | DDL 포함 변경사항은 binlog에 기록됨 |
| 29 | rows scanned | 쿼리 튜닝 전후 비교 시 실행 시간과 rows 확인 |
| 30 | 논리적 경합 | CPU/IO 정상이지만 Lock 경합으로 지연될 수 있음 |
'WEB & WAS' 카테고리의 다른 글
| WEB & WAS 장애 및 조치방법(100) (0) | 2025.07.18 |
|---|---|
| 세션 클러스터링 (0) | 2025.07.18 |
| WEB에서 지연이 발생하면 (0) | 2025.07.18 |
| WEB & WAS 장애 및 해결방안 (0) | 2025.07.18 |