Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: LX Международной научно-практической конференции «Технические науки - от теории к практике» (Россия, г. Новосибирск, 25 июля 2016 г.)

Наука: Технические науки

Секция: Информатика, вычислительная техника и управление

Скачать книгу(-и): Сборник статей конференции

Библиографическое описание:
Никитин Н.В., Набатчикова А.Д. ОСОБЕННОСТИ ОПТИМИЗАЦИИ ЗАПРОСОВ К ДАННЫМ В АВТОМАТИЗИРОВАННОЙ ИНФОРМАЦИОННОЙ СИСТЕМЕ // Технические науки - от теории к практике: сб. ст. по матер. LX междунар. науч.-практ. конф. № 7(55). – Новосибирск: СибАК, 2016.
Проголосовать за статью
Дипломы участников
У данной статьи нет
дипломов

ОСОБЕННОСТИ ОПТИМИЗАЦИИ ЗАПРОСОВ К ДАННЫМ В АВТОМАТИЗИРОВАННОЙ ИНФОРМАЦИОННОЙ СИСТЕМЕ

Никитин Николай Владимирович

бакалавр национального исследовательского ядерного университета «МИФИ», студент магистратуры национального исследовательского ядерного университета «МИФИ», г. Москва

Набатчикова Александра Дмитриевна

бакалавр национального исследовательского ядерного университета «МИФИ», студент магистратуры национального исследовательского ядерного университета «МИФИ», г. Москва

ISSUES OF OPTIMIZATION OF INQUIRIES TO DATA IN THE AUTOMATED INFORMATION SYSTEM

Nikolay Nikitin

candidate of Physical and Mathematical Sciences, Associate Professor,

National Research Nuclear University MEPhI, Moscow

Alexandra Nabatchikova

bachelor of National Research Nuclear University MEPhI, undergraduate

of National Research Nuclear University MEPhI, Moscow

 

АННОТАЦИЯ

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

ABSTRACT

Often the main emphasis at the choice of technology of development is placed on extensibility of functionality of systems and reliability, paying insufficient attention to its performance. In article the example of a possible technique of search of problem places of system and an assessment of its performance with use of a number of the software allowing to estimate quantitatively parameters of performance of system is given. The applied decisions have allowed to optimize significantly system, without changing the chosen technology.

 

Ключевые слова: LINQ to SQL; оптимизация; база данных.

Keywords: LINQ to SQL; optimization; database.

 

Существует много различных факторов, влияющих на выбор технологии разработки автоматизированных информационных систем (АИС) с большим количеством разнообразных объектов и значительным числом пользователей. Эти факторы следует учитывать при ее проектировании.

Зачастую основное внимание уделяется только расширяемости систем по количеству автоматизируемых бизнес-процессов, а также масштабируемости системы [2]. Помимо этого необходимо, разумеется, учитывать и стандартные требования к АИС: безопасность, надежность, отказоустойчивость, быстродействие.

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

Также необходимо учитывать, что по мере роста популярности сервисов, предоставляемых АИС, увеличивается число пользователей, в том числе и одновременно работающих с системой, что также ведет к увеличению нагрузки, появлению проблем с блокировками транзакций и других проблем.

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

Рассматриваемая АИС разработана с использованием технологии ASP.NET [1]. Для доступа к данным, хранящимся в базе данных (БД) под управлением Microsoft SQL Server (MS SQL), используется LINQ to SQL [3].

Как часто бывает при использовании такого сложного и мощного инструмента, как LINQ to SQL, могут возникать ошибки, связанные с особенностями его применения. С одной стороны, данный инструмент позволяет избежать ошибок доступа к данным, связанным, например, с ошибочным написанием имени поля. Такие ошибки выявляются еще на этапе компиляции приложения. С другой стороны, могут возникать существенные сложности с быстродействием системы, то есть может возникнуть необходимость оптимизации.

В случае с АИС «Документарная база знаний» (АИС ДБЗ) некоторые функции имели признаки такой проблемы. Для диагностики был использован следующий метод. Во-первых, выявляются наиболее тяжелые запросы к серверу. Это можно сделать с помощью консоли разработчика (рис. 1), имеющейся в большинстве современных браузеров, или с помощью дополнительного программного обеспечения, например Fiddler.

Обычно проблемы быстродействия возникают по следующим причинам: избыточные или повторяющиеся запросы, слишком мелкие запросы, для которых время подключения сопоставимо или даже превышает время их обработки, а также взаимные блокировки. Разумеется, влияет также организация структуры БД и индексов. Далее мы рассмотрим все эти случаи.

Выявив длительно обрабатываемый запрос к серверу, необходимо проанализировать его. С помощью панели разработчика или Fiddler мы может повторно выполнить запрос с теми же параметрами и в том же контексте, а с помощью SQL Server Profiler, отследить какие при этом выполняются запросы SQL. Это дает возможность увидеть наиболее критичные проблемы – повторяющиеся и избыточные запросы. В рассматриваемом примере трассировка запросов (рис. 1) показала, во-первых, повторение одного и того же запроса в рамках одного обращения к серверной странице, а во-вторых, значительное время самого запроса.

Рисунок 1. Трассировка запросов в SQL Server Profiler

