생계/튜닝2025. 6. 21. 15:57
반응형

앞선 포스팅에서 소프트 파싱과 하드파싱을 정리한 글에서 

바인드 피킹 기능 한계 및 보완으로 ACS 가 새로 도입이 되었다고 했는데 더 자세히 알아보자

1. ACS 등장 배경 

 1) 리터럴 SQL 사용
  - 동일 구조 쿼리에서 입력값이 동일하지 않은 경우 하드파싱 부하 
 
 2) bind 변수 사용 SQL 
 - 바인드변수 사용으로 동일 SQL ID 를 사용, 하드파싱 감소
 - 데이터 분포를 고려하지 않은 실행계획이 생성, 실행됨

 3) bind peeking 기능 도입
 - 최초 실행시 데이터입력 값의 분포를 고려한 실행계획이 생성됨
 - 분포도가 다른 입력값이 들어오면 비효율 발생

 4) adaptive cursor share
 - 데이터 분포에 따라 다른 실행계획 생성
 - 오버헤드는 발생 

 

 

2. ACS 사용하기

 ACS 를 사용하려면 컬럼의 히스토그램이 생성되어 있어야 한다. 

통계정보 수집 할때 method_opt 옵션에서 지정할수 있고 문법과 예시는 아래와 같다. 

 - METHOD_OPT 옵션 문법

FOR COLUMNS [column_clause] [size_clause]
size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}
column_clause := column_name | extension name | extension

 - 예시

EXEC DBMS_STATS.GATHER_TABLE_STATS('SYSTEM','TB_DPS_TRSC_BASE', ESTIMATE_PERCENT=>100, METHOD_OPT=>'FOR COLUMNS ACCT_NO SIZE 2 ');

* SIZE 뒤의 숫자만큼 버킷을 지정되어 수집되고 1부터 2048 까지 지정 할수 있다.

0 은 지정할수 없고, 1 은 히스토그램을 수집하지 않겠다는 것을 의미.

NDV 를 고려해서 버킷사이즈를 적절하게 선택 

 

- 관련 파라미터 확인 

alter [ system | session ] set "_optimizer_adaptive_cursor_sharing" = true;  -- default 

 

 - V$SQL 의 관련 컬럼

IS_BIND_SENSITIVE 
 => Y : 옵티마이저가 히스토그램을 분석, 바인드 값 변경 시 실행계획이 달라질 수 있음을 감지 
 => N : 통계가 없거나, 균일한 분포(임계를 넘지 않은) 

IS_BIND_AWARE
 => Y : (SENSITIVE already marked 상태) extended cursor sharing 사용 
 => N : 1) SENSITIVE 가 N 이거나
            2) SENSITIVE 가 Y 이지만 아직 extended cursor sharing 사용되지 않은 상태 
   

- 실행계획 분화 프로세스

  1. 통계, 히스토그램 수집

  2. 옵티마이저가 바인드변수에 따라 실행계획이 변경될수 있다고 판단되면 => IS_BIND_SENSITIVE = Y 

  3. 유저 입력값의 변경에 따라 이전에 비해 많은 일량 처리 됨 => IS_BIND_AWARE = Y

 4. 3번의 바인드 값 다시 들어오면 기존 커서 중지, 새로운 커서 생성

 

 

3. ACS 한계

 히스토그램을 반영하는 실행계획을 생성해주는 장점이 있지만 추가적인 오버헤드 발생하는 단점이 있다. 

 아래와 같은 추가적인 비용이 발생하게 된다.  

 - 실행계획 평가 비용 증가
 각 실행 시점마다 옵티마이저가 바인드 값과 기존 실행계획의 효율성을 지속적으로 평가
 
 - 커서 관리 부하
새로운 Child Cursor 생성 시 추가적 관리 부하 발생 

 - 메모리 할당(library cache) 및 통계 정보 수집(v$sql_cs_histogram) 발생
