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을 함께 사용하여 데이터 무결성을 보장하고 성능을 최적화합니다. 🚀
코스피 8% 폭락, 서킷브레이커 발동, SK텔레콤 Claude AI 차단까지. 한국의 AI 레버리지 버블이 단 하루…
SNS 사진 1장으로 30초 만에 딥페이크 영상이 완성됩니다. 당신의 얼굴이 이미 범죄에 악용되고 있을 수…
SNS 사진 1장으로 30초 만에 딥페이크 영상이 완성됩니다. 당신의 얼굴이 이미 범죄에 악용되고 있을 수…
달러/원 환율이 급등하는 이유와 실생활 영향을 정리했습니다. 지금 당장 활용할 수 있는 환전·투자 대응 전략까지…
미래에셋·미래에셋벤처투자·미래에셋생명이 동반 급등한 이유는 스페이스X 상장 기대감입니다. 세 회사가 스페이스X와 어떻게 연결되어 있는지 상세히 분석했습니다.
스페이스X 상장이 계속 미뤄지는 진짜 이유를 파헤쳤습니다. 화성 계획, 스타링크 분리, 국방 계약... 머스크가 절대…