Улучшение производительности

Oracle Provider

При работе Xafari приложений на платформе Oracle c большим количеством данных было замечено снижение производительности по сравнению с тем же приложением, но работающим на платформе MS-SQL. Анализ данной проблемы показал, что при сложных запросах в БД не участвовали индексы, хотя эти индексы и присутствовали в БД. Более глубокая локализация выявила причину такого поведения.

Поля «Oid» большинства бизнес-классов имеют типа Guid. При маппинге бизнес-классов в базу данных Oracle эти поля будут иметь тип CHAR. В процессе работы приложения, возникают сложные параметризированные запросы с условиями, в которых передача параметров выполнялась с типом NVARCHAR2 к колонкам типа CHAR. Именно по этой причине и не подхватывались индексы, так как в таких запросах Oracle выполнял внутреннее преобразование из одного типа в другой.

Благодаря очень гибкой архитектуре Devexpress XAF, предоставляющей множество точек расширения, данную проблему удалось решить самостоятельно. Для решения разработали модуль Xafari.DB, в котором присутствовала реализация провайдеров для доступа к данным Oracle: XafariODPConnectionProvider и XafariOracleConnectionProvider. Данные классы являются, соответственно, наследниками от DevExpress классов ODPConnectionProvider и OracleConnectionProvider. В классах-провайдерах потребовалось переопределить метод CreateParameter() таким образом, чтобы для полей типа Guid передача параметров в запросах выполнялась с типом CHAR. Ниже представлен анализ полученных результатов в сравнении: без использования модуля Xafari.DB и с подключенным модулем Xafari.DB.

В целом благодаря Xafari.DB удалось ускорить выполнение сложных запросов.

Ускорение составляет :

и более раз.

Подробную информацию смотрите в статье Ускоряем XAF приложение на СУБД Oracle в 40 раз.