• Db서버의 성능 측정
    • db서버의 경우 os 네트워크 I/O 대해서는 지금까지 설명한 대로다.
    • DBMS 별도 요약형식요약 형식, 스냅샷 형식, 이벤트 기록형식, 세 가지 관점이 있다.

  • 현재는 물리 메모리도 늘어나 관리 영역도 증가해 리눅스에서는 hugepage라는 큰단위로 관리하는 방식도 생겨났다.

  • 반대로 관리대상이 적으면 관리 영역은 편해진다. 하지만 덩어리가 크다는 것은 미사용공간이 발생하기 쉽고, 처리 대상이 적어져서 병렬처리시에 병목현상이 발생하기 쉽다.

  • 결국 '적당한' 것이 적절하다.
    • 예를 들어파일을 잘게 분할하도록 설계돼 있고, 프로세스도 여유있게 가지고 있는 프로세스 x파일 수만큼 관리영역을 필요로하기 떄문에 메모리가 부족해질 있다.
    • 반대로 데이터를 저장하고 있는 시스템은 많은 쓰기 요청에 의해 파일에 대한 대기상태가 발생해 성능 저하될 수 있다.
    • 재사용 캐시 사용, db연결풀

  • 모아서 처리(집약, 피기백)
    • 이 전략이유효한 것은 횟수에 비례해서 시간이 걸리는 경우다.
    • 횟수로 인해 오버헤드가 발생하는 경우 매우 유용하다.
    • I/O 집약 처리만 봐도 DBMS 블록 집약 작성, OS I/O 스케줄러 집약 작성, 저장소의 내부 캐시 데이터 집약 작성, DBMS 로그 파일 출력
    • 예를 들면 루프에서 INSERT 반복하는 애플리케이션도 횟수 문제라면 DB 배치처리로 한번에 넣으면 처리한다.
    • 참고로 모아서 처리하면 유효하지만 이것도 적당히 모아야 한다.너무 많이 모았따간 대량처리로 인해 문제가 될수 있다.(ex, SQL timeout error occurs while connecting to database)

  • 스케일업
    • 서버 단위의성능 향상 개념이다. 서버 장비 자체의 사양을 높이는것이 스케일업. CPU추가나 클록 업등이 이에해당한다.

  • 스케일아웃
    • 서버를 늘려서 성능을 향상하는 것이다.
    • 서바나 AP서버를 보자. 이것은 독립된 경우가 많다.
    • 별도 서버에서 스케일아웃으로 처리해도 영향이 적을 것이다. 떄문에 이서버들은 스케일 아웃에 적합하다.
    • 한편, 처리가 독립되지않은 것은 스케일업이 좋다. '
    • 독립되지 않은!= 하나로 처리하는 것이 결과적으로 빠르다'라는 경우가 있다.
    • 배치 서버나DB서버 등이 이에 해당한다.
    • 최근에는 독립되지 않은 처리도 스케일아웃하는 소프트웨어(하둡) 등이 있다.

  • 참조 빈도가 높은 데이터
    • -벨류, 해시화한다.
    • 가까운 곳에둔다. 즉 '캐시'.

  • 동기를 비동기로 변경
    • 예를 들어 AP 서버가 SQL DB서버에 던지고 , 다른 SQL 던지거나 다른 계산 처리를 하는것이다. 비동기는 하위 리소스에 충분한 작ㅂ략을 부여하고, 다른 작업을 동시에 진행해서 시간을 단축 시킬수 있다.DBMS나 OS에서는 비동기I/O라는 형식을 통해 하드 디스크가 여러 있는 경우에도 부하를 충분히 분산한다.
    • 단점을 개선한 비동기 개선형
      • 비동기 개선형으로 비동기+순서 보증(ordered) 방식이 있다.
      • 비동기의 단점은 두가지다.
        • '장애 시에 처리를 잃을 있다, 장애시에 데이터 정합성을 잃을수 있다. 예를들면 wan환경에는 비동기를 선택하는 경우가 많다.
        • 처리 순서가 바뀌기 때문에 발생하므로, 순서만 지킨다면 문제는 해결된다.

  • 대역 제어
    • 통신 세계 이외에서는 시스템에 대역 어가 제대로 갖추어져 있지 않은 경우가 많다.
    • 이렇게 되 인터넷에 의해 정보가 순식간에 퍼져서 순간적인 요청이 증가하는 , 심각한 부하 변동이 발생 할수 있다.
    • 이때안정적인 성능을 유지하기위해서 필요한 것이 바로 대역 제어다. 대역 제어는 *로드벨런스(부하분산)에서 실시 된다.

  • LRU방식(RB알고리즘중한개)
    • Least Recently Used의 의 약자로 이후로 가장 사용되지 않을 데이터를 버리는 알고리즘이다.
    • Dbms 저장소 내부, 캐시 등에서 자주 사용되는 방식이다.
    • 일반적으로는 효과적이지만 가끔 대량으로 오는 데이터에 의해 캐시 효율이 떨어진다는 결점이 있다.
    • 예를 들어전체 데이터를 교체하는 배치처리를 실행하면, 자주 사용되지 않는 데이터가 캐시로 한번에 들어온다. 이후에 캐시 상태는 OLTP 적합하지 않다.

  • 처리 분할 또는 세분화

  • 비휘발성 라이트 캐시 채용
    • 쓰기 처리시에는 '보증' 필요하다.
    • 예를 들어 일부 기록처리(특히 로그)는 장애가 발생해도 정보가 유지되어야하는 I/O이다.
    • 커밋하면 쓰리 처리를 기다린다. 물리 디스크의 I/O 응답은 I/O 낮기 때문에( 밀리초) 메모리에 기록해서 I/O 종료하고싶은 경우도 있다.
    • 장애가 발생되어도 유지되어야 한다. '비휘발성 메모리'라고 한다.DBMS 쓰리 처리 성능의 향상에 효과적인 방법이다

  • 부하분산(ex, rb 알고리즘 중 라운드 로빈)
    • 스케일아웃인 경우 서버가 여러대로 구성된다.
    • 이때, 이론관점에서는 서버가 없도록 하는것이 관건이다.
    • 이를 위해작업을 분산하는이 '부하분산'이다.'부하분산'이다. LB(Loaad Balance)라고 한다. 라고한다.
    • 기본적인 방식으로 라운드로빈(라운드 로빈(rOund Robin)이 있다.이있다. 전체적으로 작업을 분배함으로써, 모든 리소스를 사용해 성능을 향상시키는 방법이다.
    • 부하가 낮은 서버에 우선 할당하는방식도 있다, 이경우에는 연결이 서버나 부하가 낮은 서버를 찾아서 작업을 할당한다.
  • 참고로 부하분산에서는 부하를 제어할 수도 있는데, 이것이 바로 대역 제어가된다.

  • 사이트가 정지한 경우나 과부하인 경우에 Sorry 서버에 접속 할당해서 '잠시만 기다려주세요'라고 표시한다.

  • 대역 제어에 대해서는 과부하를 걸어도 예상대로 동작하는지, 여유상태가 너무 많지는 않은지, 시스템이 다운되지 않도록 적절한 시점에 동작하는지 확인하늑네 좋다.

  • SSL 처리를 어디서 하는지(LB에서 하는지 외부에서 하는지)

  • 데이터 센터가 여러개인 경우에 어디에 LB 둘지 , 이런 것들은 네트워크 설계자가 생각할 부분이다.

  • 클라우드가 되면 성능에 영향을 끼치기 떄문에 중요해진다. SSL 등이 요건을 충족하면서 WAN 심플해지도록 설계한다.

  • 어피니티, 바인드, 스티키 세션
    • 단순한 라운드 로빈은 대기 행렬 관에선 좋지만 종속성을 생각하면 역효과가 날수 있다.
    • 같은 데이터를참조할 가능성이 높아진다. 담당자(창구) 처리하는 것이 성능이 좋은 경우'많다.
    • 종속성을 우선할때는 어피니티(Affinity 연계한다 제한한다)라는 기술을 바인드 한다(연결한다)도있다.
    • 최근 코어수가 많은 cpu numa(Non-Uniform Memory Access) 불리는 기술이 있다.
      • 이것은 cpu 메모리가 연계되어 cpu관점에서 가까운것과 먼곳이 있다. 종속성을 위해 채용된다.
      • 예를 들어동일 프로세스는 항상 동일 cpu 코어상에서 동작하도록 하면 성능 향상을 기대할 있다.
      • 또한 세션에서는 어피니티뿐만 아니라 데이터 갱신 등을 고려하여 동일한 서버가 처리를 계속해야 한다.
      • LB에서는 스티키(Sticky) 세션이라 불리는데, 쿠키정보나IP정 등을 동일 세션일 것을 인식하여 같은서버에 처리를 보낸다.

  • Copy on Write(Cow):
    • Os에서는 프로세스를 생성할때 복사를 하지만, 이떄 실제 프로세스는 복사하지 않고 변경되는(write)하는 시점에서 복사를 한다.
    • 이 방법의장점은 복사 속도인데, 실제 데이터를 복사하지 않기 때문에 빠르게 처리된다.
    • 또한 같은데이터에 중복이 발생하지 않는 이점이 있다. 복사본을 순식간에 만든다.

  • 저널, 로그
    • 큐 구조이지만기록이 목적다. 저널로 기록하는 것의 장점은 이중화와 성능이다.
    • '별도로 기록하는데 어떻게 성능이 좋아지냐'라고 생각할수 있겠지만 앞에서 다룬 모아서작성 피기백 이라는 성능 향상이있다.

  • RDBMS에서는 예전부터 로그를 모아서 작성하는 기능이 탑재돼 있었다.
    • 또한 로그만 제대로 기된다면 필요한 시점에 데이터를 복원할 수도 있다.
    • 데이터를 나중에 기록해도 되기떄문에 성능상의 이점이 크다. 저장소나 파일시스템, DBMS에서는 로그선행기록 방식을 사용한다.

  • 압축
    • CPU 소비하는 주범이었다. 저장소 크기가 부족해서 압축하는것이 주 목적이지만, 최근에는 경향이 바뀌어 성능 향상을 시킬수 있다.
    • 압축을 걸면 크기가 작아져서 대량의 데이터 전송이 빨라지므로, CPU에의한 압축/전개보다 시간적으로 이점이 크다.

  • 낙관적인
    • 락은 필요하지만굳이 문제가 되지 않는다. 마지막에 경합이 발생한것을 알고 이러면 안되는데 롤백하자 하고 처리하는 방법이 있다. 이방법이 '낙관적인 '이다.
    • 타임스탬프, 버전 카운트, 상태 비교 방법 등이 이에 해당한다. 갱신 빈도가 적응경우에 쓴다.

  • 칼럼 지향 데이터베이스(Columnar Database, 카산드라 db)
    • 지향 dbms. 테이블의 세로 방향 집계나 검색이 빠르다.
    • 종래의 RDBMS 데이터를 (레코드) 단위로 블록에 넣고 있지만, 이방식에서는 (칼럼) 단위로 데이터를 블록에 넣는다.
    • 덕분에 DataWareHouse에서 특정 열을 집계할 필요할떄 효율적으로 처리할 수 있다.

+ Recent posts