최대 20개까지의 Child Cursor 유지로 인한 메모리 증가

 - 파싱 오버헤드
Bind-Aware 상태 전환 시 추가적인 Soft Parsing 발생 -> 라이브러리 캐시 래치 경합 가능성 증가

 

즉, IS_BIND_AWARE = Y 이면 이후 해당 SQL 은

매번 바인드 값을 확인하고, 
Child Cursor 선택/생성 로직을 거치며,
통계 정보와 히스토그램을 참조하는 추가적인 내부 연산이 발생한다. 

Child Cursor가 많아질수록 커서 관리 비용, 라이브러리 캐시 경합, CPU 소모가 증가하게 된다. 

 

그러므로, 과도한 child cursor 로 인한 부작용 발생시, 아래와 같이 적절히 대응해야 할수도 있다. 

- ACS 기능을 비활성화하거나(_optimizer_adaptive_cursor_sharing=false)
- 바인드 변수 대신 리터럴 사용
- 히스토그램 수집 범위 조정 (skew 없으면 히스토그램을 수집X)
- SQL 구조 변경(조건 분기, 힌트 사용 등)

즉, 남용하지 말고 DBA 가 적절히 개입할 필요가 있다. 

 

 

반응형

'생계 > 튜닝' 카테고리의 다른 글

[oracle] 소프트 파싱 과 하드파싱  (0) 2024.12.11
mysql 실행계획 확인하기  (0) 2024.11.25
rac 환경 통계수집 후 no_invalidate  (0) 2023.06.10
오라클 AWR 사용하기  (0) 2023.05.13
[SQL]열거된 OR 제거하기. IN 사용  (0) 2020.11.13
Posted by 돌고래트레이너
생계/Cloud2025. 6. 17. 18:27
반응형

 - OCI 에 대해서 알아보자

OCI 는 Oracle Cloud Infrastructure 의 약자로 AWS 처럼 oracle 에서 제공하는 클라우드 서비스 이다. 

AWS 도 1년 동안 무료로 사용할수 있는 free tier 계정이 있다. 

다만 서비스의 제약은 있고, 무료의 범위를 넘어서면 얄짤없이 과금이 되기도 한다. 

AWS 프리티어로 mysql 이나 postgresql 같은 오픈소스를 사용하는 것은 가능하지만 oracle RDS 의 경우 

라이센스의 문제로 프리티어에서 이용하기에는 어려움이 있다. 

반면, OCI 도 무료계정을 운영하는데, 여기서는 ATP 라는 이름으로 oracle instance 를 사용 가능하다. 

 

https://www.oracle.com/kr/cloud/

 

Oracle Cloud Infrastructure(OCI) 살펴보기

고객의 산업을 위해 특별히 설계되고, 고객이 원하는 곳 어디에서나 이용 가능한 클라우드 솔루션으로 효율성을 극대화하고 비용을 절감할 수 있습니다.

www.oracle.com

 

아래처럼 30 일 체험판으로 300 달러 크레딧이 제공이된다.

30일 체험판이 끝나도 always free 서비스 항목들은 그대로 무료로 제공이 된다고 한다. 

역시 오라클 테스트는 oci 가 개꿀이다.

 

무료계정을 생성해보자. 

 

개인용 테스트 목적이라 individual 을 선택했다. 

홈영역은 무료계정에서는 제약이 있는것 같다. 나는 춘천을 선택했다.

계정을 생성하고 다시 로긴하면 MFA 를 설정하는 듯하다. 

오라클 mobile authenticator 를 사용해도 좋지만 나는 구글 authenticator 를 사용했다.

OTP 를 입력하고 다시 로긴하자. 

이제 database 를 생성하자. autonomous databases 에서 "Create Autonomous Databases" 버튼을 누른다



 

display name 과 database name 을 적당히 적어준다. 

