Tagi na forum.

Windows 14205 SQL Server 2132
sieci 6796 Windows XP 1921
SQL 6578 Outlook 1838
SBS 3868 Uprawnienia 1777
Windows 2003 2781 IIS 1636
Windows Server 2588 Office 1516
DNS 2315 Skrypt 1499

pokaż wszystkie tagi na forum

ASP.NET 2.0 liczba sesji z SQL Server 2005/2008

ubik213 2011-01-27 20:02:50
0
avatar
 
 
Witam,
 
Łączę się z sql serverem za pomocą Odbc w aplikacjach okienkowych i każde otworzenie aplikacji okienkowej powoduje dodanie nowej sesji na bazie. Podglądam to sobie tak:
 
select * from sys.sysprocesses where loginame = 'admin_okienka'
 
natomiast aplikacja napisana w ASP.NET cały czas trzyma tylko jedną sesję z bazą bez względu na to z ilu miejsc się podłącze logując się przez stronę internetową. Samo połączenie trzymam w Sesji w ASP i każdy nowo zalogowany łączy się w ten sposób
 
OdbcConnection odbcCon = new OdbcConnection();odbcCon.ConnectionString = this.connString;
odbcCon.Open();
 
... jakies operacje
 
odbcCon.Close();
 
Czy jest dobrze że na bazie po wyświetleniu procesów mam tyko jeden jeśli chodzi o aplikację ASP. Dokładnie jak pisałem wyżej czyli select * from sys.sysprocesses...
 
Będę bardzo wdzięczny za pomoc,
Pozdrawiam.
Edytowano 1 raz. Ostatnio 2011-01-27 20:03:25 przez ubik213.
tagi: ASP.NET   ODBC   SQL
Liczba postów:

maciekgrabek  2011-01-28 11:07:20 #1.1
0
avatar
 
 
Nie pamiętam, czy można w w obrębie jednej transakcji zamykać połączenie i otwierać nowe - w sumie to raczej powinno się zrobić tak:
otwórz połączenie
zainicjuj transakcję
operacja 1
operacja 2
...
zatwierdź / odrzuć transakcję
zamknij połączenie
 
ale głowy nie dam, że nie można przekazać obiektu transakcji do innej metody, w której tworzymy połączenie coś wykonujemy i zamykamy połączenie w oparciu o istniejącą transakcję - trzeba by to sprawdzić.
 
Ja przeważnie przekazuję w takich przypadkach połączenie + transakcję i na nich działam.--Maciek
Jeżeli odpowiedź okazała się pomocna kliknij [Pomógł mi]
BLOG

Maciej Grabek
MVP
MVP - Windows Phone Development
PL blog: http://maciejgrabek.com
EN blog: http://en.maciejgrabek.com
twitter: @maciejgrabek
maciekgrabek  2011-01-28 08:39:07 #1
0
avatar
 
 
Połączenie jest tworzone dla instancji procesu. Jeżeli uruchamiasz 5 aplikacji okienkowych, to powstaje 5 oddzielnych procesów i każdy z nich chcąc łączyć się do bazy musi utworzyć sobie własne połączenie.
Jeżeli chodzi o asp.net, to sprawa wygląda inaczej. Tutaj chodzi 1 proces -
na XP masz aspnet_wp.exe, na wyższych w3wp.exe. Nie ważne z ilu miejsc łączysz się do aplikacji webowej działa tam ten właśnie proces, który obsługuje wszystkie zgłoszenia.
 
Dodatkowo .NET ma mechanizm, który nazywa się connection pooling. Polega on na tym, że jeżeli jest potrzebne połączenie do bazy wówczas proces najpierw sprawdza, czy nie ma przypadkiem już jakiegoś połączenia i czy nie jest ono teraz wolne. Jeżeli jest to go używa nie tworząc nowego, jeżeli nie ma to wówczas tworzy. Nie ma sensu trzymać połączenia w sesji użytkownika - pozwól platformie o to zadbać - niech też trochę popracuje :)--Maciek
Jeżeli odpowiedź okazała się pomocna kliknij [Pomógł mi]
BLOG

Maciej Grabek
MVP
MVP - Windows Phone Development
PL blog: http://maciejgrabek.com
EN blog: http://en.maciejgrabek.com
twitter: @maciejgrabek
wawrzyniakad  2011-01-28 09:24:25 #1.1
0
avatar
 
 
Witam,
Czasami jeżeli jest źle napisana aplikacja i tych połaczeń robi się dużo, o wiele za dużo, tak że wpływają na wydajność aplikacji. Można wtedy podsterować ustawienia protokołu TCP/IP, tak aby połączenie było trzymane krócej. Odsyłam do artykułu
http://support.microsoft.com/kb/328476--AW

maciekgrabek  2011-01-28 09:35:39 #1.1.1
0
avatar
 
 
Co fakt, to fakt. Jak aplikacja jest źle napisana to nawet pooling nie pomoże :)--Maciek
Jeżeli odpowiedź okazała się pomocna kliknij [Pomógł mi]
BLOG

Maciej Grabek
MVP
MVP - Windows Phone Development
PL blog: http://maciejgrabek.com
EN blog: http://en.maciejgrabek.com
twitter: @maciejgrabek
ubik213  2011-01-28 10:59:10 #1.1.2
0
avatar
 
 
Dziękuję bardzo za odpowiedź. Wszystko w zasadzie działa poprawnie tylko zastanawiało mnie dlaczego jest jeden proces w asp.
 
Jeśli chodzi o trzymanie połączenia w sesji:
Co z transakcjami ?
Jeśli rozpocznę transakcję zrobie odbcCon.Open() ... dodaje cos do bazy potem odbcCon.Close() i tak kilka razy w ramach jednej transakcji to wszystko będzie wporządku ? Transakcja wycofa się lub zatwierdzi poprawnie ? Sam sobie to potestuję ale ciekawi mnie dlaczego miałoby to działać. Application Pool jakoś tu własnie o to dba ?--

maciekgrabek  2011-01-28 11:07:20 #1.1
0
avatar
 
 
Nie pamiętam, czy można w w obrębie jednej transakcji zamykać połączenie i otwierać nowe - w sumie to raczej powinno się zrobić tak:
otwórz połączenie
zainicjuj transakcję
operacja 1
operacja 2
...
zatwierdź / odrzuć transakcję
zamknij połączenie
 
ale głowy nie dam, że nie można przekazać obiektu transakcji do innej metody, w której tworzymy połączenie coś wykonujemy i zamykamy połączenie w oparciu o istniejącą transakcję - trzeba by to sprawdzić.
 
Ja przeważnie przekazuję w takich przypadkach połączenie + transakcję i na nich działam.--Maciek
Jeżeli odpowiedź okazała się pomocna kliknij [Pomógł mi]
BLOG

Maciej Grabek
MVP
MVP - Windows Phone Development
PL blog: http://maciejgrabek.com
EN blog: http://en.maciejgrabek.com
twitter: @maciejgrabek

Udziel odpowiedzi

avatar
Treść wpisu:

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Idź na górę strony