Диагностика неисправностей, приводящих к снижению быстродействия, всегда относилась к числу самых трудных задач для специалистов в области баз данных. Часто возникает такая ситуация: происходят какие-то изменения на сервере или что-то меняется в базе данных или собственно коде приложения — и производительность системы падает. Как правило, диагностика выполняется значительно позже, нередко после того, как возникают опасения в связи с низкой производительностью приложения. Симптомы других проблем, связанных с быстродействием, могут проявляться, к примеру, в непредсказуемых скачкообразных падениях производительности, затрудняющих поддержание быстродействия приложения в ожидаемых границах. Приходится сталкиваться и с такой ситуацией, когда производительность падает после модернизации SQL Server, в результате чего процессор реляционной базы данных создает новые планы запросов, не столь эффективные, как прежние планы. Выявление источников подобных проблем может представлять определенные трудности. В системе SQL Server предусмотрены динамические административные представления, которые позволяют администратору просматривать планы запросов, находящихся в активном кэше планов. Но мы не имеем возможности предсказать, как долго данный план будет находиться в этом кэше, и надо отметить, что к тому моменту, когда администратор приступает к поиску причин снижения быстродействия, более старые версии, как правило, уже удалены. То есть просмотреть предыдущие версии планов уже нельзя, и определить, что же, собственно, изменилось, становится невозможным. Вот здесь-то на помощь администратору и приходит Query Store, новый инструмент системы SQL Server 2016.
Query Store: бортовой «черный ящик» SQL Server
Новая функция Query Store, реализованная в версии SQL Server 2016, обеспечивает возможность выявления причин описанных неполадок. Она позволяет отслеживать изменения, которые вносятся в планы запросов с течением времени. Включенное в версию SQL Server 2016 средство Query Store обеспечивает сохранение истории планов выполнения, а также статистические данные по запросам, прилагаемые к этим планам. Это средство может быть активировано на базе отдельной базы данных, оно автоматически фиксирует историю запросов, планов и рабочую статистику. Query Store разделяет данные с помощью окон времени, так что администратор получает возможность в динамике просматривать вносимые в планы запросов изменения и отслеживать тенденции использования. Эта функция показывает, сколько раз применялся тот или иной запрос, выделяет важнейшие запросы, отслеживает изменения, вносимые в план запросов с течением времени, и указывает на ресурсы, необходимые для выполнения плана. Схема работы Query Store приведена на рисунке.
Рисунок. Общие сведения о Query Store |
Здесь показано, как SQL Server хранит всю текстовую информацию, связанную с запросом, а также статистические данные, сгенерированные во время исполнения. При выполнении запроса к базе данных, на которой активировано средство Query Store, скомпилированный план выполнения запроса записывается в хранилище планов модуля Query Store. Кроме того, сведения о выполнении, полученные в ходе выполнения запроса, записываются в хранилище Runtime Stats Store. Сначала эти данные хранятся в оперативной памяти, а затем они асинхронно записываются на диск. Функция Query Store записывает свои данные в основную группу файлов базы данных, в которой она расположена. Администратор может определять объем данных, а также срок, в течение которого SQL Server будет сохранять информацию Query Store.
Query Store — замечательный помощник специалистов в области баз данных, позволяющий быстро определить причину снижения быстродействия. Чтобы работать с этим инструментом, не требуется вносить изменения в существующие приложения. Кроме того, он предоставляет новые сведения о настройке, которых раньше у вас не было.