DW 용이 아니고 oltp 성 인스턴스가 필요하므로 "Transaction Processing" 을 선택한다.

Always free 를 선택했다. 버전은 19c 로 했다. 

admin 패스워드 입력하자. 최소 12자 이상, 최소 1자리 대문자/소문자/숫자 포함해야한다. 빡세다.

 

N/W access 는 지정 IP 로 했다. 

하단에 나의 현재 아이피가 나와있다. 

귀찮으면 그냥 secure access from everywhere 로 해도 된다. 

컨택정보도 입력해준다. (왜 필요한지 모르겠지만)

다 입력했으면 우측 하단의 "Create" 버튼을 누르면 생성이 된다. 

디비생성은 금방되고, 완료가 되면 'Available' 표시가 뜬다. 

이제 접속테스트 유저를 생성해보자. 

우측 상단의 "Database actions" 에서 "Database user" 선택 

 

사용자 생성을 눌러서 국민 유저 'SCOTT' 을 만들어보자.

scott 하면 tiger 지만, 역시나 빡센 비밀번호 검증 때문에 길게 만들어 주고 생성한다. 

 

scott 이 만들어졌다. 아래의 주소를 새탭에서 열어보자.

에디터가 나오고 쿼리를 실행해보자. 

상당히 직관적이고 많은 부분 편해진것 같다. 

앞으로 이것저것 눌러가며 많이 공부해보자.

이상 끝!

반응형
Posted by 돌고래트레이너
Travel/다낭 2025052025. 5. 16. 20:58
반응형

한국인들은 잘 모를수 있지만 다낭은 외국의 디지털 노마드에게 요즘 떠오르는 장소이다. 

물론 그렇게 된 가장 큰 이유는 저렴한 생활비 (숙소, 식비) 때문이다. 

거기다 따뜻한 기후와 휴양지의 분위기와 어느정도 서구화된 인프라들 (리조트 등) 은 덤이다. 

베트남 여느 도시와 마찬가지로 다낭에도 카페는 많다. 하지만 일반 카페에서 장시간 일을 하기엔 조금 부족한 점이 있다. 

내가 지도에서 파악한 집중있게 업무가 가능한 카페가 두 곳이 있었는데 가 그 중 하나이다. 

( 나머지 한 곳은 이 곳 보다는 조금 열악하다. )
HI4 coffee 는 스터디 카페 같으면서도 만화카페 같은 룸이 있다. 그 룸은 예약을 해야 하는 것 같다. 

이곳의 가장 큰 장점은 음료 한잔만 시켜도 시간 제한없이, 언제든지 머물수 있다.

그 음료가 비싼것도 아니다. 그리고 무려 24시 영업을 한다. 진짜 사장이 망하려고 환장을 한것 같다. 

( 45k 면 한국돈 3000원이 안되는 돈으로 블랙커피와 티라미수 컵케익을 준다. ) 

다낭이 좀 더 발전을 하려면 다양한 종류의 장소들이 많이 생겨야 하는데 아직은 조금 부족한 것이 느껴질때가 있는데 이런 24시 스터디 카페 같은 곳이 존재한다는게 참 좋다. 

현지인들이 대부분이지만 노트북을 펼치고 코딩을 열심히 하고 있는 서양인도 종종 보인다. 

같은 IT 인으로 그들과 테크니컬 스몰톡을 한번 해볼걸.. 하는 아쉬움이 있다..

2층에도 자리가 많다

 

살짝 중심가에선 벗어났다는 것이 이곳의 가장 큰 단점...

물론 임대료가 저렴해야 이 정도 혜자급 서비스를 제공할수 있겠지..

 

반응형

'Travel > 다낭 202505' 카테고리의 다른 글

음식으로 돌아본 다낭 여행  (0) 2025.05.15
다낭 에서 서핑하기  (0) 2025.05.15
베트남 여행 프롤로그  (0) 2025.05.12
Posted by 돌고래트레이너