주식회사 누리아이티

정보자산의 보안강화를 위한 다계층 인증SW (BaroPAM) 전문기업.

▶ Tuxedo/오류 메시지(Oracle)

Oracle 성능애 영향을 미치는 것들-ROLLBACK_SEGMENTS

누리아이티 2017. 12. 21. 08:28

 

이 파라미터는 모든 버젼의 오라클에서 사용되며, 인스턴스 기동 중에 온라인 상태로 사용할 rollback segment를 지정합니다.

만약 파라미터에서 지정한 rollback segment가 존재하지 않는 것이라면 ora-1534 에러가 발생하며, 데이터베이스는 mount까지만 되고 open 되지는 않습니다.

 

Rollback segment는 트랜잭션에서 발생하는 변경사항을 기록하여, 트랜잭션이 rollback 되어야 할 경우 이전 상태로 돌리기 위한 각종 정보를 저장하는 영역입니다

 

Rollback segment는 여러 extent들로 구성되는데, extent round-robin 방식으로 순환되며 사용됩니다. , 현재 사용되는 extent full이 나는 경우 다음 extent를 사용하는 식으로 사용됩니다.

 

Rollback segment read consistency를 제공해 주고, 트랜잭션을 undo 시킬 수 있고, recovery에 사용되는 등, 데이터베이스에서 매우 중요한 역할을 수행합니다.

 

Read consistency는 업무적으로도 매우 중요한데, 한 사용자 (1번 사용자) 가 데이터를 읽는 동안, 다른 사용자가 (2번 사용자) 그 데이터에 변경을 가한다면, 2번 사용자가 데이터 변경을 일관성 있게 종료하기 전가지 1번 사용자는 이전 상태의 데이터, 즉 이전에 commit 된 상태의 데이터를 사용하여야만 데이터 일관성 및 정합성이 보장됩니다.

 

RBS의 적정 크기는 다른 문제와 마찬가지로 데이터베이스 내에서 사용되는 일반적인 트랜잭션 레벨에 따라 다르며, RBS extent의 크기와 관련해서는 오라클에서는 extent size와 관련된 (initial, next )권고 사항이 존재합니다.

 

Rollback segment의 갯수와 관련해서는, rollback segment간의 contention 이 발생하지 않도록 조정해 주는 것이 중요합니다.

모든 트랜잭션은 RBS의 헤더에 존재하는 트랜잭션 테이블에 정보가 저장되며, 모든 트랜잭션이 이 테이블의 내용을 변경하여야 하므로, contention이 발생할 수 있습니다.

한 시점에 한 개의 트랜잭션이 한 개의 rollback segment를 사용하도록 하는 것이 일반적인 원칙이며, 오라클에서는 4개의 트랜잭션당 한 개의 rollback segment를 사용하는 것을 권고하지만, 절대적인 기준이 아니라 상대적인 기준으로 보는 것이 바람직합니다.

 

rollback segment contention을 조사하기 위해서는 v$waitstat을 조회할려면 다음 query rollback segment contention을 조회해 볼 수 있습니다.

 

SELECT a. name, b.extents, b.rssize, b.xacts, b.waits,

       b. gets, optsize, status

FROM V$ROLLNAME A, V$ROLLSTAT B

WHERE a.usn = b.usn;


위의 질의를 처리한 결과로 "xacts" ( 트랜잭션의 줄임말 ) 가 계속해서 1 이상이 경우, rollback segment의 갯수를 늘려주는 것이 contention이 발생할 가능성을 줄여줍니다.


만약 wait 갯수가 0 보다 크고, 특별한 사항에서만 나타나는 것이 아니라 항상 비슷한 상황이라면, 이 경우에도 rollback segment의 갯수를 늘려주는 편이 났습니다.