Федерации и индексы SQL Azure — уточнение по производительности

В настоящее время у нас есть SQL Federated DB, разделенная на 10 сегментов в примерно равных частях данных, отфильтрованных по идентификатору клиента.

В настоящее время мы испытываем проблемы с производительностью при выполнении отфильтрованных запросов, например, выполнение запроса для определенного клиента может занять более 3 минут, чтобы вернуть 4000 строк в некоторых осколках. Однако выполнение точно такого же запроса в нефильтрованном соединении на том же осколке возвращает результат в течение 4 секунд. Один заметный аспект заключается в том, что сегменты, испытывающие замедление, как правило, содержат больше клиентов, хотя и с меньшим объемом данных. Наиболее вероятным ингибитором производительности (я полагаю) будет индексация и что-то, что связано с фильтрованным/нефильтрованным соединением.

Проведя поиск, я не нашел много информации о производительности запросов по сегментам/конкретным стратегиям индексирования на сегментах (кроме того, что Azure, по-видимому, не поддерживает индексированные представления). Мое впечатление (и, следовательно, потребность в пояснении) заключается в том, что индексы применяются ко всем членам шарда, а не к каждому члену.

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

Кто-нибудь еще сталкивался с этой проблемой или мог бы указать, что нефильтрованное соединение значительно превосходит фильтрованное соединение?

Заранее спасибо...


person SeanCocteau    schedule 20.11.2013    source источник
comment
Было бы интересно узнать, что вы обнаружите, я предполагаю, что в какой-то момент я могу столкнуться с той же проблемой, прямо сейчас у меня все работает хорошо, только с парой клиентов в осколке :)   -  person pateketu    schedule 21.11.2013
comment
Не могли бы вы предоставить образец запроса? Вы используете SELECT * FROM TableName?   -  person Maciej Los    schedule 30.12.2013
comment
Пожалуйста, посмотрите мой предыдущий ответ: stackoverflow.com/questions/17998196/   -  person Maciej Los    schedule 05.01.2014


Ответы (1)


Индексы в федерациях применяются для каждого члена федерации. Если вы начали с одного индексированного элемента и выполнили операцию SPLIT, то индексы автоматически применяются к продуктам SPLIT. Но если вы применили индексы после создания нескольких элементов, вам необходимо явно добавить индексы для каждого члена.

Так что, надеюсь, вы не в тупике.

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

person Stuart Ozer    schedule 21.05.2014