5.1. 데이터베이스에 무엇을 물어볼 수 있나
표 구조·관계도·통계·느린 쿼리 — 접속 도구를 열지 않고 말로 묻기
위젯은 데이터베이스에 직접 연결해 답합니다. 지표를 대신 읽어 주는 것이 아니라 표 구조를 읽고, 통계를 세고, 쿼리 계획을 받아 옵니다.
접속 도구를 따로 켜지 않고 한국어로 물으면 됩니다.
먼저 — 어느 DB 인지 밝힙니다
여러 데이터베이스가 등록돼 있을 수 있어, 질문에 대상을 넣어야 합니다.
"
<DB 이름>에서<테이블>구조 보여 줘"
이름을 모르면 먼저 물어보십시오.
"어떤 데이터베이스에 연결할 수 있어?"
등록된 연결과 현재 상태가 목록으로 옵니다. 그 이름을 그대로 쓰면 됩니다.
MySQL · MariaDB · PostgreSQL · Oracle · SQL Server 를 다룹니다. 종류에 따라 받아 올 수 있는 항목이 조금씩 다릅니다.
1. 구조를 볼 때
어떤 표가 있나
"이 DB 에 어떤 테이블이 있어?" "스키마 목록 보여 줘"
표와 뷰가 함께 나옵니다. 스키마가 여럿이면 스키마부터 물으십시오.
표 하나를 자세히
"USERS 테이블 구조 알려 줘"
칸 목록에 인덱스와 제약조건까지 함께 옵니다. 타입과 널 허용 여부를 확인할 때 가장 많이 쓰는 질문입니다.
만든 문장 그대로
"USERS 테이블 DDL 보여 줘"
CREATE TABLE 문을 그대로 받습니다. 다른 환경에 같은 표를 만들 때 씁니다.
칸 이름으로 찾기
"
user_id라는 칸이 들어 있는 테이블 다 찾아 줘"
표 이름을 모를 때 씁니다. 이름 조각으로 전체 표를 검사해 어디에 그 칸이 있는지 찾아 줍니다. 표가 수백 개인 스키마에서 특히 쓸모가 있습니다.
관계도(ERD)
"주문 관련 테이블 ERD 그려 줘"
표들이 어떻게 이어져 있는지 그림으로 옵니다. 읽는 법과 그림이 접는 것 세 가지는 실행 계획과 ERD 읽기에서 다룹니다.
2. 상태를 볼 때
지금 DB 가 어떤 상태인지 묻는 것들입니다. 장애를 살필 때 씁니다.
| 물어보는 말 | 돌아오는 것 |
|---|---|
| "DB 상태 어때?" | 접속 수, 캐시 적중률, 가동 시간, 경고 |
| "지금 돌고 있는 세션 보여 줘" | 세션 ID·사용자·실행 중인 쿼리·대기 이벤트·막힌 세션 |
| "락 걸린 거 있어?" | 잠금을 쥔 쪽과 기다리는 쪽, 막힘 연쇄 |
| "느린 쿼리 뭐 있어?" | 쿼리 문장·수행 시간·읽은 행 수·시각 |
응답이 느릴 때 보는 순서
막힘 연쇄가 보이면 거기서 멈춥니다. 뒤에 줄 선 쿼리들은 원인이 아니라 결과입니다.
3. 크기와 인덱스를 볼 때
"ORDERS 테이블 통계 보여 줘"
행 수, 차지하는 크기, 인덱스 개수, 변경 통계가 옵니다. 표가 얼마나 큰지 먼저 알아야 실행 계획의 전체 스캔이 문제인지 판단할 수 있습니다.
"ORDERS 인덱스 잘 쓰이고 있어?"
인덱스별로 몇 번 쓰였는지, 읽은 행이 얼마인지 나옵니다. 한 번도 안 쓰인 인덱스도 짚어 줍니다. 안 쓰이는 인덱스는 조회를 돕지 못하면서 쓰기를 느리게 합니다.