2012-06-24 10 views
9

durumunu uyku anlamı:açık bağlantı sayısı ve benim veritabanında bu sorguyu ran bir bağlantı

SELECT 
DB_NAME(dbid) as DBName, 
COUNT(dbid) as NumberOfConnections, 
loginame as LoginName 
FROM 
    sys.sysprocesses 
WHERE dbid > 0 
GROUP BY dbid, loginame 

--------------------------------------------------- 
SELECT COUNT(dbid) as TotalConnections 
FROM sys.sysprocesses 
WHERE 
dbid > 0 
--------------------------------------------------- 
exec sp_who2 'Active' 

benim veritabanına bağlantı sayısını bilmek istiyorum. İlk sorgu ve ikinci sorgu miktarının toplamı eşittir, ancak üçüncü sorgu farklı sayıda satır döndürür.

Üçüncü sorgunun ne döndüğünü bilmek istiyorum? Durumun bazılarını görüyorum 'üçüncü sorgu sonucu sleeping. Ne anlama geliyor? Bağlantı boşta mı yoksa havuzda hazır mı? Sonucumda birçok sleeping bağlantım varsa ne anlama geliyor?

sayesinde

+0

'' Etkin '' belirtmeden koşarsanız, üçüncü sorgu tarafından döndürülemez diye düşünüyorum '' etkin ''… –

cevap

11

sleeping bir durumu (sys.dm_exec_requests bu session_id için hiçbir şey olmasıdır belki de% 100 doğru ise, örneğin, basit bir tanım) oturum bağlı ama aktif şey çalışmadığı anlamına gelir.

sp_who2 'active'sleeping bir statüsü olan veya AWAITING COMMAND, LAZY WRITER veya CHECKPOINT SLEEP bir son komutu olan herhangi spid filtreler. Hayır, sp_who2'un ne yaptığını ezberlemedim; Sadece kaynak kodu görünüyordu: sp_who2 undocumented ve desteksiz ve Sysprocesses kaldırıldı ve sadece geriye dönük uyumluluk nedeniyle, şu anda mevcut olan

EXEC master..sp_helptext sp_who2; 

Not olduğu. Daha iyi servis edileceksiniz, bence Adam Machanic's sp_whoisactive gibi bir prosedürle. Ya da en azından sys.dm_exec_sessions ve sys.dm_exec_requests gibi daha modern DMV'lerin nasıl kullanılacağını bilmek.

DÜZENLEME

Ben daha modern DMVs hala düzgün veritabanı (ler) dahil açıklamayız talihsiz beyanı eklemek gerekir. Ama bu gerçekten ne anlama geliyor? Eğer böyle bir sorgu varsa:

Ne veritabanı kimliği bu sorgu çalışırken o oturum için sys.sysprocesses.dbid yansıyan alacak bekliyorsunuz
USE database_A; 
GO 

SELECT [column] FROM database_B.dbo.[table] 
    UNION ALL 
SELECT [column] FROM database_C.dbo.[table]; 

? Gerçekte ne olduğunu belirlemek için okuyucuya bir egzersiz olarak bırakacağım. Uzun lafın kısası, hangi veritabanlarının "dokunulduğunu" bilmek için güvenmek istediğiniz manzara/sütun değil.

+0

'Uyuyor', son komut çalıştırıldıktan sonra bağlantı kapalı değil mi? – Arian

+0

@Kerezo zorunlu olarak değil; bağlantı havuzu bir bağlantıyı düşünün, uygulama bağlantıyı açıkça kapatsa bile bağlantıların yeniden kullanılmasını sağlayın - bu yalnızca havuza olan bağlantıyı döndürür, ancak SQL Server bağlantısı kesilir ve sys.dm_exec_sessions satırından kaldırılır. bağlantı havuzu. –

İlgili konular