Cassandra 1.2巨大的读取延迟

时间:2013-07-10 22:06:33

标签: cassandra

我正在开发一个4节点cassandra 1.2.6群集,其中包含一个密钥空间,复制因子为2(最初为3,但已降为2)和10个左右的列族。它正在运行Oracle 1.7 jvm。它具有读写混合,可能是读取的两到三倍。

即使在少量负载下,我看到非常大的读取延迟,并且我获得了相当多的读取超时(使用datastax java驱动程序)。以下是其中一个列族的nodetool cfstats的示例输出:

    Column Family: user_scores
    SSTable count: 1
    SSTables in each level: [1, 0, 0, 0, 0, 0, 0, 0, 0]
    Space used (live): 7539098
    Space used (total): 7549091
    Number of Keys (estimate): 42112
    Memtable Columns Count: 2267
    Memtable Data Size: 1048576
    Memtable Switch Count: 2
    Read Count: 2101
    **Read Latency: 272334.202 ms.**
    Write Count: 24947
    Write Latency: NaN ms.
    Pending Tasks: 0
    Bloom Filter False Positives: 0
    Bloom Filter False Ratio: 0.00000
    Bloom Filter Space Used: 55376
    Compacted row minimum size: 447
    Compacted row maximum size: 219342
    Compacted row mean size: 1051

正如您所看到的,我尝试使用级别基础压缩策略来尝试改善读取延迟,但您也可以看到延迟很大。我有点难过。我有一个cassandra 1.1.6集群工作得很漂亮,但到目前为止1.2没有运气。

群集在VM上运行,具有4个CPU和7 Gb ram。数据驱动器设置为跨4个磁盘的条带raid。机器似乎没有IO限制。

我正在使用所有默认设置运行漂亮的vanilla配置。

我确实看到奇怪的CPU行为,即使在较小的负载下CPU也会出现尖峰。有时候我会看到压缩运行,但它们被剔除,所以我认为不是罪魁祸首。

我想弄清楚接下来要去哪里。任何帮助表示赞赏!

[使用rpc_timeout trace更新] 还在玩这个。这是一个示例跟踪。看起来合并步骤太长了。

 activity                                                                | timestamp    | source        | source_elapsed
-------------------------------------------------------------------------+--------------+---------------+----------------
                                                      execute_cql3_query | 04:57:18,882 | 100.69.176.51 |              0
 Parsing select * from user_scores where user_id='26257166' LIMIT 10000; | 04:57:18,884 | 100.69.176.51 |           1981
                                                      Peparing statement | 04:57:18,885 | 100.69.176.51 |           2997
                         Executing single-partition query on user_scores | 04:57:18,885 | 100.69.176.51 |           3657
                                            Acquiring sstable references | 04:57:18,885 | 100.69.176.51 |           3724
                                             Merging memtable tombstones | 04:57:18,885 | 100.69.176.51 |           3779
                                            Key cache hit for sstable 32 | 04:57:18,886 | 100.69.176.51 |           3910
                             Seeking to partition beginning in data file | 04:57:18,886 | 100.69.176.51 |           3930
                              Merging data from memtables and 1 sstables | 04:57:18,886 | 100.69.176.51 |           4211
                                                        Request complete | 04:57:38,891 | 100.69.176.51 |       20009870

下面的旧痕迹:

[较新的跟踪] 通过完全重建集群数据存储库来解决日志中记录的问题之后,我仍然遇到了问题,尽管花了相当长的时间。这是我处于糟糕状态时抓住的痕迹:

追踪会议:a6dbefc0-ea49-11e2-84bb-ef447a7d9a48

 activity                                                                                        | timestamp    | source         | source_elapsed
