출처  :  http://lazyboy.tistory.com/entry/AIX-Concurrent-IO-for-RDBMS



nmon 이나 topas 에서 나오는 내용들이 하도 다른 OS와 달라서 이리저리 공부하는 중 흥미로운 Article을 찾았다.

Inproving Database Performance with AIX Concurrent I/O


위 제목을 가진 글이었는데, AIX 의 Concurrent I/O 기법에 대해 다루고 있다.

위 내용에 대해 대해 간략하게 말하자면 이 Ariticle 은 Database 에서 I/O 이슈를 해결하기 위한 방법을 여러가지 설명하고 있는데, 그중에 제일은 Concurrent I/O 라는 것을 사용하라는 것이다.

일반적으로 DBMS 는 I/O 를 효과적으로 처리하기 위해 별도의 Cache 를 두고 있다. 이를 제품에 따라 Buffer Cache 라고 하기도 하고, Buffer pool 이라고 하기도하고 뭐 그렇다.

그런데 DBMS 가 올라가는 OS 에도 I/O 를 효과적으로 다루기 위해 커널 쪽에 버퍼를 둔다. 이러한 구성은 System 에 불필요한 Overhead 를 가지고 오게 되며. 대부분 DBMS 를 사용할때 OS 쪽의 File cache는 bypass 하도록 설정한다. 이를 바로 Direct I/O 라 한다.

문제는 이 Direct I/O 를 가지고 설정을 하고 사용할때 야기되는 문제점이 또 있다는 것인데, 위 Article 에서는 이를 inode contention 으로 설명하고 있다.

inode는 매우 중요한 파일의 메타정보로 이게 깨지면 난리난다. 그래서 매우 엄격한 동시성 제어를 하고 있는데, 문제는 Load 가 심해질수록 이 inode 가 깨지지 않도록 lock 을 aquire / release 하는 비용이 커진다는 것. 이것은 Direct I/O 에서 더 커지게 되는데 이는 파일을 사용자가 요청할때마다 바로 바로 건드리기 때문이다. (오히려 Buffered I/O 에서는 inode contention 이 그리 빈번하지 않다)

Concurrent I/O 가 나오기 전 AIX 에서 inode 에 lock을 걸때는 다음과 같다.

  • write() 할때마다. (파일에 내용을 쓸때마다)
  • owner , permission 등의 정보가 바뀔때마다.

이렇다보니 Direct I/O 에서 매우 빈번한 inode lock 을 잡게 되고, 이는 시스템 성능의 저하로 나타난다.

그래서 IBM 에서는 AIX 5.2 부터 Concurrent I/O 라는 새로운 기법을 내세웠는데, 이는 가장 빈번한 write() 를 할때는 inode 쪽에 write exclusive lock 을 잡지 않고, shared lock 만 잡는다는 거다. 다만 파일이 크키가 변하거나 , 잘리거나(truncated), 또는 Permission 등이 바뀌거나 의 경우에는 inode 에 exclusive lock 을 잡는다.

이렇게 구성함으로써 거진 raw device 에 필적하는 성능을 낼 수 있는데 위 Aricle 에 보면 일반적인 Direct I/O, Raw device , Concurrent I/O 를 통한 성능 비교자료가 나와있다. 거진 Raw Device 와 비슷하게 나온다.

간단하게 cio 마운트옵션을 줘서 mount 하면 해당 파티션에 Default 로 Concurrent I/O 를 사용하도록 설정할 수 있고, App 단에서는 open 할때 옵션을 줘서 만들어낼 수도 있다. 또는 namefs를 사용하여 특정 directory 만 설정할 수도 있는데, 위 문서에 상세하게 잘 나와있으니 참조할것.

DBMS 의 file system 중 위 concurrent I/O 를 적용했을때 가장 효과를 많이 볼 수 있는 곳이 어딜까 생각해보니, 아무래도 Redo log 를 담는 쪽이 될것 같다. 하나의 로그에 동시에 여러개의 Service thread 또는 Process 가 동시에 write 를 해댈테니 말이다. 이건 테스트를 해보고 싶은데 릴리즈 기간이라 장비를 독점할 수 없으니 여엉....

5.2부터 나온 기능이라 대부분 5.3 이상을 사용하는 요즘 시류를 보면 제대로 효과만 검증대면 여기저기 많이 써먹을 수 있을 것 같다.

다른 OS는 이런거 없는지 아직 찾아보지는 못했는데, 한번 찾아봐야겠다.

나중에 시간나면 꼭 테스트해봐야지.



'::: OS ::: > AIX' 카테고리의 다른 글

쉘스크립트에서 어제, 이틀전 날짜 구하는 방법  (0) 2011.01.03
AIX 6.1 AIO 설정법  (0) 2011.01.03
AIX Concurrent I/O for RDBMS - 2  (0) 2011.01.03
AIX - DAT Tape 사용법  (0) 2010.12.13
AIX Admin 시험정보  (0) 2010.09.17

+ Recent posts