2017-10-17 6 views
1

5 노드 클러스터에 Cassandra가 있습니다. 복제 계수 3이 포함 된 각 노드에 ~ 650GB의 데이터가 있습니다. 최근에/var/log/cassandra/system.log.NoSpamLogger.java 최대 메모리 사용량에 도달했습니다. Cassandra

정보 [ReadStage-5] 2017년 10월 17일 17 : 06 : 07,887 NoSpamLogger.java:91 - (1.000GiB)에 도달 최대 메모리 사용량이 1.000MiB의 덩어리를 할당 할 수 없습니다

내가 시도

은 증가 file_cache_size_in_mb하지만 나중에 동일한 오류가 발생하기보다는 빠릅니다. 나는이 매개 변수에 대해 2GB만큼 높이려고했지만 아무 소용이 없다.

오류가 발생하면 CPU 사용률이 증가하고 읽기 대기 시간이 크게 이상합니다. 이 서지 표시가 매 1/2 시간마다 근사하게 표시됩니다. 아래 목록의 타이밍에 유의하십시오.

INFO [ReadStage-5] 2017년 10월 17일 17 : 06 : 07,887 NoSpamLogger.java:91 - 1.000MiB 의 청크를 할당 할 수있다 (1.000GiB)에 도달 최대 메모리 사용량 INFO [ReadStage-36] 2017- 10-17 17 : 36 : 09,807 NoSpamLogger.java:91 - 최대 메모리 사용량이 1.000GiB에 도달하여 1.000MiB의 청크를 할당 할 수 없음 정보 [ReadStage-15] 2017-10-17 18 : 05 : 56,003 NoSpamLogger.java : 91 - 최대 메모리 사용량 (2.000GiB)에 도달 했으므로 1.000MiB의 청크를 할당 할 수 없음 정보 [ReadStage-28] 2017-10-17 18 : 36 : 01,177 NoSpamLogger.java:91 - 최대 메모리 사용량 (2.000GiB)에 도달하지 못함 1.000MiB의 청크 할당

두 개의 테이블은 시간 단위로 분할되어 있으며 파티션은 큽니다. 전의.

cdsdb/raw_data histograms 
Percentile SSTables  Write Latency  Read Latency Partition Size  Cell Count 
           (micros)   (micros)   (bytes)     
50%    0.00    61.21    0.00   1955666    642 
75%    1.00    73.46    0.00   17436917    4768 
95%    3.00   105.78    0.00   107964792    24601 
98%    8.00   219.34    0.00   186563160    42510 
99%   12.00   315.85    0.00   268650950    61214 
Min    0.00    6.87    0.00    51     0 
Max   14.00   1358.10    0.00  3449259151   7007506 

cdsdb/customer_profile_history histograms 
Percentile SSTables  Write Latency  Read Latency Partition Size  Cell Count 
           (micros)   (micros)   (bytes)     
50%    0.00    73.46    0.00   223875792    61214 
75%    0.00    88.15    0.00   668489532   182785 
95%    0.00   152.32    0.00  1996099046   654949 
98%    0.00   785.94    0.00  3449259151   1358102 
99%    0.00   943.13    0.00  3449259151   1358102 
Min    0.00    24.60    0.00    5723     4 
Max    0.00   5839.59    0.00  5960319812   1955666 

는이 문제를 완화하기 위해 앞으로 수있는 방법을 제안 주 시겠어요 : 여기 nodetool 테이블에서 자신의 출력이 여기에

