2017-07-07 5 views
1

私は、2ノード(1ノードにつき8コア)のCassandra 3.10クラスタを、1の複製係数で実行しています。私は、自分のcassandraクラスタ上にいくつものキースペースを持っています。Cassandraは、起動時にキースペースをドロップしてステートメントレビューエラーを発生させるのはなぜですか?

私は最近、私が停止/開始すると、バックアップする時間が非常に遅いことに気付きました。以下の例のように、"prepared statement recreation"スタックトレースが何千ものsystem.logとdebug.logの両方に見られます。 Cassandraは以前に削除したキースペースの文を準備しようとしているようです。

注記起動時に、cassandraに接続されているアプリケーション/クライアントなどはありません。私は手動でコミットログsave_cachesを削除し、以前のドロップキーのデータファイルと一緒にしました。これは起動時に違いはありません。私はデータとコミットログなしで私たちと同じ動作を参照してください。

Cassandraがスタートアップ時にこの情報を取得する場所、および/または既存のキースペースを維持しながらこれを解決する方法を知っている人は誰ですか?

プリペアドステートメントのレクリエーション警告:非既存の鍵空間に関する

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] 

他のスタックトレース:

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] 

答えて

0

私はこの1つを考え出しました。カッサンドラは、準備されたステートメントをsystem.prepared_statementsキースペースに書き込みます。彼らがこの機能を導入した時期はあまり確かではありません。これは、準備されたすべてのステートメントをこのテーブルに保持しているように見え、再起動時にそれらを読み込もうとします。以前にドロップされたキースペースからのものを含め、私のインスタンスには何百万もの行があります。

テーブルを切り捨てると、system.prepared_statementsが問題を解決し、起動時間が数時間から数秒に短縮されました。

切り捨てテーブル:

truncate system.prepared_statements; 
関連する問題