-------------------------------------------------------------------------------------------------+--------------+----------------+----------------
                                                                              execute_cql3_query | 16:48:02,755 | 100.69.196.124 |              0
                                                      Parsing select * from user_scores limit 1; | 16:48:02,756 | 100.69.196.124 |           1774
                                                                              Peparing statement | 16:48:02,759 | 100.69.196.124 |           4006
                                                                   Determining replicas to query | 16:48:02,759 | 100.69.196.124 |           4286
                                                             Enqueuing request to /100.69.176.51 | 16:48:02,763 | 100.69.196.124 |           8849
                                                         Sending message to cdb002/100.69.176.51 | 16:48:02,764 | 100.69.196.124 |           9456
                                                           Message received from /100.69.196.124 | 16:48:03,449 |  100.69.176.51 |            160
                                                            Message received from /100.69.176.51 | 16:48:09,646 | 100.69.196.124 |        6891860
                                                         Processing response from /100.69.176.51 | 16:48:09,647 | 100.69.196.124 |        6892426
 Executing seq scan across 1 sstables for [min(-9223372036854775808), min(-9223372036854775808)] | 16:48:10,288 |  100.69.176.51 |        6838754
                                                     Seeking to partition beginning in data file | 16:48:10,289 |  100.69.176.51 |        6839689
                                                              Read 1 live and 0 tombstoned cells | 16:48:10,289 |  100.69.176.51 |        6839927
                                                     Seeking to partition beginning in data file | 16:48:10,289 |  100.69.176.51 |        6839998
                                                              Read 1 live and 0 tombstoned cells | 16:48:10,289 |  100.69.176.51 |        6840082
                                                                    Scanned 1 rows and matched 1 | 16:48:10,289 |  100.69.176.51 |        6840162
                                                           Enqueuing response to /100.69.196.124 | 16:48:10,289 |  100.69.176.51 |        6840229
                                                              Sending message to /100.69.196.124 | 16:48:10,299 |  100.69.176.51 |        6850072
                                                                                Request complete | 16:48:09,648 | 100.69.196.124 |        6893029

[更新] 我应该补充说,在我的macbook pro上有一个独奏cassandra实例的东西很有用。 AKA在我的机器上工作...... :)

[使用跟踪数据更新]

这是一些跟踪数据。这是来自java驱动程序。缺点是我只能跟踪成功的查询。在每个查询开始超时之前,我总共进行了67次查询。奇怪的是,它看起来并不那么糟糕。在查询68,我不再得到响应,并且其中两个服务器正在运行。

2013-07-11 02:15:45 STDIO [INFO] ***************************************
66:Host (queried): cdb003/100.69.198.47
66:Host (tried): cdb003/100.69.198.47
66:Trace id: c95e51c0-e9cf-11e2-b9a9-5b3c0946787b

66:-----------------------------------------------------+--------------+-----------------+--------------
66:            Enqueuing data request to /100.69.176.51 | 02:15:42.045 |  /100.69.198.47 |          200
66:          Enqueuing digest request to /100.69.176.51 | 02:15:42.045 |  /100.69.198.47 |          265
66:                  Sending message to /100.69.196.124 | 02:15:42.045 |  /100.69.198.47 |          570
66:                   Sending message to /100.69.176.51 | 02:15:42.045 |  /100.69.198.47 |          574
66:                Message received from /100.69.176.51 | 02:15:42.107 |  /100.69.198.47 |        62492
66:             Processing response from /100.69.176.51 | 02:15:42.107 |  /100.69.198.47 |        62780
66:                Message received from /100.69.198.47 | 02:15:42.508 | /100.69.196.124 |           31
66:     Executing single-partition query on user_scores | 02:15:42.508 | /100.69.196.124 |          406
66:                        Acquiring sstable references | 02:15:42.508 | /100.69.196.124 |          473
66:                         Merging memtable tombstones | 02:15:42.508 | /100.69.196.124 |          577
66:                        Key cache hit for sstable 11 | 02:15:42.508 | /100.69.196.124 |          807
66:         Seeking to partition beginning in data file | 02:15:42.508 | /100.69.196.124 |          849
66:          Merging data from memtables and 1 sstables | 02:15:42.509 | /100.69.196.124 |         1500
66:                Message received from /100.69.198.47 | 02:15:43.379 |  /100.69.176.51 |           60
66:     Executing single-partition query on user_scores | 02:15:43.379 |  /100.69.176.51 |          399
66:                        Acquiring sstable references | 02:15:43.379 |  /100.69.176.51 |          490
66:                         Merging memtable tombstones | 02:15:43.379 |  /100.69.176.51 |          593
66:                         Key cache hit for sstable 7 | 02:15:43.380 |  /100.69.176.51 |         1098
66:         Seeking to partition beginning in data file | 02:15:43.380 |  /100.69.176.51 |         1141
66:          Merging data from memtables and 1 sstables | 02:15:43.380 |  /100.69.176.51 |         1912
66:                  Read 1 live and 0 tombstoned cells | 02:15:43.438 |  /100.69.176.51 |        59094
66:                Enqueuing response to /100.69.198.47 | 02:15:43.438 |  /100.69.176.51 |        59225
66:                   Sending message to /100.69.198.47 | 02:15:43.438 |  /100.69.176.51 |        59373
66:Started at: 02:15:42.04466:Elapsed time in micros: 63105
2013-07-11 02:15:45 STDIO [INFO] ***************************************
67:Host (queried): cdb004/100.69.184.134
67:Host (tried): cdb004/100.69.184.134
67:Trace id: c9f365d0-e9cf-11e2-a4e5-7f3170333ff5

