728x90
반응형
SMALL

Data Base/SQL 튜닝 50

Buffer Busy Wait, LRU LIST, LRUW LIST

■ Buffer Busy Wait - 동일한 데이터 블록에 대한 액세스에서 발생한 대기. - 특시, 같은 데이터 블록에서 서로 다른 행을 조회하거나 변경하는 동시성 상황에서 발생한다. ▶ 대기 상황 1. 조회 시 (Shared Mode) - 한 세션이 데이터 블록을 shared mode 로 읽고 있는데, 다른 세션이 동일한 블록의 서로 다른 행을 배타적인 모드(exclusive mode)로 변경. 2. 변경 시(Exclusive Mode) - 한 세션이 데이터 블록을 배타적인 모드(exclusive mode)로 변경 중인데, 다른 세션이 동일한 블록의 서로 다른 행을 읽거나 변경하려고 할 때 발생. ▶ 대응 방법 1. 트랜잭션 디자인 수정 : 서로 다른 행에 대한 액세스 충돌을 최소화하는 트랜잭션의 설계..

Row Cache Lock

■ row cache lock - row cache lock : 'dictionary cache' 또는 'row cache' 에 관련된 정보에 접근하거나 수정하는 경우 발생하는 시스템 lock 이다. - oracle dictionary 정보에 대한 cache 영역으로, 유저, 테이블, 인덱스, 시퀀스, 컬럼, 함수, 프로시저, 패키지, 트리거 등 ▶ 주로 딕셔너리 객체를 조작하는 DDL 작업이나 SQL문이 실행될 때 발생 ▶ DDL 작업(테이블 생성, 수정, 삭제 등)을 수행하면 딕셔러리 정보가 입력, 수정, 삭제 → 딕셔러리 경합 발생 ex) 시퀀스 object (주문발생) ▶ SQL문 수행 시에 semantic(의미론적) 분석, 권한 체크 시 → 딕셔러리 정보를 이용해서 체크한다. - row cach..

Version Count_ 바인드 변수 size 설정

■ version count (child LCO 많이 생성된다.) 1. 테이블이나 인덱스의 구조 변경 : DDL 문을 통해 구조가 변경되는 경우 2. 버전 관리 동시성 제어 : 멀티 버전 동시에 제어 지원. - 트랜잭션의 시작 시검에 따라 특정 데이터의 이전 버전에 접근할 수 있다. 3. DBMS_REDEFINITION 패키지 : 테이블이나 인덱스의 구조 변경 예제1) alter system flush shared_pool; # varchar2 size(32, 128, 2000, 4000) 4가지 크기로 결정된다. (참고) # 바인드변수 사용 # 1#) 익명블록, 트리거에서 바인드 변수(글로벌 변수로 사용하기 위함) 생성 가능. 2#) 패키지, 프로시저, 함수 : 글로벌 변수_ 패키지 스펙+body --..

Shared Pool Latch, library cache latch

■ shared pool latch & 서브 풀 1. Shared Pool Latch - Hard Parsing이 발생할 때, 즉 SQL 문이 처음 분석되고 실행 계획이 생성되어야 할 때, 해당 SQL 문에 대한 메모리를 할당받기 위해 Shared Pool Latch를 획득해야 한다. Shared Pool Latch는 여러 세션 간에 공유 메모리 영역인 Shared Pool의 자원을 보호하기 위한 lock이다. 2. Shared Pool Subpooling (서브풀링) - Oracle 9i 이후부터는 Shared Pool을 여러 개의 서브풀(subpool)로 나누어 관리한다. 이는 고성능을 유지하기 위한 메커니즘이며, CPU 개수가 4개 이상이고 Shared Pool 메모리 크기가 250MB 이상인 경우..

Library Cache Pin _ procedure 생성 후 library cache pin 확인

