강의노트

[DB] DB 성능관리와 튜닝 5일차

GS_Park 2016. 2. 5. 20:38

오늘은 정말 여유있게 식사를 해서 기분좋게 강의를 들으러 왔습니다.

설 연휴 준비를 위해 다들 일찍 들어가는 모습을 보았지만 불굴의 의지로 강의를 들으러 왔습니다.

 

EM으로 메모리 어드바이져 PGA확인

PGA의 세부정보를 더 보면 아래와 같습니다. 위에서는 적중률이 100%로 상당히 이상적인 수치임을 확인할 수 있습니다.

 

 

지금 권고사항을 확인하면 넉넉한 상황입니다.

 

<<실습>>


SQL> show parameter pga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 284M
SQL>

pga_aggregate_target이 설정되었으면 자동!!!

그럼 수동은 뭔가 하면...?

SQL> show parameter area_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
bitmap_merge_area_size               integer     1048576
create_bitmap_area_size              integer     8388608
hash_area_size                       integer     131072
sort_area_size                       integer     65536
workarea_size_policy                 string      AUTO
SQL>
 

위에는 지금 자동으로 되고 있지만 수동으로 바꾸면 위의 값이 아닌 sort_area_size                       integer     65536 로 잡히게 됩니다. (64K)

따라서 64K이상이면 Multipass가 발생할 수 있습니다. 그러면 성능이 저하되겠네요.

AUTO로 할 때의 장점은 위의 수동설정보다 훨씬 많은 값을 사용할 수 있습니다. 예를들어 64K를 위와 같이 쓴다고 할 때 PGA에 여유가 있으면 64K이상의 값을 사용할 수 있습니다. 수동으로 하는 것 보다 Temp ~ 에 가는것이 적어서 성능이 더 좋습니다.

 

PGA의 히스토그램도 볼 수 있습니다. 위의 통계정보를 계속 보면 아래와 같습니다.

 

위의 붉은 부분 이상이 되면 성능이 더 개선되지 않으므로 최적의 성능을 원한다면 저정도로 설정을 하면 되는것을 알 수 있습니다.

 

위의 보고서에서 Direct path read/write temp가 있는지 확인을 하여 튜닝을 할 수 있습니다.

WITH로 시작하는 SQL를 사용하는 것인 서브쿼리 펙토링을 설명해주셨습니다. 성능을 좋게하기 위해서 사용한다고 하셨습니다. 좋은 예제를 찾는데 시간이 좀 걸리셨고 Oracle문서에서도 바로 찾지 못하셨습니다.

subquery factoring 으로 구글에 검색을 하셔서 몇분동안 예제를 찾아보셨습니다.

 subquery factoring 은 깊게 봐야 더 좋다고 하셨습니다.

 

한번 읽어온 자료를 다시 활용하려면 Sub query를 사용하거나 in line view를 만들어 주어야 하지만 WIth문을 써서 하면 또 읽는것을 막고 Temp Table Space에 있는것을 읽어서 성능을 높이는 방법을 써서 성능을 높일 수 있습니다.

Create Index를 하면 PGA WA(work area)에서 작업을 합니다.

 

이번에는 Table Space를 보겠습니다. 보통은 자동으로 계속 늘어나게 설정이 되어있고 자동으로 늘어나는 것이 위험할 수 있는데 작업을 하다가 잘못하여 자동으로 계속 늘어나 Full나게 되면 DB가 죽을 수 있습니다. (100%이해는 안되지만 강사님의 설명을 직접 옮겼습니다.)

 그래서 Temp Table space를 생성해보겠습니다.

 

 

Temp table space를 여러개 성성하여 그룹으로 묶으면 한 사용자가 사용할 때 IO가 분산되어 좋은 성능을 발휘할 수 있습니다.

 

===================================== 2 ===========================================

오늘은 9시 이후에 개인 사정으로 10시까지 강의를 듣지 못할 수 있을 것 같습니다.

명절에 무엇을 할 지..... 흠.... 명절에는 TV 보고 자고 먹고.... 그럴 것 같군요.... 강사님께서도 비슷하신 것 같습니다.

SQL> show parameter memory_target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
memory_target                        big integer 0

0인걸 보니 수동인 것 같습니다.

SQL> show parameter db_cache_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_cache_size                        big integer 0
SQL> alter system set db_cache_size=250m;

System altered.

SQL> show parameter db_cache_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_cache_size                        big integer 252M

 

 

EM에서 메모리권고자()를 다시한번 보겠습니다. 자동관리는 위의 파이그래프에 있는 항목들만 가능합니다. 다 더한값은 SGA 의 최대 사이즈를 초과할 수 없습니다.

위의 구성요소를 제외한 것들은 자동으로 늘거나 줄지 않습니다. 그 중에는 리두로그버퍼가 있습니다.

 

DB성능관리와튜닝_데모스크립트.txt

 

alter system set sga_target=0;   -> 수동으로 설정함

 


SQL>  show parameter sga_target;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_target                           big integer 528M

2. 반자동 (script)

반자동은 하한값을 설정하되 서로 조절이 가능 하도록 정말 최저로 낮게 설정을 하여 변화가 유동적으로 되도록 하되 최 하한 밑으로는 내려가지 않도록 할 때 유용합니다.

 

ASMM을 사용하고 있는것을 확인할 수 있습니다.

 


SELECT component, current_size/1024/1024
FROM V$SGA_DYNAMIC_COMPONENTS;

 

COMPONENT
----------------------------------------------------------------
CURRENT_SIZE/1024/1024
----------------------
shared pool
                   152

large pool
                     4

java pool
                     4

streams pool
                     4

DEFAULT buffer cache
                   252

KEEP buffer cache
                     0

RECYCLE buffer cache
                     0

DEFAULT 2K buffer cache
                     0

DEFAULT 4K buffer cache
                     0

DEFAULT 8K buffer cache
                     0

DEFAULT 16K buffer cache
                     0

DEFAULT 32K buffer cache
                     0

Shared IO Pool
                     0

ASM Buffer Cache
                     0


14 rows selected.

 


SQL>
SQL> show parameter memory_target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
memory_target                        big integer 0


SQL> show parameter memory_max_target
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
memory_max_target                    big integer 812M

SQL> show parameter sga_target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_target                           big integer 424M

//설정값을 변경해보겠습니다.


SQL> alter system set memory_target = 812m;

System altered.

SQL> show parameter memory_max_target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
memory_max_target                    big integer 812M
SQL> show parameter memory_target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
memory_target                        big integer 812M

재시작을 해야 바뀌는 값들을 확인하기 위해 강사님께서 DB를 재시작하는 것을 보여주셨습니다.

예를들면