执行计划
执行计划可以告诉你很多关于查询将如何运行的信息:
- 将执行的所有HBase范围查询
- 将被扫描的字节数的评估值
- 将被遍历的行数的评估值
- 收集上述评估信息的时间
- 每个扫描将使用哪个HBase表
- 哪些操作(排序、合并、扫描、限制)是在客户机上执行的,而不是在服务器上执行的
使用EXPLAIN计划检查查询将如何运行,并考虑重写查询以满足以下目标:
- 强调服务器上的操作,而不是客户机上的操作。服务器操作分布在集群中并并行操作,而客户机操作在单个客户机JDBC驱动程序中执行。
- 尽可能使用范围扫描(RANGE SCAN)或跳过扫描(SKIP SCAN),而不是表扫描(TABLE SCAN)。
- 过滤主键约束中的主导列。这假设您已经设计了主键来引导频繁访问或频繁过滤的列,如上面的“主键”所述。
- 如果需要,引入一个本地索引或一个覆盖查询的全局索引。
- 如果你有一个索引覆盖你的查询,但优化器没有检测到它,试着提示查询:SELECT /*+ INDEX() */ …
执行计划的剖析
执行计划由描述Phoenix将在查询期间执行的操作的文本行组成,使用以下术语:
- AGGREGATE INTO ORDERED DISTINCT ROWS—使用加法等操作聚合返回的行。
- AGGREGATE INTO SINGLE ROW—使用没有GROUP BY子句的聚合函数将结果聚合为一行。例如,count()语句返回一行,其中包含匹配查询的总行数。
- CLIENT—该操作将在客户端执行。在服务器端执行大多数操作更快,因此您应该考虑是否有重写查询的方法,以便让服务器完成更多的工作。
- FILTER BY expression—只返回与表达式匹配的结果。
- FULL SCAN OVER tableName—全表扫描。
- INNER-JOIN—按条件进行多表关联查询。
- MERGE SORT—对结果执行合并排序。
- RANGE SCAN OVER tableName [ … ]—范围查询,方括号中的内容表示查询中每个主键的开始和结束位置。
- ROUND ROBIN—当查询不包含ORDER BY,那么会按任何顺序返回行。ROUND ROBIN 顺序最大化了客户端上的并行化。
- x-CHUNK—描述操作将使用多少线程。最大并行度限制在线程池中的线程数。最小并行度对应于表在扫描的开始行和停止行之间的区域数。块的数量将随着导轨宽度的减小而增加,因为每个区域有多个块。
- PARALLELx-WAY—描述在操作期间将合并多少并行扫描。
- SERIAL—有些查询是串行运行的。例如,过滤主键的主要部分和将结果限制在可配置阈值以下的单个行查找或查询。
- EST_BYTES_READ - 提供将作为执行查询的一部分扫描的总字节数的评估值
- EST_ROWS_READ - 提供将作为执行查询的一部分扫描的行总数的评估值
- EST_INFO_TS - 收集评估信息的时间(毫秒)
示例
0: jdbc:phoenix:localhost:2182> explain select * from PERFORMANCE_1000 limit 20 offset 20 ;
+----------------------------------------------------------------------------------------------+-----------------+----------------+--------------+
| PLAN | EST_BYTES_READ | EST_ROWS_READ | EST_INFO_TS |
+----------------------------------------------------------------------------------------------+-----------------+----------------+--------------+
| CLIENT 9-CHUNK 40 ROWS 10560 BYTES SERIAL 1-WAY ROUND ROBIN FULL SCAN OVER PERFORMANCE_1000 | 10560 | 40 | 0 |
| SERVER OFFSET 20 | 10560 | 40 | 0 |
| SERVER 40 ROW LIMIT | 10560 | 40 | 0 |
| CLIENT 20 ROW LIMIT | 10560 | 40 | 0 |
+----------------------------------------------------------------------------------------------+-----------------+----------------+--------------+
4 rows selected (0.027 seconds)
参考资料:http://phoenix.apache.org/explainplan.html
除了通过执行计划调优语句之外,还可以了解下Phoenix的配置,对集群进行调优。参考:http://phoenix.apache.org/tuning.html
网友评论