Read Count: 4693453 
    Read Latency: 0.36752741680805157 ms. 
    Write Count: 561026 
    Write Latency: 0.03742310516803143 ms. 
    Pending Flushes: 0 
     Table: raw_data 
     SSTable count: 55 
     Space used (live): 594395754275 
     Space used (total): 594395754275 
     Space used by snapshots (total): 0 
     Off heap memory used (total): 360753372 
     SSTable Compression Ratio: 0.20022598072758296 
     Number of keys (estimate): 45163 
     Memtable cell count: 90441 
     Memtable data size: 685647925 
     Memtable off heap memory used: 0 
     Memtable switch count: 1 
     Local read count: 0 
     Local read latency: NaN ms 
     Local write count: 126710 
     Local write latency: 0.096 ms 
     Pending flushes: 0 
     Percent repaired: 52.99 
     Bloom filter false positives: 167775 
     Bloom filter false ratio: 0.16152 
     Bloom filter space used: 264448 
     Bloom filter off heap memory used: 264008 
     Index summary off heap memory used: 31060 
     Compression metadata off heap memory used: 360458304 
     Compacted partition minimum bytes: 51 
     **Compacted partition maximum bytes: 3449259151** 
     Compacted partition mean bytes: 16642499 
     Average live cells per slice (last five minutes): 1.0005435888450147 
     Maximum live cells per slice (last five minutes): 42 
     Average tombstones per slice (last five minutes): 1.0 
     Maximum tombstones per slice (last five minutes): 1 
     Dropped Mutations: 0 



    Read Count: 4712814 
    Read Latency: 0.3356051004771247 ms. 
    Write Count: 643718 
    Write Latency: 0.04168356951335834 ms. 
    Pending Flushes: 0 
     Table: customer_profile_history 
     SSTable count: 20 
     Space used (live): 9423364484 
     Space used (total): 9423364484 
     Space used by snapshots (total): 0 
     Off heap memory used (total): 6560008 
     SSTable Compression Ratio: 0.1744084338623116 
     Number of keys (estimate): 69 
     Memtable cell count: 35242 
     Memtable data size: 789595302 
     Memtable off heap memory used: 0 
     Memtable switch count: 1 
     Local read count: 2307 
     Local read latency: NaN ms 
     Local write count: 51772 
     Local write latency: 0.076 ms 
     Pending flushes: 0 
     Percent repaired: 0.0 
     Bloom filter false positives: 0 
     Bloom filter false ratio: 0.00000 
     Bloom filter space used: 384 
     Bloom filter off heap memory used: 224 
     Index summary off heap memory used: 400 
     Compression metadata off heap memory used: 6559384 
     Compacted partition minimum bytes: 20502 
     **Compacted partition maximum bytes: 4139110981** 
     Compacted partition mean bytes: 708736810 
     Average live cells per slice (last five minutes): NaN 
     Maximum live cells per slice (last five minutes): 0 
     Average tombstones per slice (last five minutes): NaN 
     Maximum tombstones per slice (last five minutes): 0 
     Dropped Mutations: 0 

통계 간다입니까?

+0

이 두 테이블 모두의 "nodetool cfhistograms"를 제공 할 수 있습니까? – dilsingi

+0

질문에 히스토그램을 게시했습니다. – Varsha

답변

0

출력 된 cfhistograms 출력을 기반으로 파티션이 큽니다.

raw_data 테이블의 95 % 백분율에는 107MB의 파티션 크기와 최대 의 3.44GB가 있습니다. customer_profile_history의 95 % 백분위 수에는 파티션 크기가 1.99GB이고 최대 값은 5.96GB입니다.

이것은 거대한 파티션이 sstable에 쓰여지므로 30 분마다 발견되는 문제와 분명히 관련이 있습니다. 데이터 모델은 변경해야하며 파티션 간격을 "시간"대신 "분"으로 설정하는 것이 좋습니다. 따라서 2GB 파티션은 33MB 파티션으로 줄어 듭니다.

권장되는 파티션 크기는 최대 100MB에 가깝도록 유지하는 것입니다. 이론적으로는 100MB가 넘는 용량을 저장할 수 있지만 성능은 저하 될 것입니다. 해당 파티션의 모든 읽기가 전선을 통해 100MB가 넘는 데이터임을 기억하십시오. 귀하의 경우에는 2GB 이상이므로 모든 성능 관련 문제가 발생합니다.

+0

멋진! 이것을 지적 해 주셔서 감사합니다. 같은 메모에서이 큰 테이블을 다시 파티션하는 가장 쉬운 방법은 무엇입니까? 새 테이블을 만들고 여기에 데이터를 다시 입력해야합니까? 아니면 더 좋은 방법이 있습니까? – Varsha

+0

이상하게도 더 큰 파티션 테이블 "customer_profile_history"는 약 10GB의 데이터 만 가지며 파티션을 여전히 개선 할 수있는 "raw_data"테이블은 약 594GB입니다.먼저 전 테이블을 다시 만들고 벌크 로더 (sstableloader라고도 함)를 사용하여 데이터를로드하는 데 집중할 것입니다. 동일한 프로세스를 사용하여 두 번째 테이블 데이터를 다시로드하거나 친숙한 경우 스파크 부하를 사용할 수도 있습니다. – dilsingi

+0

@Varsha 후속 질문이 없으면 대답 (틱 마크)을 수락하는 것을 잊지 마십시오. – dilsingi