Cassandra 卡桑德拉读取超时

Cassandra 卡桑德拉读取超时,cassandra,Cassandra,我对卡桑德拉的读取超时有问题。 情景: 3 GB数据加载到Cassandra 1个数据中心内的9个Cassandra节点 复制等于3 一致性级别等于1 卡桑德拉版本2.2.9 链接到cassandra.yaml 测试: 为了进行测试,我使用用于Cassandra的jmeter插件。 请求是在所提供的ID列表中选择行ID的条件。列表始终包含100个ID。每个请求应始终返回100行(所有ID都在数据库中)。 ID是随机的,因此缓存角色减少 样本选择: select * from price.i

我对卡桑德拉的读取超时有问题。 情景:

  • 3 GB数据加载到Cassandra
  • 1个数据中心内的9个Cassandra节点
  • 复制等于3
  • 一致性级别等于1
  • 卡桑德拉版本2.2.9
链接到cassandra.yaml

测试: 为了进行测试,我使用用于Cassandra的jmeter插件。 请求是在所提供的ID列表中选择行ID的条件。列表始终包含100个ID。每个请求应始终返回100行(所有ID都在数据库中)。 ID是随机的,因此缓存角色减少

样本选择:

select * from price.item_vat_posting_group where no in ('B7B7A6','B2DD05','A34751','B4BC7D','C0BB53','D07DCB','C03716','BB99DF','A975C2','C2AE27','AF621C','242448','B30CDA','508336','B44D6B','D07422','AC44EA','C6F34D','9B25AC','C4CF12','AC25BD','C3D9C7','AE7DB2','C5E03E','BF7AC1','B499B5','A7787E','645180','A9BEFE','AFFEA4','A88955','D95B50','B0F9FC','C09174','253953','9ED9CA','CAF896','536951','214502','427776','DA14CB','422282','A4B10A','C56BF5','B373E0','D171EF','C70607','B350AB','9D809B','586563','BF6308','A4BF5A','C42716','C3261C','C45B79','C6FE55','D1F0D4','C483B5','A67D59','DC5898','9BACAD','D9C6B0','D17DAE','D8D4F3','A05946','BBEBA8','A87B37','A13E97','BB7099','A3FC26','C461DF','309810','BF6306','D07603','C59F70','C5906C','A515ED','B50056','A8390E','A0CCC7','BF2713','C6EC7D','D7EB9D','A5D5EB','984076','D88F44','257058','D61635','D40CDE','B0A347','B7617F','D6277E','B4286F','C41F99','D84232','DC1636','BFF15D','DD0972','9B3138'); 从price.item\u vat\u posting\u组中选择*“B77B777B77B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7D、'C0BBBBBB53、'D7D7D7D77DB7BBBBB7BBBB、、、、、'C0B7B777BB77DCBBBBB7BBBBBBBBBBBBBBBBBBB、、、、、、、、、、、、、、、、、、、、、、、'C0BB53'C0BBBB53、、、、、、、、、、、'C0BBBB53、、、、、、、、、、、、、、、、、、'‘AFFEA4’、‘A88955’、‘D95B50’、‘B0F9FC’、‘C09174’、‘253953’、‘9ED9CA’、‘CAF896’、‘536951’、‘21450’“A4B10A”、“C566F5”、“B373E6,”,”,”,”,”B373E0,”,”,”B373E,”,”,”,”B373E3666FF5,“B373E0,”,”D171EF,“C70707,”,”,”C70707,”,”,”C70707,”,”,”,”,”他们他们他们他们,”他们他们他们他们他们,”A4B14B10B1B1B11010B16B16FFF5,“B37373733E333333EE0,”,”,”,”,”B373B373333333333EEEEE33333EEEEE0,”,”,”,”,”,”,”,”,”,”,”,”,”,”B373B373733333333333333333333EEEEEE,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”B3D7777777E97’、‘BB7099’、‘A3FC26’、‘C461DF’、‘309810’、‘BF6306’、‘D07603’、‘C59F70’、‘C5906C’、‘A515ED’、‘B50056’、‘A8390E’、‘A0CCC7’、‘BF2713’、‘C6EC7D’、‘D7EB9D’、‘A5D5EB’、‘984076’、‘D88F44’、‘257058’、‘D61635’、‘D40CDE’、‘B0A347’、‘B7617F’、‘D6276F’、‘C41F99’、‘D84232’、‘DC1636’、‘BFF15D’、‘DD0972’、‘B39B3138’; 情景1。 在10分钟内通过100个线程发送请求时,Cassandra处理的请求总数有5%的读取超时。 平均请求时间为100毫秒。 每个Cassandra节点上的处理器使用率在40%-50%之间

情景2。 当在24小时内通过4个线程发送请求时,每100000个请求大约会发生10个读取超时。 每个Cassandra节点上的处理器使用率为5%

在这两种情况下,垃圾收集器的工作时间都小于300毫秒

错误消息:

Cassandra time-out during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded) com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded) at com.datastax.driver.core.exceptions.ReadTimeoutException.copy(ReadTimeoutException.java:69) at com.datastax.driver.core.DefaultResultSetFuture.extractCauseFromExecutionException(DefaultResultSetFuture.java:258) 在一致性本地_1的读取查询期间Cassandra超时(需要1个响应,但仅0个副本响应) com.datastax.driver.core.exceptions.ReadTimeoutException:consistency LOCAL_ONE读取查询期间的Cassandra超时(需要1个响应,但仅响应0个副本) 在com.datasax.driver.core.exceptions.ReadTimeoutException.copy(ReadTimeoutException.java:69)上 位于com.datastax.driver.core.DefaultResultSetFuture.ExtractCauseFromeExecutionException(DefaultResultSetFuture.java:258) 一些统计数字:

问题:


这对Cassandra来说很典型,还是我做错了什么?

您在查询中使用的是in query,in query在协调器节点中施加了大量压力。当您在查询中执行in query时,这意味着您正在等待这个协调器节点给您一个响应,它将所有这些查询及其响应保留在堆中,如果ose查询失败,或者协调器失败,您必须重试整个过程

不要在查询中使用executeAsync,而是对每个
no
使用单独的查询。现在,如果一个查询失败,重试只需要一个小的快速查询

更改数据模型,以便在查询中使用时可以指定分区键

注意:一次执行多个executeAsync也可以将presser置于群集上。请检查此链接


更多信息:

您的查询效率低下,因为您扫描了很多分区。 每个分区存储在不同的节点中。 您应该使用范围条件扫描一个或少于10个分区。 更改数据模型,检查以下链接:


谢谢你的重播。但即使我已经取消了“查询中”,仍然有读取超时。当在12小时内通过6000个线程发送请求时,我得到了0,01%的超时。这正常吗?似乎正常,但如果对您来说不正常,您可以更改数据模型,以便您可以指定分区键并执行范围查询。我的数据模型非常简单。一个表中只有几个属性。最后:一个请求等于一张桌子上的一个问题。有什么建议吗?我不知道原因是什么。