UPDATA STATISTICS命令更新统计数据在一张表中。这个命令为每个列簇上每个区域收集一组键,这些键之间的字节差距是相等的。这些收集的键被叫做控制指标(guideposts),它们充当提示/指南来改善并发查询在指定的区域内。
统计是收集的当主要压缩和区域分裂时自动完成的,因此手动运行此命令是没有必要的。
并行计算
Phoenix将查询分解处多个扫描并且并行允许,以减少延迟。Phoenix的并行化是由与统计相关的配置参数驱动的。控制指标之间的每一块数据都将在单独的扫描中并行允许,以提高查询性能。数据块的大小取决于GUIDE_POSTS_WIDTH表属性(在Phoenix 4.9及之后)或者在服务器设置phoenix.stats.guidepost.width参数如果表属性没有设置的话。随着块大小减少,你希望增加phoenix.query.queueSize,在这种情况下,更多的工作可以进行排队。注意,至少要对每个表区域执行单独扫描。Phoenix的统计提供一种获得区域内并行化的方法。除了控制指标宽度说明,客户端的phoenix.query.threadPoolSize和phoenix.query,queueSize参数和服务器端的hbase.regionserver.handler.count参数对并行化数量有影响。
例子
要更新一个给定表my_table的统计信息,需要执行如下命令:
UPDATE STATISTICS my_table
上面的语法将收集表my_table和所有与表my_table关联的索引表、视图和视图索引表的统计信息。与上面的语法等价的是。
UPDATE STATISTICS my_table ALL
仅收集表索引信息统计
UPDATE STATISTICS my_table INDEX
只收集表上统计的数据
UPDATE STATISTICS my_table COLUMNS
修改控制指标的宽度为10MB,执行如下命令:
ALTER TABLE my_table SET GUIDE_POSTS_WIDTH = 10000000
如果需要移除控制指标,设置属性为null:
ALTER TABLE my_table SET GUIDE_POSTS_WIDTH = null
已知问题
- 记录重复(SQL统计展示对比HBase的row_count统计)再Phoenix版本4.12之前。
对于包含多个区域的表,由于区域大小小于控制指标宽度,因此没有为最后的区域生成导柱,这种情况可能会发生。在这种情况下,对这些区域的并行扫描将从最新的指南开始,而不是从该区域的startkey开始。修正4.12作为PHOENIX-4007的一部分。
配置
控制统计收集的配置参数包括:
- phoenix.stats.guidepost.width
默认值为 104857600 (100 MB);一个服务器端的参数,指定控制指标之间的字节数。设置更小的值的增加并行化,但是也增加了合并块的数量。 - phoenix.stats.updateFrequency
默认值为900000 (15 mins);一个服务器端参数,它确定从统计表中刷新统计数据并随后由客户机使用的频率(以毫秒为单位)。 - phoenix.stats.minUpdateFrequency
默认值是phoenix.stats.updateFrequency的一半,即7.5mins;一个客户端参数,它确定在通过另一个UPDATE STATISTICS 调用手动收集统计信息之前必须经过的以毫秒为单位的最短时间。 - phoenix.stats.useCurrentTime
默认值为true;一个优化服务器端参数,如果该参数为真,则当后台任务(如压缩或分割)发生时,服务器端上的当前时间将用作统计表中行的时间戳。如果为假,则遍历正在收集统计信息的表时找到的最大时间戳将用作时间戳。除非你的客户端在读取和写入数据时控制时间戳,否则不应使用此参数。 - phoenix.use.stats.parallelization
默认值为true;此配置在启动Phoenix 4.12时可用。它控制是否应该使用数据的统计信息来驱动查询并行化。