[Clickhouse] 테이블 깨짐 현상

Clickhouse는 다른 실시간 서비스용 DB들과는 다르게, 데이터 손상이 잘 발생하는 편이다.

예를 들어, 강제로 장비를 재부팅한다거나 해도 merge나 flush가 완료되기전에 중단돼서 테이블 데이터가 깨질 수 있다. 그래서 재부팅하기 전에 웬만하면 수동으로 stop 해주고 하는게 좋다.

아무튼 그런 경우에는 다음과 같은 오류가 발생한다.

SQL Error [22000]: Code: 722. DB::Exception: Waited job failed: Code: 696. DB::Exception: Load job 'startup table prod.account' -> Code: 695. DB::Exception: Load job 'load table prod.account' failed: Code: 231. DB::Exception: Suspiciously many (132 parts, 381.80 MiB in total) broken parts to remove while maximum allowed broken parts count is 100. You can change the maximum value with merge tree setting 'max_suspicious_broken_parts' in <merge_tree> configuration section or in table settings in .sql file (don't forget to return setting back to default value): Cannot attach table `prod`.`account` from metadata file store/d79/d797b944-5814-41a5-998e-7f786ecd2b1a/....sql from

깨졌다고 테이블 조회도 안되고, 심하면 데이터베이스 단위에서도 접근이 안될 수 있다.

여기에 대한 가장 이상적인 방법은 사실 테이블 날리고 다시 넣는거다.
하지만 그게 곤란할 경우도 많으리라 생각한다.

다행히도 clickhouse는 깨진 블록에 대한 허용치를 조절하는 옵션을 제공한다.

sudo vi /etc/clickhouse-server/config.xml

<merge_tree>
    <max_suspicious_broken_parts>200</max_suspicious_broken_parts>
</merge_tree

기본값은 5인데, 이걸 늘리면 그만큼 깨진게 있어도 무시하고 처리한다.

그리고 솔직히 이건 기본값이 너무 낮은거같다. 수백 수천으로 늘려도 된다.