При автоматической настройке используются три вещи: магазин запросов, отсутствующие индексы и машинное обучение.
Во-первых, последний известный хороший план - это оружие в магазине запросов. Это происходит как в Azure, так и в SQL Server 2017. Он обнаружит запросы, у которых производительность снизилась после изменения плана (и довольно много выполнений, а не только одного), и вернется к этому плану. Если производительность ухудшается, это отключается. Это замечательно. Однако, если вы пишете дерьмовый код, у вас плохая структура данных или устаревшая статистика, это не очень помогает.
Автоматические индексы в Azure используют две вещи: отсутствующие рекомендации по индексам из оптимизатора и машинное обучение в Azure. С ними, если пропущенный индекс часто появляется в течение 12-18 часов (читайте этот пост в блоге по его автоматизации), вы получите предложение по индексу. Он измеряет в течение еще 12-18 часов, и если этот индекс помог, он остается, если нет, он идет. Это тоже здорово. Тем не менее, он страдает от двух проблем. Во-первых, так же, как и раньше, если у вас есть дерьмовый код и т. Д., Это действительно поможет только на полях. Во-вторых, предложения по отсутствующим индексам от оптимизатора не всегда являются лучшим индексом. Например, когда я писал пост в блоге, он надлежащим образом определил отсутствующий индекс, но упустил тот факт, что столбец INCLUDE был бы даже лучше, чем предложенный им индекс.
Человеческий мозг и глазное яблоко все еще будут решать более сложные проблемы. Эта автоматизация устраняет множество простых и простых задач. В целом, это отличная вещь. Тем не менее, не путайте это с панацеей от всех вещей, связанных с производительностью. Это абсолютно не так.