Vertica의 이 일들 (15) - Vertica 오류 보고TM

1721 단어
최근에 Vertica를 사용할 때 문제가 발생했습니다. Vertica는 한동안 운행한 후에 항상 아래와 같은 오류가 발생합니다
java.sql.SQLException: [Vertica][VJDBC](5065) ERROR: Too many ROS containers exist for the following projections:
 (limit = 18078, ROS files = 12088, DV files = 5992, new files = 10)

문제가 생기면 Vertica의 저장 메커니즘을 말하지 않을 수 없습니다.Vertica는 기본적으로 새로 쓴 데이터를 WOS(쓰기 최적화)에 쓴 다음에 일정한 조건(예를 들어 일정한 시간 주기)에 따라 WOS의 데이터를 ROS(읽기 최적화)에 쓴다. 이때 ROS는 매우 작은 데이터 블록의 조각이 많을 수 있다. 이것은 Vertica가 일정한 시간 주기 후에 이 ROS 블록을 큰 ROS 파일로 통합하는 것이다.여기서 데이터를 WOS에서 ROS에 쓰는 과정인 Vertica관은 MoveOut 조작이라고 하고, 흩어진 ROS를 큰 ROS로 합치는 과정인 Vertica관은 MergeOut 조작이라고 한다.
자, 이제 우리 문제를 봅시다.오류는 로스가 너무 많다는 것이다. 그럴 수 있는 이유는:
  • WOS가 ROS를 너무 많이 썼는데 그 이유는 매번 insert/update의 데이터 집합이 너무 작아서 생성된 조각이 너무 많기 때문일 것이다..
  • ROS가 너무 많고 배치된 MoveOut과 MergeOut의 시간 간격이 너무 길어서 MoveOut과 MergeOut을 할 겨를이 없습니다..

  • 그래, 내 어플 좀 보자.
  • 첫 번째 가능한 원인에 대해 확실히 우리의 응용 수요의 문제이다. 이것은 현재로서는 우리가 바꿀 수 없다..
  • 두 번째 가능한 원인에 대해 Vertica의 자료를 찾아봤는데 Vertica에서 기본으로 하는 Merge Out Interval은 600이고 Move Out Interval은 300이다.이 두 파라미터는 아래의 명령을 통해 볼 수 있다
  • 1	SELECT GET_CONFIG_PARAMETER('MoveOutInterval');
    2	SELECT GET_CONFIG_PARAMETER('MergeOutInterval');
    

    우리의 응용 프로그램 자체에 많은 ROS 조각이 생기기 때문에 우리는 MoveOut과 MergeOut의 Interval을 줄여서 Vertica가 가능한 한 빨리 MoveOut과 MergeOut을 할 수 있는지 생각했다.그래서 Vertica 매개변수를 수정했습니다.
    1	SELECT SET_CONFIG_PARAMETER('MoveOutInterval', 60);
    2	SELECT SET_CONFIG_PARAMETER('MergeOutInterval', 30);
    

    이 두 개의 매개 변수를 수정한 후, 우리의 응용은 확실히 오랫동안 운행한 후에 다시는 위의 문제가 발생하지 않았다.사실 이 문제에 관해서는 조절할 수 있는 몇 가지 파라미터가 있다. 구체적인 자료는 Vertica Tuple Mover Parameters를 참고할 수 있다

    좋은 웹페이지 즐겨찾기