【问题标题】:DocumentDB: How to verify which indexes were used?DocumentDB:如何验证使用了哪些索引?
【发布时间】:2018-04-12 09:03:03
【问题描述】:

即使您已经精心设计了文档架构并手工制作了最少的必要索引以实现读取与更改场景的良好平衡,但对于重 RU 查询实际执行工作的索引可能并不总是直观,如果选择是你所期望的。或者,关键属性名称中的索引策略可能存在拼写错误,导致静默回退到某些其他查询所需的某些不合适的索引。..

我知道我可以使用以下工具来调试 DocumentDB 中的索引使用情况:

  • RequestCharge 每个查询的使用情况,但它没有说明这个 RU 用在了哪里。
  • 使用x-ms-documentdb-populatequerymetrics 标头的时间/计数指标,这很有用,并暗示使用了“某些”索引,而不是实际使用了哪些索引。

问题是上述工具集仍然强制进行盲目的实验和无法验证的假设,导致查询/索引优化是一个耗时的过程。

在 SQL Server 中,您可以简单地获取执行计划并验证索引设计和使用的正确性。 DocumentDB 有类似的工具吗?

一个说明性的伪示例,当 DocDB 选择哪个索引并不明显时:

select s.poorlySelectiveIndexed
from c
join s in c.sub
where c.anotherPoorlySelectiveIndexed = @aCommonValue
   and s.Indexed1 in ('a', 'b', 'c') 
   and ARRAY_CONTAINS(s.Indexed2, @searchValue)
   and ARRAY_CONTAINS(s.Indexed3, 'literalValue')
   and (s.SuperSelective ='23456' OR c.AnotherSuperSelective = '76543') 
order by s.RangeIndexed4

【问题讨论】:

    标签: azure indexing azure-cosmosdb sql-execution-plan


    【解决方案1】:

    看来 documentDB 团队正在考虑已经提到的 x-ms-documentdb-populatequerymetrics 标头及其相应的响应作为这样的工具。

    如 2017 年 8 月 27 日的 this response from "Azure Cosmos DB Team" in Azure feedback site 所述:

    我们很高兴地宣布查询执行统计信息的可用性:https://docs.microsoft.com/en-us/azure/cosmos-db/documentdb-sql-query-metrics#query-execution-metrics

    使用这些指标,您可以推断执行计划并调整查询和索引以获得最佳性能权衡

    目前官方似乎没有公开使用索引的详细信息,但我们希望它会在未来的某个版本中有所改变。

    【讨论】:

      猜你喜欢
      • 2013-01-02
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 2016-08-27
      • 1970-01-01
      • 2011-02-23
      • 2010-10-08
      相关资源
      最近更新 更多