Oracle의 버퍼락(Buffer Lock) 은 Oracle 데이터베이스에서 데이터 블록(buffer cache) 내의 충돌을 방지하기 위해 사용되는 잠금 메커니즘입니다. 일반적으로, 여러 프로세스가 동일한 블록을 액세스하려 할 때 발생하는 동시성 문제를 해결하기 위해 존재합니다. (Row Lock과 다름)
참고로 오라클은 데이터를 읽는 최소 단위가 블록 단위입니다. Row한줄을 읽어도 블록단위로 읽어옵니다. (한 블록 내에는 수백개의 Row가 있을 수도 있음) 그렇기 때문에 Row Lock과 별개로 Buffer Lock 개념이 있는 겁니다. 아래쪽에 비교 분석 내용을 추가로 써놨습니다.
Oracle은 성능을 최적화하기 위해 여러 수준의 잠금을 제공합니다.
버퍼락 경합이 발생하면 성능 저하가 나타날 수 있습니다. 원인과 해결책은 다음과 같습니다.
INITRANS
값을 증가시켜 여러 트랜잭션이 동시에 블록을 수정 가능하도록 설정.FREELISTS
증가로 다중 프로세스가 데이터 블록을 독립적으로 액세스 가능하게 조정.다음과 같은 대기 이벤트를 확인하여 문제를 분석할 수 있습니다.
SELECT event, wait_class, total_waits, time_waited
FROM v$system_event
WHERE event LIKE '%buffer%';
buffer busy waits
이벤트 발생 여부 체크.SELECT event, COUNT(*) FROM v$active_session_history WHERE event LIKE 'buffer busy waits' GROUP BY event;
INITRANS
: 트랜잭션 동시성을 높이기 위해 값 증가.PCTFREE
: 블록 내 여유 공간을 조정하여 동시 업데이트가 가능하도록 함.Oracle에서 버퍼락(Buffer Lock) 은 데이터 블록의 동시 접근을 관리하기 위한 중요한 메커니즘입니다. 하지만 동시성이 높은 환경에서는 버퍼락 경합(Buffer Lock Contention) 이 성능 저하를 유발할 수 있습니다. 이를 해결하려면 AWR/ASH 분석을 통한 튜닝, INITRANS/PCTFREE 조정, 파티셔닝 적용, 적절한 인덱스 전략 등이 필요합니다.
추가적으로 Row Lock이 있는데 왜 Buffer Lock을 해야 할까요?
간단히 요약해서 말씀드리자면,
Oracle은 블록 단위로 읽기 때문입니다. Row단위로 접근하여 수정 중에 다른 프로세스가 다른 목적으로 동일한 블럭에 접근해서 값을 수정하면 안되겠죠?
특징 | Row Lock | Buffer Lock |
---|---|---|
목적 | 특정 행의 변경 충돌 방지 | 데이터 블록의 동시 접근 관리 |
대상 | 개별 Row(행) | 데이터 블록(Buffer Cache의 블록) |
발생 조건 | 트랜잭션이 특정 행을 변경할 때 | 여러 세션이 같은 블록을 읽거나 변경할 때 |
잠금 해제 시점 | 트랜잭션이 종료되면 해제 (Commit/Rollback) | 블록 사용이 끝나면 즉시 해제 |
경합 원인 | 동일한 행을 여러 트랜잭션이 동시에 수정 | 특정 블록이 자주 접근되어 충돌 발생 |
가정:
-- 세션 AUPDATE employees SET salary = salary + 100 WHERE emp_id = 101;
-- 세션 B
UPDATE employees SET salary = salary + 200 WHERE emp_id = 102;
💡 문제점:
emp_id 101
과 emp_id 102
가 같은 블록에 저장되어 있다면, Row Lock만으로는 해결할 수 없음.Row Lock은 행 단위의 충돌을 방지하지만, Buffer Lock은 같은 블록 내에서의 충돌을 방지하는 역할을 합니다.
따라서, Oracle은 Row Lock과 Buffer Lock을 함께 사용하여 데이터 무결성을 보장하고 성능을 최적화합니다. 🚀
윈도우 운영체제의 노트북에서는 iPhone 유선 테더링이 잘 안되는 경우가 많습니다. 보통 iPhone의 드라이버가 설치가 안되있어서인…
안녕하세요, 혹시 이런 생각해 본 적 없으신가요? "내가 투자한 회사는 누가 감시하고, 어떻게 운영될까?" 오늘은…
1. Gemini CLI란 무엇인가요? Gemini CLI는 터미널 환경에서 직접 Gemini 모델과 상호작용할 수 있도록 만들어진…
과적합은 머신러닝에서 학습용데이터를 과하게 학습하여, 실제데이터를 예측하지 못하는 현상을 말합니다. 인공지능(AI)의 학습 방법은 우리가 시험공부를…