Cosmos DB High Query Charge - PullRequest
       9

Cosmos DB High Query Charge

0 голосов
/ 14 апреля 2020

Я использую Cosmos DB в режиме автопилота с максимальным значением RU / s, установленным на Collection для 20K RU / s. Я использую SQL API. У меня есть несколько сотен тысяч записей в этом конкретном разделе. У меня есть политика индексации по умолчанию, которая заключается в том, что все индексируется. Я зашел в Data Explorer на портале Azure и выполнил следующий запрос:

SELECT count(1) FROM c where c.partitionKey = "12140" and c.uniqueId = "20cdb686-6959-4ed6-ac31-c7f414238f68" and c.timestampAsString = null

Статистика запросов показывает, что в RU / s начисляется 3,46. Это здорово!

Затем я выполняю очень похожий запрос, но я проверяю c .timestampAsString на наличие ненулевого значения:

SELECT count(1) FROM c where c.partitionKey = "12140" and c.uniqueId = "20cdb686-6959-4ed6-ac31-c7f414238f68" and c.timestampAsString != null

Всего RU / Плата за указанный запрос составляет 2989,73 RU / с. Это немного выше. Я ожидал чего-то похожего на исходный запрос.

Кто-нибудь может объяснить, почему эти расходы на запрос так сильно отличаются?

1 Ответ

1 голос
/ 14 апреля 2020

Причиной такого огромного несоответствия в RU является то, как / мы фильтруем sh до индекса. Для запросов типа c .timestampAsString = null мы делаем pu sh до индекса. Для запросов, в которых вы используете агрегаты и фильтры, такие как c .timestampAsString! = Null, мы этого не делаем.

Однако можно оптимизировать этот запрос. Если вы создадите второе свойство с именем «istimestampAsStringNull» и установите для true значение false, это даст вам возможность выполнить следующий запрос, и вы получите примерно ту же стоимость RU / s.

SELECT count(1) FROM c where c.partitionKey = "12140" and c.uniqueId = "20cdb686-6959-4ed6-ac31-c7f414238f68" and c. isTimestampAsStringNull == false

Мы рассматриваем это для будущей оптимизации, но пока этот обходной путь должен работать.

Надеюсь, что это полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...