【问题标题】:Why am I getting Cassandra prepared statement recreation error on startup from dropped keyspaces?为什么我在启动时从丢弃的键空间得到 Cassandra 准备好的语句重新创建错误?
【发布时间】:2017-07-14 00:14:21
【问题描述】:

我正在运行一个 2 节点(每个节点 8 个内核)Cassandra 3.10 集群,复制因子为 1。随着时间的推移,我的 cassandra 集群上已经并且已经拥有了许多键空间。

我最近注意到,当我停止/启动时,恢复的时间非常慢。根据以下示例,在我的 system.log 和 debug.log 中,我看到了数千个 “准备好的语句重新创建” 堆栈跟踪。看来 Cassandra 正在尝试为不再存在的键空间准备语句,因为我之前已经删除了它们。

注意我在启动时没有任何应用程序/客户端等连接到 cassandra。我还手动清除了 commitlog、saved_caches 以及先前删除的密钥空间的数据文件,这在启动时没有任何区别。在没有数据和提交日志的情况下,我看到了相同的行为。

有人知道 Cassandra 在启动时从哪里获取此信息和/或如何在保留现有密钥空间的同时解决此问题?

Prepared statement 重新创建警告:

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]

【问题讨论】:

    标签: cassandra-3.0


    【解决方案1】:

    我想出了这个。 Cassandra 将准备好的语句写入 system.prepared_statements 键空间。不太确定他们何时引入此功能。它似乎将所有准备好的语句保留在此表中,并在重新启动时尝试读取它们。我的实例中有数百万行,包括以前删除的键空间中的行。

    截断表 system.prepared_statements 为我解决了问题,启动时间从几小时缩短到几秒。

    截断表:

    truncate system.prepared_statements;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 2011-07-09
      相关资源
      最近更新 更多