Есть ли какие-либо оптимизации, которые следует учитывать при подключении к Oracle с помощью NHibernate? Мои звонки в Oracle занимают очень много времени. Если я запускаю запрос NHibernate (скопированный из моего окна вывода в Visual Studio) непосредственно в Oracle, он возвращается через секунду. Вот мой конфигурационный файл для NHibernate. При необходимости я могу опубликовать файлы сопоставления.
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory name="DefaultSessionFactory">
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.OracleDialect</property>
<property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>
<property name="connection.connection_string">Data Source=****;Persist Security Info=True;User ID=******;Password=*******;Unicode=True</property>
<property name="show_sql">true</property>
<mapping assembly="AQTool.BL"/>
</session-factory>
</hibernate-configuration>
Обновление:
Подводя итог всего обсуждения здесь:
Если я удаляю все связи «многие-к-одному» и просто запускаю свой модульный тест для одного объекта без объединений, запрос по-прежнему выполняется более 2 минут. Если я скопирую sql, сгенерированный nhibernate, и запусту его непосредственно с oracle, запрос вернется через секунду. Я также публикую свой картографический файл здесь. Есть ли что-то, чего мне не хватает, что может быть причиной такого несоответствия? Единственное, что я делаю, это выбираю по идентификатору аккаунта. Несмотря на то, что таблица большая (более 5 миллионов строк), поле идентификатора учетной записи клиента индексируется, и необработанный запрос возвращается очень быстро.
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="AQTool.BL" assembly="AQTool.BL" default-lazy="true">
<class name="AQTool.BL.EmailAddress,AQTool.BL" table="EMAIL_CUSTOMER_ADDRESSES">
<id name="EmailAddressId" column="EMAIL_ADDRESS_ID" type="int">
<generator class="native" />
</id>
<property name="CustomerAccountId" column="CUSTOMER_ACCOUNT_ID" type="string" />
<property name="EmailAddressText" column="EMAIL_ADDRESS_TX" type="string" />
<property name="EmailAddressTypeId" column="EMAIL_ADDRESS_TYPE_ID" type="int" />
<property name="EmailAddressTypeIdInternal" column="EMAIL_ADDRESS_TYPE_ID_INTERNAL" type="int" />
</class>
</hibernate-mapping>