Можно ли удалить один план выполнения из кеша в базе данных SQL Azure?

Заключение

Вы не можете. Microsoft прямо заявляет: «вы не можете вручную удалить план выполнения из кеша» в этой статье "Общие сведения о кэше процедур в SQL Azure".

Исходный вопрос

В SQL Server один план выполнения можно удалить из кэша с помощью [DBCC FREEPROCCACHE(plan_handle varbinary(64))][1]. Есть разные [documentation about DBCC FREEPROCCACHE on SQL Azure][2]. Похоже, он удаляет все кэшированные планы выполнения со всех вычислительных узлов и/или управляющих узлов (какими бы ни были эти узлы, я не знаю). Я не понимаю, почему SQL на Azure Серверной версии будет отличаться в этом аспекте.

Тем не менее, я ищу способ удалить один план выполнения из кеша на Azure. Есть ли способ удалить один план выполнения на Azure? Может быть, используя запрос вместо DBCC?


person Mike de Klerk    schedule 27.03.2018    source источник


Ответы (1)


Невозможно удалить один план выполнения из кеша.

Если ваш план выполнения связан только с несколькими таблицами/одной таблицей, и если вы также согласны с удалением кеша для этих таблиц, вы можете изменить таблицу, добавить ненулевой столбец и удалить столбец. Это заставит очистить кеш..

Изменение схемы таблиц приводит к очистке кеша (не одного плана, а всех планов) для этих задействованных таблиц.

Я не понимаю, почему SQL на Azure версии Server будет отличаться в этом аспекте.

Это связано с базой данных как предложением, вам предлагается база данных (это может быть на каком-то сервере с несколькими базами данных), и некоторые команды dbcc влияют на весь экземпляр, поэтому они как бы запрещают все команды DBCC. Существует новое предложение под названием Управляемый экземпляр (который аналогичен на локальном сервере, но с высокой доступностью базы данных Azure), вы также можете проверить это.

person TheGameiswar    schedule 27.03.2018
comment
Приятно видеть ссылку, указывающую на информацию, описывающую, почему это невозможно в Azure. Также здорово иметь альтернативу своего рода хаку, чтобы пометить план выполнения как устаревший или очистить кеш, как вы выразились. - person Mike de Klerk; 27.03.2018
comment
Мы также находимся в процессе перехода на управляемый экземпляр, если у вас есть только одна база данных, тогда azure db хорошо подходит, кроме того, что этот управляемый экземпляр может быть лучше. - person TheGameiswar; 27.03.2018