■ Library Cache Pin - SQL문장이나 PL/SQL 객체를 고정하여 여러 session에서 공유되는 것을 보장하는 lock이다. 이는 공유 자원에 대한 동시 접근을 통제하여 데이터베이스의 일관성과 무결성을 유지하는 데 사용한다. 1. SQL문 hard parsing ▶ library cache pin을 exclusive mode 획득한다. - SQL문장이 처음 parsing 될때 해당 SQL 문장을 다른 session이 변경하지 못하도록 보호한다. 2. SQL문 execute 단계 ▶ library cache pin을 shared mode 획득한다. - 다른 session에서 동시에 동일한 SQL문장을 실행 할 수 있도록 한다. 3. SQL문 fetch 단계 ▶ library cache p..

Library Cache Lock_table 생성, 대량의 Data

=> 새롭게 접속 후 진행하기 #) 대량의 data 로드 하기 create table hr.test(id number, name char(10)); insert into hr.test select rownum, lpad(rownum, 10, '0') from dual connect by level alter문 확인되지 않음. 놓치는 경우가 있을 수 있다. select sql_text from v$sql where sql_id = '1mat065c25crk'; #) library cache 보는 위한 쿼리문 alter table hr.test modify name char(30); select count(*) from hr.test; select h.sid, substr(s.sql_text, 1 , 40)..

Library Cache Lock _ 같은 session에서 procedure 실행 후 wait event 확인

■ Library Cache Lock 1. Library Cache Lock은 Oracle 데이터베이스에서 사용되는 Lock의 일종으로, Library Cache Object(LCO)를 접근하거나 변경하는 경우 해당 LCO 에 대한 특정한 handle에 대해 획득하는 lock을 획득하는 것이다. 2. 여러 세션에서 동시에 동일한 LCO를 변경하는 것을 방지하기 위해서 사용한다. 3. Library cache lock 을 획득하지 못해 대기하는 경우, "library cache lock wait" event 가 발생한다. 참고) SELECT문 , DML, DDL 실행 : 해당 LCO를 변경하는 경우 handle-LCO-lock 이 획득된다. (예시) 1. SQL문장 hard parsing라면? ▶ libr..

Invalidations(무효화) 발생하는 경우

#) shared pool 을 비워주는 명령*2번 alter system flush shared_pool; SELECT sql_id, sql_text, parse_calls, loads, executions FROM v$sql WHERE sql_text LIKE '%hr.employees%' AND sql_text NOT LIKE '%v$sql%'; #) 샘플 테이블 생성 create table hr.emp as select * from hr.employees; alter system flush shared_pool; #) 확인 select last_name, salary from hr.emp where employee_id = 100; #) 조회했는지 확인 SELECT sql_id, sql_text, ..

shared pool _ select문의 실행 계획

#) shared pool 을 비워주는 명령*2번 alter system flush shared_pool; #) select문 실행 select * from hr.employees where employee_id = 100; #) HR 계정으로 로그인 해서 select문 실행 conn hr/hr SELECT * FROM hr.employees WHERE employee_id = 100; #) SQL문장의 실행 정보를 조회 -> hr.employees 를 포함한 SQL문장 검색 + v$sql 와 관련된 문장은 제외 -> SQL_ID(SQL문장 식별자), PARSE_CALLS(조회하는 횟수), LOADS(실행계획), EXECUTIONS(실행하는 횟수) SELECT sql_id, sql_text, parse_..

SAG(System Global Area) shared pool(공유 메모리), SELECT문 처리과정

■ SGA(System Global Area) 정의: Oracle 데이터베이스에서 사용되는 메모리 영역 - 데이터베이스 인스턴스를 실행하는 동안 메모리에 할당되며, 여러 중요한 구성 요소를 포함하고 있다. - 모든 user process 가 공유하는 공유 메모리 영역으로, 데이터베이스의 성능과 안정성에 영향을 미친다. ■ shared pool(공유메모리) - ★libarary cache : SQL, PL/SQL문이 저장되어 있는 메모리 -> why? 실행계획 - ★data dictionary cache : 딕셔러리 정보들이 저장되어 있는 메모리 - session data 정보 : 사용자 세션에 대한 SQL 문장, 파싱된 쿼리 계획, 사용자의 테이블과 인덱스에 대한 엑세스 경로 정보 등 예시) v$sess..

728x90
반응형
LIST