2013-12-13 3 views
2

카산드라 1.2.11을 사용하고 있습니다. 내가 주어진 타임 스탬프보다 오래된 updated_date 모든 항목을 삭제하는 Java 응용 프로그램을 만들었카산드라 rpc_timeout

CREATE TABLE subscribers_all (
subscriber text, 
status int, 
package text, 
SW_ON timestamp, 
S_NUMBER text, 
USER_NAME text, 
updated_date timestamp, 
PRIMARY KEY (subscriber) 
); 

: 나는 다음과 같은 열 가족을 만들었습니다. while 루프에서 다음 select 문을 사용했습니다.

select * from subscribers_all where token(subscriber) > token(?) limit 100; 

프로그램을 시작했습니다. 잘 작동했다. 그런 다음 타임 스탬프를 잘못 입력했기 때문에 프로그램을 삭제했습니다. 종료 훅을 연결하지 않았으므로 클러스터가 제대로 종료되지 않았습니다. 올바른 타임 스탬프로 프로그램을 다시 시작했습니다. 카산드라 드라이버 (내가 몇 번 시도) 다음과 같은 오류를 던지고 :

com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read query at consistency ONE (1 responses were required but only 0 replica responded)

그래서, cqlsh에서 선택을 테스트하기로 결정했다. 심지어 간단한 선택 다음은 작동하지 않습니다 :

select subscriber from subscribers_all limit 1; 

를 항상이 오류가 발생합니다 :

Request did not complete within rpc_timeout.

나는 내 선택에 where 절을 넣을 때, 잘 작동합니다.

select * from subscribers_all where subscriber = 'xyz'; 

예상되는 결과를 얻었습니다. 전체 카산드라 클러스터를 다시 시작해 보았습니다. 도움이되지 않아. 내 cqlsh의 선택 또는 내가 다시 시작하려 시대에 대한

ERROR [Native-Transport-Requests:973721] 2013-12-12 15:08:29,699 ErrorMessage.java (line 210) Unexpected exception during request java.io.IOException: Connection reset by peer

없음 예외 : 로그 파일에서

, 난 단지 내 응용 프로그램을 죽였을 때 나는 시간으로 대응을 생각하는 하나 개의 예외를 볼 수 있습니다 내 신청서. 'nodetool tpstats'는 메시지가 삭제되거나 차단되거나 대기 중이라는 것을 보여줍니다.

누군가가 '노드 간 시간 동기화로 인한 것'이라고 제안했습니다. 확인하고 서버가 동기화됩니다.

추적을 사용하도록 설정했는데 작동하는 선택과 작동하지 않는 선택을 다시 실행했습니다. 다음은 ok select에 대한 추적 결과입니다 (잘하면 URL 붙여 넣기가 허용됨). 추적이 'LIMIT 1'과 쿼리에 대해 보여줍니다 여기에서

http://pastebin.com/7D6gYRms

이의 일부분이다 :

http://pastebin.com/50ksph3k

나는 그것이 버그,하지만 거의 확신은이 모든 그것에 대한 해결책? 열 패밀리를 삭제하고 다시 작성하는 것을 거부합니다. 라이브로 갈 때 실현 가능한 솔루션이 아닙니다.

+0

작동하는 쿼리에 추적 기능이 표시됩니다. 'select * from subscribers_all where subscriber ='xyz ';' –

+0

내 질문을 업데이트했습니다. – Anakin001

답변

3

오랜 시간 동안 가비지 수집 프로세스가 진행 중일 때 Cassandra를 쿼리 할 때 GC 관리자를 확인하십시오. Cassandra에서는 가비지 수집 프로세스가 끝날 때까지 다른 작업을 수행 할 수 없으므로이 예외가 발생할 수 있습니다 .

com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read 
query at consistency ONE (1 responses were required but only 0 replica responded). 

가비지 수집 프로세스를 조정해야합니다. Go through this

GC 작업 및 세대 별 스윕 및 메모리 그래프를 시각화하려면 JDK와 함께 제공되는 JVisualVM 도구를 열고 VisualGC 플러그인을 설치하십시오. 체크 아웃 this.

+0

불행히도이 문제 이후 Cassandra 사용을 중단 했으므로 이것이 이유인지 여부를 확인할 수 없습니다. 그러나 GC에 문제가있는 경우 모든 쿼리에 대해 동일한 결과 (시간 초과)가 발생할 것으로 예상했기 때문에 이것이 사실이라고 생각하지 않습니다. 대신, 이것은 WHERE 절을 넣지 않은 경우에만 발생했습니다. 바라건대, 카산드라가 더 이상 설치되지 않았기 때문에이 문제에 부딪친 다른 사람들은 더 논평 할 것입니다. – Anakin001

+0

동일한 문제가 있었는데 Solr을 내 테이블에서 사용하도록 설정 한 것과 관련이 있음을 발견했습니다. 그것은 인덱스가없는 필드에서 WHERE 절을 사용하려고 시도한 것으로 밝혀졌습니다. 그리고 어떤 이유로 그것을 알지 못했습니다. Solr 로그에서 그 흔적을 발견했습니다. 누락 된 색인을 생성 한 후에는 문제가 사라졌습니다. – kazy

+0

유용한 정보가 여기에 있습니다 https://support.datastax.com/entries/69902949-ReadTimeoutException-seen-when-using-the-java-driver-caused-by-excessive-tombstones 많은 묘비로 인해 오류가 발생하면 삭제). 제안은 테이블에 대한 gc_grace_seconds를 줄이는 것입니다. – jny