2017-07-07 1 views
1

Ich führe einen Cassandra 3.10 Cluster mit 2 Knoten (8 Kerne pro Knoten) mit einem Replikationsfaktor von 1. Ich habe und hatte im Laufe der Zeit eine Anzahl von Schlüsselräumen auf meinem Cassandra-Cluster.Warum erhalte ich einen Cassandra vorbereiteten Fehler bei der Kontoerstellung beim Start von verlorenen Schlüsselbereichen?

Ich habe in letzter Zeit gemerkt, dass wenn ich stopp/starte die Zeiten sehr langsam sind. Ich bin Tausende von "vorbereitete Anweisung Erholung" Stack-Traces wie unten in Beispiel sowohl in meinem System.log und debug.log gesehen. Es scheint, dass Cassandra versucht, Anweisungen für Keypaces vorzubereiten, die nicht mehr existieren, da ich sie vorher fallen gelassen habe.

Hinweis Ich habe keine Anwendung/Client usw. mit Cassandra verbunden, wenn es gestartet wird. Ich habe auch das Commitlog, saved_caches zusammen mit den Datendateien für die zuvor drop keysapces manuell gelöscht, und dies macht keinen Unterschied beim Start. Ich sehe das gleiche Verhalten mit unseren ohne die Daten und Commit-Protokolle.

Wer weiß, wo Cassandra diese Informationen beim Start erhält und/oder wie man dies unter Beibehaltung bestehender Schlüsselräume löst?

vorbereitete Erklärung Erholung Warnung:

WARN [main] 2017-07-07 14:44:14,362 QueryProcessor.java:159 - prepared statement recreation error: update metric_resource set attributes = ? where t_uid ='TUID1' and metric_name =? and resource_name=? 
org.apache.cassandra.db.KeyspaceNotDefinedException: Keyspace test_keyspace_1 does not exist 
     at org.apache.cassandra.thrift.ThriftValidation.validateKeyspace(ThriftValidation.java:85) ~[apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.thrift.ThriftValidation.validateColumnFamily(ThriftValidation.java:109) ~[apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.cql3.statements.ModificationStatement$Parsed.prepare(ModificationStatement.java:796) ~[apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.cql3.statements.ModificationStatement$Parsed.prepare(ModificationStatement.java:789) ~[apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.cql3.QueryProcessor.getStatement(QueryProcessor.java:557) ~[apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.cql3.QueryProcessor.prepare(QueryProcessor.java:412) ~[apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.cql3.QueryProcessor.preloadPreparedStatement(QueryProcessor.java:154) ~[apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:358) [apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:601) [apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:735) [apache-cassandra-3.10.jar:3.10] 

Andere Stack-Traces auf nicht vorhandene Schlüsselraum beziehen:

org.apache.cassandra.db.KeyspaceNotDefinedException: Keyspace test_keyspace1 does not exist 
     at org.apache.cassandra.thrift.ThriftValidation.validateKeyspace(ThriftValidation.java:85) ~[apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.thrift.ThriftValidation.validateColumnFamily(ThriftValidation.java:109) ~[apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.cql3.statements.SelectStatement$RawStatement.prepare(SelectStatement.java:920) ~[apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.cql3.statements.SelectStatement$RawStatement.prepare(SelectStatement.java:915) ~[apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.cql3.QueryProcessor.getStatement(QueryProcessor.java:557) ~[apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.cql3.QueryProcessor.prepare(QueryProcessor.java:412) ~[apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.cql3.QueryProcessor.preloadPreparedStatement(QueryProcessor.java:154) ~[apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:358) [apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:601) [apache-cassandra-3.10.jar:3.10] 
     at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:735) [apache-cassandra-3.10.jar:3.10] 

Antwort

0

dachte ich dieses heraus. Cassandra schreibt vorbereitete Anweisungen zu system.prepared_statements keyspace. Nicht sicher, als sie diese Funktion einführten. Es scheint alle vorbereiteten Anweisungen in dieser Tabelle zu behalten und versucht sie bei einem Neustart zu lesen. Ich habe Millionen von Zeilen in meiner Instanz, einschließlich derjenigen aus zuvor gelöschten Schlüsselräumen.

Das Abschneiden der Tabelle system.prepared_statements löste das Problem für mich und die Startzeiten gingen von Stunden zu Sekunden.

Kürzen Tabelle:

truncate system.prepared_statements; 
Verwandte Themen