Skip to content

Мониторинг числа подключений

Пересказ статьи Andy Warren. Monitoring the Number of Connections


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

В мире SQL Server подключение - это то, что позволяет приложению или пользователю авторизоваться, выполнить запросы и получить результаты. Создание подключения обходится довольно дорого, и они требуют постоянного выделения памяти, поэтому предпочтительно иметь низкое число подключений (и значительно меньшего, чем максимальное число подключений на экземпляр - 32767).

В старых клиент-серверных приложениях вы можете увидеть, как каждое настольное приложение открывает и поддерживает соединение на протяжении сеанса пользователя, но в большинстве современных приложений (веб-приложения, многоуровневые и т.д.) соединения реализуются по шаблону, известному как открыл-использовал-закрыл, когда соединение открывается, запрос выполняется, а затем соединение закрывается. Это кажется несколько нелогичным, ввиду затратного открытия соединения, однако за сценой имеется магический вызов пула подключений, который позволяет держать соединения открытыми, и повторно их использовать, создавая при этом впечатление, что мы закрываем соединение. Если вы когда-нибудь видели вызовы sp_reset_connection в Profiler, это знак того, что используется пул соединений.

Давайте начнем с рассмотрения вариантов мониторинга количества подключений. Вы имеете два варианта: можно написать запрос к системному DMV или использовать счетчик, который называется "User Connections" (который также доступен из DMV). Счетчик соединений пользователей имеет отношение к соединениям, которые не являются системными. Я считаю, что до тех пор, пока вы постоянно используете один и тот же счетчик или запрос, не имеет большого значения, включены ли системные соединения.

Вот запрос для получения счетчика производительности с помощью SQL. Непосредственно сейчас я имею всего 5 открытых подключений.

SELECT *
FROM sys.dm_os_performance_counters
WHERE counter_name = 'User Connections';

Видим такие результаты:



Вы можете получить эти же результаты посредством Performance Monitor, напрямую просматривая эти счетчики.



Если я построю график, то увижу изменение счетчика во времени.



Если вы больше предпочитаете использовать SQL, то можете получить число подключений пользователей таким запросом:

SELECT *
FROM sys.dm_exec_connections

Результат содержит большое число столбцов, которые могут помочь вам в решении любых проблем.



Если вы не знакомы с использованием Perfmon или DMV sys.dm_exec_connections, полезно потратить несколько минут, чтобы посмотреть на значения, которые вы получите на вашей локальной машине. Откройте несколько новых окон запросов в SSMS и понаблюдайте за ростом счетчика.

Замечание. Если вы не видите счетчиков в Perfmon, это означает, что SQL Server не установлен на этой машине, или что-то неправильно со счетчиками. Для подробностей относительно исправления счетчиков обратитесь к этой статье.

Теперь, когда вы значте, как увидеть число подключений, давайте поговорим о том, почему полезно это мониторить. Число подключений - это хороший способ понять нагрузку (то, что я называю темпом использования) на экземпляр вместо слежением за ЦП. Если вы видите внезапный рост числа подключений или число подключений превышает среднее значение для этого периода времени, я захочу взглянуть, даже если загрузка процессора в порядке. Вот несколько примеров, почему число подключений может увеличиться:

  • Пиковая рабочая нагрузка. Все входят в систему в понедельник утром, поэтому количество подключений, вероятно, сильно возрастет. Я ожидаю подобного числа в предыдущий (не праздничный!) понедельник.

  • Разработчики не закрывают соединения. Обычно, если это происходит, возникает краткосрочная проблема, поскольку вы превышаете предел пула подключений, но это зависит от использования и предела пула.

  • План изменился. Да, планы постоянно меняются, но если это план большой хранимой процедуры, который меняет время выполнения с 5 до 50 мс, вы увидите увеличение числа подключений. Заметим, что кратковременное блокирование может вызвать подобные симптомы.

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

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


Не существует "магического числа", которое бы указывало на проблему. На одной системе, которую я мониторю, предупреждением низкой важности является число подключений, превышающее 1000, а высокой важности - превышение 1500. Большую часть дней это число находится ниже уровня 1000, и я ожидаю скачки выше пару раз в рабочие дни. Если число остается выше 1000 более чем на несколько минут, я захочу покопаться, чтобы понять почему. Если число превышает 2000, у нас действительно плохой день.

Один момент, который следует учитывать при отслеживании количества подключений, заключается в том, что в конечном итоге вы оцените знания, откуда исходят подключения, как к серверу, так и к приложению. Perfmon не даст вам такого ответа, вы должны получить его из SQL, но это не означает, что вы должны следить за этим все время. Вы можете просто смотреть, если общее число превышает пороговое значение, которое вы установили. Иногда вы обнаружите, что причиной проблемы является один сервер или одно приложение.

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

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.