Използване на Performance Monitor за наблюдение на обединени връзки

Проучвам тази грешка от MVC3 приложение, което се проваля при натоварване:

„Периодът на изчакване е изтекъл преди получаване на връзка от пула. Това може да се е случило, защото всички обединени връзки са били използвани и е достигнат максималният размер на пула.“

Приложението използва модела Repository и Entity Framework и моето предположение е, че не затваря правилно връзките. Искам да мога да наблюдавам броя на групираните връзки на SQL Server. Търсенето наоколо ме кара да вярвам, че мога да използвам тези броячи в Perfmon:

  • .NET CLR данни
  • .NET доставчик на данни за SQLServer

Въпреки това и двете се показват и са деактивирани/сиви.

Изпълнявам Perfmon директно на сървъра и както ISS, така и SQL Server работят на сървъра. Някакви идеи защо тези броячи няма да са налични?

Опитах също да използвам SQL Profiler за наблюдение на обединени връзки, но колоната EventSubClass не е налична за AuditLogin.


person VincentH    schedule 16.08.2013    source източник
comment
Вторият брояч смятам, че е правилният. Какво имаш предвид, когато е в сиво? Тъй като не можете да добавите тези монитори? Имате ли администраторски достъп до машината?   -  person DavidN    schedule 16.08.2013
comment
Да, ако се опитам да добавя тези монитори, нищо не се случва. И аз съм администратор на машината   -  person VincentH    schedule 16.08.2013


Отговори (2)


Можете да стартирате това от прозорци на SQL заявки, за да получите брой и подробности за текущите връзки и сесия, изпълнявани на вашия SQL сървър.

select * FROM sys.dm_exec_sessions AS es  
INNER JOIN sys.dm_exec_connections AS ec  
ON es.session_id = ec.session_id

Имах проблеми с обединените връзки. Трудно се контролират. Изричното им затваряне изглежда никога не е работило, тъй като те са под контрола на .NET. Най-голямата причина, поради която ни свършиха връзките, са необвързаните транзакции. Ако дадена транзакция е оставена неизпълнена или върната по някаква причина, връзката, вместо да бъде използвана повторно, остава в неопределеност, принуждавайки .NET да отвори още една връзка, за да продължи обработката.

person Brian    schedule 16.08.2013
comment
Това изглежда полезно - но казва ли ми дали връзката е групирана или не? - person VincentH; 16.08.2013
comment
Изглежда, че няма динамичен, съмнителен начин за намиране дали жива връзка е обединена. Всички примери, които видях, разчитаха на a) създаване на таблица и тригер за съхраняване на данни за връзка и b) използване на данни за събитие за влизане (които съдържат IsPooled) за попълване на таблицата. Тук има пример:sqlservercentral.com/Forums/Topic798425-146-1 .aspx#bm798660 - person Brian; 16.08.2013

От страна на SQL, единственият жизнеспособен начин да прегледате това е чрез настройка на проследяване на събитие за влизане. Колоната „Подклас на събитие“ ще ви каже дали събитието се е случило с помощта на обединена връзка или не. С това можете да свържете имената на хоста, входа и приложението и да продължите да копаете.

Проверете клас на събитие за влизане

От страна на приложението можете да използвате броячите на производителност на ".NET DATA PROVIDER FOR SQL SERVER" на perfmon.

Броячи на производителността в ADO.NET

person Salvador L    schedule 10.10.2015