outcoldman
outcoldman Denis Gladkikh

Трассировка запросов SQL CE

Visual Studio 2010, SQL Server Compact, SQL Server CE 4, and Profiling

SQL Compact Edition – это действительно отличное решение для разработчиков использующих .NET платформу. SQL CE можно использовать и как хранилище для небольших веб проектов (как мой сайт https://www.outcoldman.com), так и для Windows приложений (WinForms, WPF). А особенно с ORM от Microsoft, Entity Framework 4.1, приложения можно разрабатывать очень легко и быстро. Правда, у этого решения есть небольшие проблемы с набором инструментов, поставляемых с ним. Так, например, непонятно как профилировать SQL запросы.

Одно из решений – это встраивать трассировку в код вашего приложения. Один из способов – это использовать STATISTICS XML, но его еще нужно умудриться заставить работать с Entity Framework. Другой способ – это получать SQL запросы от самого Entity Framework – как это делать, и можно ли это сделать, именно для связки EF4.1 + SQL CE 4.0 – я, честно, не знаю.

Я вам хочу показать более простой способ профилирования приложений, точнее трассировки запросов к SQL CE базе данных. Для этого вам, правда, нужно быть обладателем Visual Studio 2010 минимум Premium редакции, если я не ошибаюсь. Чтобы попробовать то, что я опишу – вы можете скачать мое небольшое консольное приложение с assembla – SqlCeNorthwindSample. Все NuGet пакеты прописаны в packages.config, но они не загружены в репозиторий, потому не забудьте убедиться, что они у вас установились.

В моем случае приложение выглядит следующим образом:

class Program
{    static void Main(string[] args)
    {        var storage = new Storage("Northwind.sdf");
         using (var context = new StorageContext(storage))
        {            foreach (Customer customer in context.Customers)
            {
                Console.WriteLine(customer.CustomerID);
            }
        }
 
        Console.ReadKey();
    }
}

Мы хотим определить, какие SQL запрос(ы) строит Entity Framework для того, чтобы получить список Customers. Да и вообще, какие запросы выполняются нашим приложением. Для того, чтобы начать новую сессию профилирования мы можем воспользоваться помощником, открыв его при помощи меню “Analyze –> Launch Performance Wizard…”. Если такого меню у вас нет, значит ваша редакция Visual Studio не включает средства анализа.

wizard1

В помощнике, на первом шаге, я рекомендую выбрать метод Instrumentation, так как это самый подходящий метод для анализа приложения, когда нас интересует затраченное время на выполнение запросов, доступа к файлам, и т.п.

wizard2

На втором шаге выбираем проект, который мы будем профилировать – в моем случае – это NorthwindSample.

wizard3

И на последнем шаге уберите галочку с Launch profiling after the wizard finishes, так как нам нужно будет установить дополнительные настройки для сессии профилирования.

После того, как вы закончите работу с помощником у вас должна открыться панель Performace Explorer (если нет, то найдите ее в Analyze->Windows). В этой панели хранятся все ваши сконфигурированные сессии. Там же должна быть ваша новая сконфигурированная сессия. Там вы найдете под Targets ваше приложение NorthwindSample (в моем случае), вот нужно открыть его Properties через контекстное меню, и установить в настройках Enable Tier Interaction Profiling.

performance

После этого профилировщик будет собирать не только информацию о вызовах методов нашего приложения, но и так же собирать информацию о всех запросах к базе данных, проходящих через ADO.NET, что нам и нужно.

Запустить приложение с включенным профилировщиком можно, например, из меню Debug –> Start Performance Session, либо из тулбара панели Performance Explorer. После того, как приложение отработает, будет открыт отчет, в котором можно будет переключиться на Tier Interactions View и посмотреть все запросы, выполненные вашим процессом.

report

Более детально посмотреть текст каждой команды можно двойным щелчком мыши на каждой строке в окне Database connection details.

Удачного профилирования!

Have feedback or questions? Looking for consultation?

My expertise: MongoDB, ElasticSearch, Splunk, and other databases. Docker, Kubernetes. Logging, Metrics. Performance, memory leaks.

Send me an email to public@denis.gladkikh.email.

The content on this site represents my own personal opinions and thoughts at the time of posting.

Content licensed under the Creative Commons CC BY 4.0.