Проблемы с производительностью сайта ASP.NET MVC / WCF и серверной части Oracle - PullRequest
2 голосов
/ 13 февраля 2010

Мы создаем веб-сайт для проверки состояния кредита в экстрасети, используя ASP.NET MVC с бэкэндом WCF. Это довольно стандартный дизайн с сайтом MVC, использующим сервисную ссылку WCF для получения объектов заказчика. Ervice использует привязку Oracle backend + http и не будет размещаться на том же сервере, что и сайт MVC (поэтому мы не можем использовать привязку tcp для уменьшения задержки).

Проблема, с которой мы столкнулись, заключается в том, что каждый вызов службы приводит к времени отклика 7-8 с, что недопустимо для сайта экстрасети и намного выше, чем магический знак 2 с. Сервисные методы вызывают 12 хранимых процедур для создания объекта клиента. К сожалению, база данных денормализована (мы не можем изменить ее, поскольку она также используется другими внутренними производственными системами), поэтому большинство вызовов являются базовыми операторами выбора, которые заполняют объект клиента и связанные с ним объекты. Сервисный прокси должным образом открывается и закрывается / удаляется в действиях MVC, поэтому нет никаких утечек соединения с сервисом. Новый клиентский прокси создается для каждого запроса (т. Е. Мы не используем одноэлементный шаблон для сервиса).

Есть идеи, как мы можем ускорить это?

Спасибо

Ответы [ 2 ]

1 голос
/ 13 февраля 2010

Похоже, вы уже знаете, в чем проблема - это база данных.

Я никогда не слышал о том, чтобы операция WCF настраивалась и разрушалась более чем за долю секунды, исключая какую-либо логику внутри. Поэтому, даже если вы могли бы сократить задержку в 1-2 секунды (что, вероятно, является оптимистичной оценкой), это не очень помогает, если операция с базой данных занимает 5-6 секунд сама по себе.

Честно? Выполнение 12 хранимых процедур для создания клиента полностью за пределами сети. Целью хранимой процедуры является инкапсуляция всей логики, необходимой для выполнения сложной операции с базой данных. Самое первое, что вам нужно сделать, это изменить это на one хранимую процедуру - затем, если она все еще медленная, профилируйте базу данных, чтобы увидеть, что занимает так много времени, и исправьте ее соответствующим образом. Обычно низкая производительность базы данных вызвана одним или несколькими отсутствующими индексами.

0 голосов
/ 13 февраля 2010

Пока вы точно не измерите то, что действительно происходит, не спешите предполагать, где находится узкое место.

Вам действительно нужно выполнить расширенную трассировку SQL Oracle, чтобы увидеть, откуда эта медлительность. Все остальное в основном догадки. Вот статья Кэри Миллсап (из метода R и ранее из Хотсоса), в которой вы можете скачать эту информацию:

http://method -r.com / загрузки / doc_details / 10-для-разработчиков решений-друзей-с-оракула-БД-Cary-Millsap

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...