Самые странные часы с использованием SQL Azure.Мы опустили базу данных с 50DTU до 20DTU, и наш процессор прошел через крышу.Оказывается, один из наших основных индексов просто больше не используется .
Индекс все еще существует.У него была 27% фрагментация, которая, как я понимаю, не супер-ужасна, и любой способ не должен мешать SQL использовать ее.Итак, вот что я попробовал (по порядку):
- Реорганизованный индекс - ничего.
- Перестроенный индекс - ничего.
- Уронили и воссоздали - ничего.
- Очистить кэш процессов (используя
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE
) - ничего.- - - Удалено и воссоздано с другим именем - сработало .
Я не делал снимок экрана плана выполнения, когда он терпел неудачу, но в основном это был именнотакой же, как план выполнения ниже (из окончательного рабочего индекса), за исключением того, что он не включает использование индекса (обведено кружком) - т.е.он просто выполнял сканирование кластерного индекса.
Окончательный рабочий запрос был:
CREATE NONCLUSTERED INDEX [IX_SyncDetail_SyncStatusID_EntityTypeID_ApiConnectionID] ON [client_2].[SyncDetail]
(
[SyncStatusID] ASC,
[EntityTypeID] ASC,
[ApiConnectionID] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
GO
Это в точности совпадает с исходным индексом (который игнорировался), за исключением того, что a) имя отличается;и б) порядок столбцов, который раньше был EntityTypeID, SyncStatusID, ApiConnectionID.
Я хочу еще раз подчеркнуть, что индекс работал нормально до понижения нашей базы данных.
Итак - любые идеи, чтослучилось?