Cassandra查询执行时间分析

时间:2015-12-03 20:11:30

标签: java cassandra cql query-performance

我是Cassandra CQL的新手,我想获得Cassandra查询执行时间。我可以在CQL shell中通过将当前时间存储在变量中,执行查询然后将当前时间存储在另一个变量中,并通过获取两个变量的差异来计算实际执行时间。任何人都可以指导我。

4 个答案:

答案 0 :(得分:4)

从cqlsh中,你最好的选择可能是使用跟踪(为简洁起见缩短输出):

<script>
$(document).ready( function () {
    $('#table-arrays').DataTable({
        dom: '<"top"Blf>rt<"bottom"ip>',
        buttons: ['copy', 'excel', 'csv', 'pdf', 'print'],
        select: true,
    });
} );
</script>

修改

  

我可以将此跟踪日志报告存储到某个文件中吗??

是的,你可以。如果我从Linux命令行运行上述跟踪,并将其输出到文件,我将首先创建一个文件来保存我的cqlsh命令:

aploetz@cqlsh:stackoverflow> tracing on;
Now Tracing is enabled
aploetz@cqlsh:stackoverflow> SELECT * FROM sujata WHERE id=2;

 id | roll_number | age
----+-------------+-----
  2 |          10 |  26
  2 |          20 |  26

(2 rows)

Tracing session: 35072590-99fb-11e5-beaa-8b496c707234

 activity                                                                                        | timestamp                  | source    | source_elapsed
-------------------------------------------------------------------------------------------------+----------------------------+-----------+----------------
                                                                              Execute CQL3 query | 2015-12-03 14:19:51.027000 | 127.0.0.1 |              0
                                  Parsing SELECT * FROM sujata WHERE id=2; [SharedPool-Worker-1] | 2015-12-03 14:19:51.034000 | 127.0.0.1 |          12378
                                                       Preparing statement [SharedPool-Worker-1] | 2015-12-03 14:19:51.035000 | 127.0.0.1 |          13415
                                 Executing single-partition query on roles [SharedPool-Worker-2] | 2015-12-03 14:19:51.036000 | 127.0.0.1 |          14052
    .................................................
                                         Read 2 live and 0 tombstone cells [SharedPool-Worker-2] | 2015-12-03 14:19:51.054001 | 127.0.0.1 |          32768
                                                                                Request complete | 2015-12-03 14:19:51.063069 | 127.0.0.1 |          36069

然后,我将使用cqlsh上的aploetz@dockingBay94:~/cql$ cat traceSujata.cql use stackoverflow; tracing on; SELECT * FROM sujata WHERE id=2; 标志来运行该文件中的命令,然后将输出重定向到另一个文本文件。

-f

现在您可以在闲暇时仔细阅读查询跟踪文件了!

答案 1 :(得分:1)

选项A

使用datastax devcenter,您可以直接访问请求的使用时间。

进入“结果”旁边的“query_trace”标签。

更多信息:http://docs.datastax.com/en/developer/devcenter/doc/devcenter/dcQueryTrace.html

选项B

tracing on

更多信息:http://www.datastax.com/dev/blog/tracing-in-cassandra-1-2

Nb:选项A使用选项B

答案 2 :(得分:1)

(1)如果查询很小,请使用:

use nishi;
tracing on;
select * from family where name='nkantkumar';

(2)如果查询语句非常大,则说1k,一次选择5k语句。

cd <CASSANDRA_HOME>/bin
cqlsh -f '/apps/nkantkumar/query.txt' > '/apps/nkantkumar/traceQuery.cql'

这里你的查询文件将是: -

use nishi;

tracing on;

select * from family where name='nkantkumar';

select * from family where name='nkantkumar1';

select * from family where name='nkantkumar2';

答案 3 :(得分:0)

我尝试使用其他答案建议的跟踪方法,但是有关查询性质的某些信息意味着跟踪需要非常长的时间才能返回。

由于比较两个选项的查询性能只是一次,所以我改用SQL命令编写了一个文件来执行命令,并在执行查询之前和之后获取了时间戳。然后,我将时间戳复制到Microsoft Excel中,并用它来计算以秒为单位的差异(在剥离+0000时区信息之后,Excel可以理解它了。)

timing.sql

SELECT toTimestamp(now()) FROM system.local;
SELECT * from TABLE_1;
SELECT toTimestamp(now()) FROM system.local;
SELECT * from TABLE_2;
SELECT toTimestamp(now()) FROM system.local;

执行Timing.sql

cqlsh example.com -u my_user --file=timing.sql

当前时间输出

SELECT toTimestamp(now()) FROM system.local;

 system.totimestamp(system.now())
----------------------------------
  2020-11-18 16:10:35.745000+0000

Excel日期差

=(C1-B1)*60*60*24

Excel date calculation