인덱스 관리 기준관하여
5
17 câu hỏi đã được viết
선생님, 오라클 인덱스 관리 실무 감각을 좀 잡고 싶어서요. 인덱스를 추가할지 말지 결정하실 때 가장 먼저 보시는 단 하나의 지표가 뭔가요? 그 컬럼으로 조회했을 때 결과가 얼마나 좁게 걸러지는지, 논리읽기(Buffer Gets)가 많은지, 아니면 그 테이블에 INSERT·수정이 잦은지 중에서요.
그리고 경험상 한 테이블에 인덱스가 "이 개수 넘으면 위험하다" 싶은 상한선이 있으세요? 운영 중인 큰 테이블에 새로 만들 때 락이나 부하는 또 어떻게 관리하시는지도 궁금합니다.
Câu trả lời 2
0
네, 답변드립니다.
먼저 인덱스 추가할지 말지 결정할 때 제일 먼저 보는 지표는 buffers입니다. 선택도나 dml 빈도도 참고하긴 하지만, 결국 그 쿼리가 실제로 블록을 얼마나 읽어들이는지가 체감 성능을 가장 직접적으로 보여주기 때문에 buffers를 1순위로 봅니다.
인덱스 갯수 상한선은 사실 딱 몇 개다라고 정해놓기는 어렵습니다. 그 테이블이 조회 위주인지 dml 위주인지에 따라 달라지기 때문입니다. 조회가 압도적으로 많은 테이블이라면 인덱스를 좀 더 여유 있게 두는 편이고, insert나 update가 빈번한 테이블이라면 인덱스 하나 늘어날 때마다 dml 비용이 같이 늘어나니까 훨씬 보수적으로 접근합니다. 그래서 절대적인 개수보다는 그 테이블의 트래픽 패턴을 먼저 보고 판단하시는 게 맞습니다.
운영 중인 큰 테이블에 인덱스를 새로 만들 때는 생성 속도를 위해 parallel 옵션이랑 nologging 옵션을 같이 사용합니다. parallel로 여러 프로세스가 동시에 인덱스를 만들게 해서 시간을 줄이고, nologging으로 리두 로그 생성을 최소화해서 부하를 줄이는 방식입니다. 인덱스 생성후에는 반드시 alter index 명령어로 다시 parallel 을 1로 되돌리고 로깅도 nologging 에서 logging으로 변경을 해둡니다.
0
안녕하세요, 인프런 AI 인턴입니다. 개foot님.
오라클 데이터베이스에서 인덱스를 관리하고 최적화하는 것은 성능 튜닝의 중요한 부분입니다. 인덱스를 추가하거나 제거하는 결정을 내릴 때 고려해야 할 다양한 지표와 경험이 있는 도움이 될 수 있는 가이드를 드리겠습니다.
인덱스를 추가할지 결정할 때 가장 먼저 고려하는 지표:
선택도(Selectivity): 인덱스를 적용할 컬럼의 선택도가 중요합니다. 선택도가 높을수록 쿼리 성능 향상에 유리합니다. 컬럼 값이 유니크할수록, 즉 결과가 좁게 필터링될수록 좋습니다.
쿼리 성능 분석: 쿼리에 대한 실제 실행 계획과 논리 읽기(Buffer Gets) 수치를 확인하여 인덱스가 필요한 지 여부를 파악합니다. 논리 읽기가 많다면 인덱스를 고려할 수 있습니다.
DML 작업 빈도: 테이블에 INSERT, UPDATE, DELETE 작업이 잦은 경우는 인덱스가 성능을 저하시킬 수 있습니다. 특히 데이터 변경이 많은 테이블에는 인덱스 추가에 신중해야 합니다.
인덱스 개수 관리 및 락(lock) 관리:
인덱스 개수 제한: 일반적으로 인덱스의 개수는 전체적으로 테이블 및 시스템 성능에 영향을 미칠 수 있습니다. 보통 경험적으로 인덱스는 4~5개 이하로 관리하는 데, 이는 테이블의 사용 패턴에 따라 다를 수 있지만 너무 많은 인덱스는 DML 성능을 저하시킬 수 있습니다.
부하 관리: 큰 테이블에 인덱스를 추가할 때는 Online Index Rebuild 옵션이나 낮은 작업 부하 시간대에 작업을 진행하여 락으로 인한 문제를 최소화할 수 있습니다. 하지만 이러한 옵션은 데이터베이스 버전이나 설정에 따라 다르게 적용될 수 있습니다.
좀 더 구체적인 경험담과 다양한 방법론에 대해서는 다음의 게시물을 참고하실 수 있습니다:
질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
[과제] 퍼널 쿼리 PIVOT 테이블 작성
0
3
1
다른 디비관련
0
11
2
추가 연습 문제 링크 주세요
0
21
0
용어 사전
0
31
2
개념적 모델링 - 실습
0
27
1
postgres-1에 minio에서쓸 meta data 속성이 왜저장되나요?
0
30
1
WSL에서 Airflow 실행 시 로컬 venv 라이브러리 사용 여부 및 관리 방법
0
28
2
DB 설계와 JPA 관련 질문입니다
0
26
1
21c 버전으로 해도 무방한가요?
0
33
3
vercel실행 - failed to fetch
0
30
2
dags_email_on_failure
0
32
3
드랍 테이블로 지운 ordes에 대해서 질문
0
29
1
문제 풀이 1번 질문
0
34
1
아주 작은 정오표 전달드립니다.
0
62
2
mysql워크벤치를 실행할때마다 오류가 뜹니다. 해결 방법좀 가르켜주세요.
0
57
1
함수기반 인덱스
0
39
3
날짜 인덱스관련 질문
0
27
1
복합인덱스 확인법
0
26
0
GROUP BY 시 인덱스를 타지 않는 이유가 궁금합니다
0
36
1
맥북용 자료 부탁드립니다.
0
62
2
그 EXISTS의 힌트절에 NESTED LOOP를 쓰는이유 질문
0
110
2
어우 옵티마이저가 뛰어난건지..
0
63
1
안녕하세요 NESTED LOOP 문제에서
0
90
2
Buffers와 TotalCost / cpu_cost / io_cost 의 차이점?
0
110
2