67:-----------------------------------------------------+--------------+-----------------+--------------
67:               Message received from /100.69.184.134 | 02:15:42.536 |  /100.69.198.47 |           36
67:     Executing single-partition query on user_scores | 02:15:42.536 |  /100.69.198.47 |          273
67:                        Acquiring sstable references | 02:15:42.536 |  /100.69.198.47 |          311
67:                         Merging memtable tombstones | 02:15:42.536 |  /100.69.198.47 |          353
67:                         Key cache hit for sstable 8 | 02:15:42.536 |  /100.69.198.47 |          436
67:         Seeking to partition beginning in data file | 02:15:42.536 |  /100.69.198.47 |          455
67:          Merging data from memtables and 1 sstables | 02:15:42.537 |  /100.69.198.47 |          811
67:                  Read 1 live and 0 tombstoned cells | 02:15:42.550 |  /100.69.198.47 |        14242
67:               Enqueuing response to /100.69.184.134 | 02:15:42.550 |  /100.69.198.47 |        14456
67:                  Sending message to /100.69.184.134 | 02:15:42.551 |  /100.69.198.47 |        14694
67:            Enqueuing data request to /100.69.198.47 | 02:15:43.021 | /100.69.184.134 |          323
67:                   Sending message to /100.69.198.47 | 02:15:43.021 | /100.69.184.134 |          565
67:                Message received from /100.69.198.47 | 02:15:43.038 | /100.69.184.134 |        17029
67:             Processing response from /100.69.198.47 | 02:15:43.038 | /100.69.184.134 |        17230
67:Started at: 02:15:43.021
67:Elapsed time in micros: 17622

这是使用cqlsh的跟踪:

Tracing session: d0f845d0-e9cf-11e2-8882-ef447a7d9a48

 activity                                                                | timestamp    | source         | source_elapsed
-------------------------------------------------------------------------+--------------+----------------+----------------
                                                      execute_cql3_query | 19:15:54,833 | 100.69.196.124 |              0
 Parsing select * from user_scores where user_id='39333433' LIMIT 10000; | 19:15:54,833 | 100.69.196.124 |            103
                                                      Peparing statement | 19:15:54,833 | 100.69.196.124 |            455
                         Executing single-partition query on user_scores | 19:15:54,834 | 100.69.196.124 |           1400
                                            Acquiring sstable references | 19:15:54,834 | 100.69.196.124 |           1468
                                             Merging memtable tombstones | 19:15:54,835 | 100.69.196.124 |           1575
                                            Key cache hit for sstable 11 | 19:15:54,835 | 100.69.196.124 |           1780
                             Seeking to partition beginning in data file | 19:15:54,835 | 100.69.196.124 |           1822
                              Merging data from memtables and 1 sstables | 19:15:54,836 | 100.69.196.124 |           2562
                                      Read 1 live and 0 tombstoned cells | 19:15:54,838 | 100.69.196.124 |           4808
                                                        Request complete | 19:15:54,838 | 100.69.196.124 |           5810

2 个答案:

答案 0 :(得分:1)

跟踪似乎表明大部分时间都在做或正在等待网络操作。也许你的网络有问题?

如果只有一些操作失败,可能只有一个节点出现问题。当不需要那个节点时,事情就会起作用,但是当需要它时,事情会变得很糟糕。可能值得查看其他节点上的日志文件。

答案 1 :(得分:1)

看起来我遇到了1.2的性能问题。幸运的是,补丁刚刚应用于1.2分支,所以当我从源代码构建时,我的问题就消失了。

有关详细说明,请参阅https://issues.apache.org/jira/browse/CASSANDRA-5677

全部谢谢!