Поскольку сами запросы формируются внутри LINQ, то причины появления повторяющихся запросов необходимо установить, проанализировав исходный код LINQ запросов. Далее описаны приемы оптимизации, которые были использованы на примере одной из функциональных страниц АИС ДБЗ.

Часто добиться существенного увеличения скорости работы можно посредством кэширования результатов запросов. Использование простого метода LINQ «.ToArray()» и его результатов в рамках обработки страницы дало возможность сократить общее время ее выполнения с 15 до 5 секунд. Несмотря на то, что LINQ использует в целях оптимизации отложенное выполнение запросов, в случае необходимости повторного использования их результатов такой подход не всегда оказывается целесообразным. В некоторых случаях (рис. 2) выполнить запрос заранее оказывается более выгодным решением.

Рисунок 2. Причины повторного выполнения запроса

Правильные типы результатов выборки. В случае, когда по выборке, являющейся результатом запроса, могут выполняться другие запросы, целесообразно использовать интерфейс IQueryable вместо IEnumerable. В первом случае запросы LINQ будут объединяться, во втором – для каждой строки выборки запроса будет выполняться отдельный SQL-запрос. В случае если в выборку запроса попадает несколько записей, это приведет к многократному выполнению мелких подзапросов, что с учетом времени подключения к системе управления базами данных (СУБД) составит в сумме значительное время выполнения.

Использование общего контекста данных. Даже при использовании в результатах выборки IQueryable, для того чтобы запросы «склеивались», необходимо, чтобы они имели общий контекст данных (DataContext), что бывает сложно, например, в случае использования нескольких вычислительных потоков.

Мелкие запросы и взаимные блокировки. Часто разработчики разбивают запросы на множество мелких подзапросов. Это позволяет избежать сложностей, например, связанных с ограничением времени выполнения. В отношении АИС ДБЗ было обнаружено, что параллельное выполнение Ajax-обращений к серверу заняло 3,08 с, причем это время совпадает с самым длительным запросом (рисунок 3), в то время как последовательное выполнение тех же запросов заняло 0,65 с (рисунок 4). Кроме того, браузер имеет ограничение по количеству одновременно отправляемых запросов к одному и тому же серверу, что видно на панели разработчика, где некоторые запросы стоят в ожидании очереди выполнения дольше, чем они выполняются.

Рисунок 3. Время выполнения параллельных запросов

Рисунок 4. Время выполнения последовательных запросов

В некоторых случаях целесообразно применить пакетную обработку данных, то есть за одно обращение к серверу выполнять несколько запросов, или же за одно обращение к БД – обрабатывать несколько записей.

Использование индексов. После того как оптимизировано количество запросов, устранены повторные и ненужные запросы, можно перейти к оптимизации оставшихся. Отследив через SQL Server Profiler текст выполняемых запросов, можно либо в соответствии с опытом оптимизации, либо воспользовавшись средством SQL Server Tuning Advisor, определить индексы, которые требуется настроить в БД.

Изменение структуры данных. В некоторых случаях целесообразно также изменить структуру данных, которая будет обеспечивать возможность более быстрого извлечения или внесения данных, но это решение может потребовать значительной переработки всей АИС.

Выше были рассмотрены некоторые типичные «узкие» места системы, однако это рассматривалось на примере работы одного пользователя. При работе одновременно множества пользователей уже требуются специальные средства нагрузочного тестирования, позволяющие предварительно оценить, какие участки системы требуют оптимизации, например, с помощью Apache jMeter. Так, удалось убедиться, что принятые меры позволили при выполнении одновременно 500 обращений к серверу оставаться системе в доступном состоянии.

Рисунок 5. Нагрузка при выполнении одновременно 500 обращений

к серверу

 

Предложенный способ идентификации и оптимизации страниц АИС, имеющих некомфортное для пользователя время отклика, позволил оптимизировать некоторые функции АИС, существенно сократив время выполнения запросов к базе данных, что позволило сделать вывод о том, что оптимизация текущего решения осуществима. Учитывая такую возможность повышения производительности системы в рамках используемой технологии, это решение может быть наиболее выгодным, так как не требует значительного количества ресурсов, поскольку оптимизировать отдельные функции можно независимо от остальных, что не удастся в случае замены технологии. Именно такое решение и было принято для рассматриваемой в данной работе АИС ДБЗ.

 

Список литературы:

  1.  Глава 10. ASP.NET и Web-формы [Электронный ресурс]. – Режим доступа: http://cpu.h17.ru/net/10/ (дата обращения: 15.06.16)
  2. Набатчикова А. Д. ОСОБЕННОСТИ ВЫБОРА ТЕХНОЛОГИИ ДОСТУПА К ДАННЫМ В АВТОМАТИЗИРОВАННОЙ ИНФОРМАЦИОННОЙ СИСТЕМЕ // Технические науки – от теории к практике: сб. ст. по матер. LIX междунар. науч.-практ. конф. № 6(54). – Новосибирск: СибАК, 2016. – С. 29-34.
  3. Фримен А., Раттц-мл. Д.С. LINQ: язык интегрированных запросов в C# 2010 для профессионалов. – М.: ООО «И.Д. Вильямс», 2011. – С. 656
Проголосовать за статью
Дипломы участников
У данной статьи нет
дипломов

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.