Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: .NET
.NET Standard
Önemli
.NET Core 3.1 ve üzeri ya da .NET Standard 2.1 ve üzeri hedeflenirken olay sayaçları kullanılabilir. Bu özellik Microsoft.Data.SqlClient itibaren kullanılabilir.
Uygulamanızın durumunu ve kullandığı bağlantı kaynaklarını izlemek için olay sayaçlarını kullanabilirsiniz Microsoft.Data.SqlClient . Olay sayaçları .NET CLI global tools ve perfView ile izlenebilir veya EventListener ad alanındaki System.Diagnostics.Tracing sınıfı kullanılarak programatik olarak erişilebilir.
Kullanılabilir olay sayaçları
Şu anda için aşağıdaki tabloda açıklandığı gibi 16 farklı olay sayacı vardır Microsoft.Data.SqlClient :
| İsim | Ekran adı | Description |
|---|---|---|
| Etkin-sabit bağlantılar | Şu anda sunuculara yapılan gerçek etkin bağlantılar | Şu anda veritabanı sunucularına açık olan bağlantı sayısı. |
| doğrudan bağlar | Sunuculara gerçek bağlantı hızı | Veritabanı sunucularına açılan saniyedeki bağlantı sayısı. |
| bağlantısı kesiliyor | Sunuculardan gerçek bağlantı kesme oranı | Veritabanı sunucularına yapılan saniyedeki bağlantı kesme sayısı. |
| etkin-yumuşak bağlantılar | Bağlantı havuzundan alınan etkin bağlantılar | Bağlantı havuzundan hali hazırda açık olan ve kullanılan bağlantı sayısı. |
| yumuşak bağlantılar | Bağlantı havuzundan alınan bağlantı oranı | Bağlantı havuzundan tüketilen saniye başına bağlantı sayısı. |
| yumuşak bağlantı kesmeleri | Bağlantı havuzuna döndürülen bağlantı oranı | Bağlantı havuzuna döndürülen saniye başına bağlantı sayısı. |
| havuzlanmamış bağlantı sayısı | Bağlantı havuzu kullanmayan bağlantı sayısı | Havuzlanmamış etkin bağlantı sayısı. |
| bağlantı havuzu sayısı | Bağlantı havuzu tarafından yönetilen bağlantı sayısı | Bağlantı havuzu altyapısı tarafından yönetilen etkin bağlantı sayısı. |
| aktif-bağlantı-havuzu-grupları sayısı | Etkin benzersiz bağlantı dizelerinin sayısı | Etkin olan benzersiz bağlantı havuzu gruplarının sayısı. Bu sayaç, AppDomain içinde bulunan benzersiz bağlantı dizesi sayısıyla denetlenmektedir. |
| etkin olmayan bağlantı havuzu gruplarının sayısı | Budama için bekleyen benzersiz bağlantı dizelerinin sayısı | Ayıklama için işaretlenen benzersiz bağlantı havuzu gruplarının sayısı. Bu sayaç, AppDomain içinde bulunan benzersiz bağlantı dizesi sayısıyla denetlenmektedir. |
| etkin bağlantı havuzlarının sayısı | Etkin bağlantı havuzlarının sayısı | Toplam bağlantı havuzu sayısı. |
| etkin olmayan bağlantı havuzu sayısı | Etkin olmayan bağlantı havuzlarının sayısı | Yakın zamanda etkinlik göstermemiş ve atılmayı bekleyen etkin olmayan bağlantı havuzlarının sayısı. |
| etkin bağlantı sayısı | Etkin bağlantı sayısı | Şu anda kullanımda olan etkin bağlantı sayısı. |
| ücretsiz bağlantı sayısı | Bağlantı havuzundaki hazır bağlantı sayısı | Bağlantı havuzlarında kullanılabilen açık bağlantı sayısı. |
| sayıda stasis bağlantıları | Şu anda hazır olmak için bekleyen bağlantı sayısı | Şu anda bir eylemin tamamlanmasını bekleyen ve uygulama tarafından kullanılamayan bağlantı sayısı. |
| geri kazanılmış bağlantı sayısı | GC'den geri alınan bağlantı sayısı | Uygulama tarafından Close veya Dispose çağrılmadığında çöp toplama yoluyla geri alınan bağlantıların sayısı.
Not Bağlantıların açıkça kapatılmaması veya devre dışı bırakmaması performansa zarar verir. |
Olay sayacı değerlerini alma
EventCounters'ı kullanmanın iki birincil yolu vardır: proc içinde veya proc dışında. Daha fazla bilgi için bkz EventCounters kullanma.
Proc dışında tüket
Windows'ta, olay sayaçları verilerini toplamak için PerfView ve Xperf kullanabilirsiniz. Daha fazla bilgi için bkz. SqlClient'da olay izlemeyi etkinleştirme. Olay sayaçları verilerini izlemek ve toplamak için platformlar arası .NET araçları olan dotnet-counters ve dotnet-trace kullanabilirsiniz.
Proc dışı örnek
Aşağıdaki komut, SqlClient olay sayaçları değerlerini saniyede bir çalıştırır ve toplar.
EventCounterIntervalSec=1 değerinin daha yüksek bir değerle değiştirilmesi, sayaç verilerinde daha az ayrıntı düzeyine sahip daha küçük bir izlemenin toplanmasına olanak tanır.
PerfView /onlyProviders=*Microsoft.Data.SqlClient.EventSource:EventCounterIntervalSec=1 run "<application-Path>"
Aşağıdaki komut, SqlClient olay sayaçları değerlerini saniyede bir toplar.
dotnet-trace collect --process-id <pid> --providers Microsoft.Data.SqlClient.EventSource:0:1:EventCounterIntervalSec=1
Aşağıdaki komut, SqlClient olay sayaç değerlerini her üç saniyede bir izler.
dotnet-counters monitor --counters Microsoft.Data.SqlClient.EventSource -p <process-id> --refresh-interval 3
Aşağıdaki komut, seçilen SqlClient olay sayaçları değerlerini saniyede bir izler.
dotnet-counters monitor --counters Microsoft.Data.SqlClient.EventSource[hard-connects,hard-disconnects] -p <process-id>
İşlem içinde tüketme
Sayaç değerlerini EventListener API'sini kullanarak tüketebilirsiniz. , EventListener uygulamanızdaki bir EventSource örnekleri tarafından yazılan herhangi bir olayı kullanmanızı sağlamanın bir yoludur. Daha fazla bilgi için bkz . EventListener.
Proc örneği
Aşağıdaki örnek kod, Microsoft.Data.SqlClient.EventSource olaylarını EventCounterIntervalSec=1 kullanarak yakalar. Her olay sayacı güncelleştirmesinde, sayacın adını ve Mean değerini yazar.
Uyarı
Bu olayı etkinleştirirken EventCounterIntervalSec özellik değerinin belirtilmesi gerekir.
using System;
using System.Collections.Generic;
using System.Diagnostics.Tracing;
using System.Linq;
using Microsoft.Data.SqlClient;
// This listener class will listen for events from the SqlClientEventSource class.
// SqlClientEventSource is an implementation of the EventSource class which gives
// it the ability to create events.
public class EventCounterListener : EventListener
{
protected override void OnEventSourceCreated(EventSource eventSource)
{
// Only enable events from SqlClientEventSource.
if (eventSource.Name.Equals("Microsoft.Data.SqlClient.EventSource"))
{
var options = new Dictionary<string, string>();
// define time interval 1 second
// without defining this parameter event counters will not enabled
options.Add("EventCounterIntervalSec", "1");
// enable for the None keyword
EnableEvents(eventSource, EventLevel.Informational, EventKeywords.None, options);
}
}
// This callback runs whenever an event is written by SqlClientEventSource.
// Event data is accessed through the EventWrittenEventArgs parameter.
protected override void OnEventWritten(EventWrittenEventArgs eventData)
{
if (eventData.Payload.FirstOrDefault(p => p is IDictionary<string, object> x && x.ContainsKey("Name")) is IDictionary<string, object> counters)
{
if (counters.TryGetValue("DisplayName", out object name) && name is string cntName
&& counters.TryGetValue("Mean", out object value) && value is double cntValue)
{
// print event counter's name and mean value
Console.WriteLine($"{cntName}\t\t{cntValue}");
}
}
}
}
class Program
{
static void Main(string[] args)
{
// Create a new event listener
using (var listener = new EventCounterListener())
{
string connectionString = "Data Source=localhost; Integrated Security=true";
for (int i = 0; i < 50; i++)
{
// Open a connection
SqlConnection cnn = new SqlConnection(connectionString);
cnn.Open();
// wait for sampling interval happens
System.Threading.Thread.Sleep(500);
}
}
}
}
Actual active connections currently made to servers 0
Active connections retrieved from the connection pool 26
Number of connections not using connection pooling 0
Number of connections managed by the connection pool 26
Number of active unique connection strings 1
Number of unique connection strings waiting for pruning 0
Number of active connection pools 1
Number of inactive connection pools 0
Number of active connections 26
Number of ready connections in the connection pool 0
Number of connections currently waiting to be ready 0
...
Ayrıca bakınız
- SqlClient'da performans sayaçları
- dotnet-counters
- dotnet-trace
- SqlClient’ta olay izlemeyi etkinleştirme
- SQL Server için Microsoft ADO.NET