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

Вид: 20385|Ответ: 0

[Источник] ADO.NET Учебник (5) Подробно объясните пул подключений к базе данных

[Скопировать ссылку]
Опубликовано 17.09.2016 15:41:28 | | | |
Аннотация
Сегодня я расскажу о пулах подключения к базе данных. Честно говоря, я сказал, что утиная груша очень большая. Потому что пулы связей относительно сложнее понять по сравнению с другими главами. Я хочу объяснить это самыми популярными предложениями, но это непростая задача. Однако пулы соединений также являются очень важным пунктом знаний, особенно при развертывании многопользовательских программ. Поэтому мне нужно не только говорить, но и говорить подробно. В этой статье вы поймёте основы пула соединений и как оно уже используется для повышения производительности вашего приложения.

Содержание
Что такое пул соединений?
Как работает пул соединений
Давайте поговорим о нескольких очень важных свойствах пулов соединений
Исключения пула соединений и методы обработки
Способ отслеживать состояние вашего соединения
Основные принципы эффективного использования пулов соединений
1. Что такое пул соединений?
      В предыдущей статье «ADO.NET вы должны знать (4) объекта связи с вкусом» я подчеркивал, что установление соединения с базой данных — это очень трудоёмкий (трудоёмкий) процесс. Это связано с тем, что подключение к серверу базы данных включает несколько длительных процессов: установку физического канала (например, сокета или именованного конвейера), первоначальное рукопожатие с сервером, анализ информации о строках соединения, аутентификацию соединения сервером, запуск проверки для регистрации в текущей транзакции и так далее. Независимо от того, почему существует такой механизм, всегда есть причина существования. Если создать новую связь так сложно, почему бы не использовать уже существующую?

      На самом деле, ADO.NET уже даёт нам метод оптимизации, называемый пулом соединений. Пул соединений — один из таких контейнеров: он содержит определённое количество физических соединений с сервером базы данных. Поэтому, когда нам нужно подключиться к серверу базы данных, нам нужно просто взять свободное соединение из пула (контейнера) вместо создания нового. Это значительно снижает накладные расходы на подключение к базе данных, что повышает производительность приложения.

PS:本来做了2张图片来描述连接池的,无奈公司装有监控软件,不能上传,所以只能等下次有时间上传了。



2. Как работает пул соединений
2.1 Создание пула соединений
      Следует отметить, что пулы соединений чувствительны к классу. То есть один и тот же домен приложения может одновременно иметь несколько разных типов пулов соединений. Итак, как идентифицируются пулы соединений? В деталях он отличается по сигнатури, формирующей процесс, домену приложения, строке соединения и идентичности Windows (при использовании интегрированной безопасности). Однако для одной и той же области приложения она обычно идентифицируется только по строке соединения. При открытии соединения создаётся новый пул соединений, если типовая подпись стрип-соединения не совпадает с типом существующего пула соединений. в противном случае не создаётся новый пул соединений.

      Типичный пример создания связи:


В приведённом выше случае я создал три объекта SqlConnection, но для их управления требовалось всего два пула соединений. Внимательно, друзья, возможно, вы уже обнаружили, что у conn1 и conn3 одна и та же строка соединений, поэтому они могут делить пул соединений, а conn2 и conn1 отличаются от conn3, поэтому нужно создать новый пул соединений.

2.2 Распределение холостых соединений
      Когда пользователь создаёт запрос на соединение или вызывает объект Open of Connection, менеджеру пула соединений сначала нужно найти пул соединений соответствующего типа на основе подписи запроса соединения, а затем попытаться выделить свободное соединение. Детали следующие:

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

2.4 Переработанные использованные соединения
      Когда мы заканчиваем использование соединения, мы должны закрыть или отпустить его вовремя, чтобы соединение можно было вернуть в пул для повторного использования. Соединение можно замкнуть с помощью метода Close или Dispose объекта Connection или с помощью оператора using в C#.



3. Расскажите о нескольких очень важных качествах
Поведение пула соединений может управляться строками соединения и включает в себя четыре важных свойства:

Тайм-аут соединения: Время, когда запрос на соединение ожидает тайм-аута. По умолчанию 15 секунд в секундах.
Максимальный размер пула: Максимальное количество соединений в пуле соединений. По умолчанию — 100.
Минимальный размер пула: минимальное количество соединений в пуле соединений. По умолчанию — 0.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。
Возьмём пример, чтобы понять свойства пула соединений. Код таков:

4. Исключения пула соединений и методы обработки
      Когда пользователь открывает соединение, не закрывая его правильно или вовремя, это часто вызывает проблему «утечки соединения». Утекшённое соединение остаётся открытым до вызова метода Dispose, после чего Garbage Collector (GC) не закроется и не отсоединит соединение. В отличие от ADO, ADO.NET приходится вручную закрывать использованные соединения. Важный миф заключается в том, что связь замыкается, когда подключённый объект находится вне локального диапазона. На самом деле, когда он выходит за пределы зоны действия, освобождается только объект соединения, а не ресурс соединения. Давайте сначала рассмотрим пример.

Чтобы сделать результаты более очевидными, я специально установил максимальное количество соединений на 5, а время тайм-аута — 1 секунда. После запуска быстро получаются следующие результаты.


Из приведённых выше результатов ясно, что в соединении есть аномалия. Мы уже знаем, что максимальное количество соединений в пуле соединений составляет 5, и когда создаётся шестое соединение, необходимо ждать его тайм-тайм, потому что максимальное количество соединений в пуле соединений достигло максимума, и свободных соединений нет. Когда время тайм-аута превышается, появляется упомянутое выше исключение соединения. Поэтому я должен ещё раз подчеркнуть, что использованные соединения должны быть должным образом закрыты и освобождены как можно скорее.



5. Методы мониторинга состояния соединений SQL Server
(1) Через монитор активности
Шаг 1: Откройте менеджер MSSMS и нажмите на значок «Монитор активности».



Шаг 2: В режиме «Открыть монитор активности» нажмите на вкладку «Процессы».



Шаг 3: Запустите пример в разделе #4 Исключения пула соединений и методы обработки, вы можете увидеть 5 открытых соединений, как показано на рисунке ниже.



(2) Используйте операторы T-SQL
Аналогично, выполняя системную сохранённую процедуру sp_who мы можем отслеживать состояние соединения.






6. Основные принципы эффективного использования пулов соединений
      Эффективное использование пула соединений значительно улучшит производительность вашего приложения. Наоборот, если использовать её неправильно, она не принесёт вреда. В целом следует следовать следующим принципам:

Запросите соединение в самый последний момент, отключите его как можно скорее.
Когда вы закрываете соединение, сначала закройте соответствующую пользовательскую транзакцию.
Убедитесь, что в пуле соединений есть хотя бы одно открытое соединение.
Старайтесь избегать мусора в бассейне. Это в основном включает фрагментацию пула, генерируемую интегрированной безопасностью, и фрагментацию пула, генерируемую с использованием множества баз данных.
Совет: фрагментация пула — распространённая проблема во многих веб-приложениях, и приложения могут создавать большое количество пулов, которые не выпускаются до окончания процесса. Таким образом, открывается большое количество соединений, что занимает много памяти и снижает производительность.





Предыдущий:.net/c# генерирует случайные числа, пользовательские буквы и цифры
Следующий:Как настроить HttpOnly для файлов cookie? Для чего используется HttpOnly?
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com