5

У моего приложения проблемы с производительностью, поэтому я начал исследовать это из корня: «Соединение с базой данных».Чтобы закрыть или закрыть соединение Oracle?

Лучшие практики говорит: «Открыть соединение, использовать его и близко, как только возможно», но я не знаю, накладные расходы, что это вызывает, поэтому вопрос:

1 - "Open, использование , Закрыть соединения как можно скорее является лучшим aproach с использованием ODP.NET? "

2 - Есть ли способ и как использовать пул соединений с ODP.NET? Я думаю о создании списка для хранения строк соединений и создания логики для выбора «лучшего» соединения каждый раз, когда мне это нужно. Это лучший способ сделать это?

+2

Вы говорите о приложении клиент/сервер? Или трехуровневое приложение? Вы заявляете, что вы профилировали приложение и определили, что открытие и закрытие соединений с базами данных является узким местом? Или вы просто догадываетесь, что проблемы с производительностью могут быть связаны с базой данных? –

+1

Чья это лучшая практика? Открытие соединения с базой данных - это дорогостоящая и трудоемкая операция.Поэтому лучший совет - поддерживать открытые и используемые связи как можно дольше. – APC

+0

Джастин. Да, это приложение Asp.Net, поэтому это клиент/сервер с 3 или 4 уровнями, «Open Connection Operation» не является узким местом, но я думаю, что это способствует снижению производительности (если оно не используется правильно). – Ewerton

ответ

6

Вот слайд колода, содержащая Oracle рекомендованным лучшие практики:

http://www.oracle.com/technetwork/topics/dotnet/ow2011-bp-performance-deploy-dotnet-518050.pdf

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

См. Интерактивную справку ODP.NET для получения подробной информации о пуле соединений. Настройки пула добавляются в строку подключения.

Еще одна проблема, с которой сталкиваются люди с OracleConnections, заключается в том, что сборщик мусора не понимает, насколько он действительно ресурсоемкий, и не очищает их быстро. Это усугубляется тем фактом, что ODP.NET не полностью управляется, поэтому некоторые ресурсы скрыты от сборщика мусора. Поэтому лучшей практикой является Close() AND Dispose() все объекты Oracle ODP.NET (включая OracleConnection), чтобы заставить их очищаться.

Данный вопрос будет смягчено в полностью управляемого поставщика Oracle, (бета выйдет в ближайшее время)

(EDIT: ODP.NET, управляемый Driver теперь доступен.)

Christian Шей

Oracle

1

ODP.NET - это поставщик данных для ADO.NET. Лучшая практика для ADO.Net - это Open, Get Data (to memory), close, использование в данных памяти. Например, используя OracleDataReader для загрузки данных в DataTable в память и для тесного соединения.

[] s

0

Для одной транзакции это лучше всего, но для нескольких транзакций, которые вы совершаете в конце, это может оказаться не лучшим решением. Вам необходимо сохранить соединение открытым до тех пор, пока транзакция не будет выполнена или откат. Как вы справляетесь с этим, а также как вы проверяете, что соединение все еще существует в этом случае? (То есть сбой сети). Свойство ConnectionState.Broken не работает в данный момент.

Смежные вопросы