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 Framework
Uygulamanızın durumunu ve kullandığı bağlantı kaynaklarını izlemek için performans sayaçlarını kullanabilirsiniz Microsoft.Data.SqlClient . Performans sayaçlarına Windows Performans İzleyicisini kullanarak veya PerformanceCounter ad alanındaki System.Diagnostics sınıfı programatik olarak kullanılarak erişebilir.
Önemli
PerformanceCounterBu makalede açıklanan tabanlı yaklaşım .NET Framework gerektirir ve yalnızca Windows üzerinde çalışır. sınıfı System.Diagnostics.PerformanceCounter .NET Core, .NET 5+ veya Windows dışı platformlarda kullanılamaz. Modern .NET uygulamalarında platformlar arası izleme için bunun yerine SqlClient'da Olay sayaçlarını kullanın.
Kullanılabilir performans sayaçları
Şu anda için aşağıdaki tabloda açıklandığı gibi 14 farklı performans sayacı vardır Microsoft.Data.SqlClient .
| Performans sayacı | Description |
|---|---|
HardConnectsPerSecond |
Bir veritabanı sunucusuna yapılan saniyede bağlantı sayısı. |
HardDisconnectsPerSecond |
Bir veritabanı sunucusuna yapılan saniyedeki bağlantı kesme sayısı. |
NumberOfActiveConnectionPoolGroups |
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. |
NumberOfActiveConnectionPools |
Toplam bağlantı havuzu sayısı. |
NumberOfActiveConnections |
Şu anda kullanımda olan etkin bağlantı sayısı. Not: Bu performans sayacı varsayılan olarak etkin değildir. Bu performans sayacını etkinleştirmek için bkz Varsayılan olarak kapalı sayaçları etkinleştirme. |
NumberOfFreeConnections |
Bağlantı havuzlarında kullanılabilen bağlantı sayısı. Not: Bu performans sayacı varsayılan olarak etkin değildir. Bu performans sayacını etkinleştirmek için bkz Varsayılan olarak kapalı sayaçları etkinleştirme. |
NumberOfInactiveConnectionPoolGroups |
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. |
NumberOfInactiveConnectionPools |
Yakın zamanda etkinlik göstermemiş ve atılmayı bekleyen etkin olmayan bağlantı havuzlarının sayısı. |
NumberOfNonPooledConnections |
Havuzlanmamış etkin bağlantı sayısı. |
NumberOfPooledConnections |
Bağlantı havuzu altyapısı tarafından yönetilen etkin bağlantı sayısı. |
NumberOfReclaimedConnections |
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. |
NumberOfStasisConnections |
Şu anda bir eylemin tamamlanmasını bekleyen ve bu nedenle uygulamanız tarafından kullanılamayan bağlantı sayısı. |
SoftConnectsPerSecond |
Bağlantı havuzundan çekilen etkin bağlantı sayısı. Not: Bu performans sayacı varsayılan olarak etkin değildir. Bu performans sayacını etkinleştirmek için bkz Varsayılan olarak kapalı sayaçları etkinleştirme. |
SoftDisconnectsPerSecond |
Bağlantı havuzuna döndürülen etkin bağlantı sayısı. Not: Bu performans sayacı varsayılan olarak etkin değildir. Bu performans sayacını etkinleştirmek için bkz Varsayılan olarak kapalı sayaçları etkinleştirme. |
Varsayılan olarak kapalı olan sayaçları etkinleştirme
NumberOfFreeConnections, NumberOfActiveConnections, SoftDisconnectsPerSecond ve SoftConnectsPerSecond performans sayaçları varsayılan olarak kapalıdır. Aşağıdaki bilgileri uygulamanın yapılandırma dosyasına ekleyerek bunları etkinleştirin:
<system.diagnostics>
<switches>
<add name="ConnectionPoolPerformanceCounterDetail" value="4"/>
<!-- A value of 4 corresponds to System.Diagnostics.TraceLevel.Verbose -->
</switches>
</system.diagnostics>
Performans sayacı değerlerini alma
Aşağıdaki konsol uygulaması, uygulamanızda performans sayacı değerlerinin nasıl alınıyor olduğunu gösterir. Sql Server performans sayaçları için tüm Microsoft SqlClient Veri Sağlayıcısı için bilgilerin döndürülebilmesi için bağlantıların açık ve etkin olması gerekir.
Uyarı
Bu örnekte örnek AdventureWorks veritabanı kullanılmaktadır. Örnek kodda sağlanan bağlantı dizeleri, veritabanının yerel bilgisayarda yüklü ve kullanılabilir olduğunu ve bağlantı dizelerinde sağlananlarla eşleşen oturum açma bilgileri oluşturduğunuzu varsayar. Sunucunuz yalnızca Windows Kimlik Doğrulamasına izin veren varsayılan güvenlik ayarları kullanılarak yapılandırılmışsa SQL Server oturum açma bilgilerini etkinleştirmeniz gerekebilir. bağlantı dizesi ortamınıza uyacak şekilde değiştirin.
Example
using System;
using Microsoft.Data.SqlClient;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace SqlClient_PerformanceCounter
{
class Program
{
PerformanceCounter[] PerfCounters = new PerformanceCounter[10];
SqlConnection connection = new SqlConnection();
static void Main()
{
Program prog = new Program();
// Open a connection and create the performance counters.
prog.connection.ConnectionString =
GetIntegratedSecurityConnectionString();
prog.SetUpPerformanceCounters();
Console.WriteLine("Available Performance Counters:");
// Create the connections and display the results.
prog.CreateConnections();
Console.WriteLine("Press Enter to finish.");
Console.ReadLine();
}
private void CreateConnections()
{
// List the Performance counters.
WritePerformanceCounters();
// Create 4 connections and display counter information.
SqlConnection connection1 = new SqlConnection(
GetIntegratedSecurityConnectionString());
connection1.Open();
Console.WriteLine("Opened the 1st Connection:");
WritePerformanceCounters();
SqlConnection connection2 = new SqlConnection(
GetSqlConnectionStringDifferent());
connection2.Open();
Console.WriteLine("Opened the 2nd Connection:");
WritePerformanceCounters();
SqlConnection connection3 = new SqlConnection(
GetSqlConnectionString());
connection3.Open();
Console.WriteLine("Opened the 3rd Connection:");
WritePerformanceCounters();
SqlConnection connection4 = new SqlConnection(
GetSqlConnectionString());
connection4.Open();
Console.WriteLine("Opened the 4th Connection:");
WritePerformanceCounters();
connection1.Close();
Console.WriteLine("Closed the 1st Connection:");
WritePerformanceCounters();
connection2.Close();
Console.WriteLine("Closed the 2nd Connection:");
WritePerformanceCounters();
connection3.Close();
Console.WriteLine("Closed the 3rd Connection:");
WritePerformanceCounters();
connection4.Close();
Console.WriteLine("Closed the 4th Connection:");
WritePerformanceCounters();
}
private enum ADO_Net_Performance_Counters
{
NumberOfActiveConnectionPools,
NumberOfReclaimedConnections,
HardConnectsPerSecond,
HardDisconnectsPerSecond,
NumberOfActiveConnectionPoolGroups,
NumberOfInactiveConnectionPoolGroups,
NumberOfInactiveConnectionPools,
NumberOfNonPooledConnections,
NumberOfPooledConnections,
NumberOfStasisConnections
// The following performance counters are more expensive to track.
// Enable ConnectionPoolPerformanceCounterDetail in your config file.
// SoftConnectsPerSecond
// SoftDisconnectsPerSecond
// NumberOfActiveConnections
// NumberOfFreeConnections
}
private void SetUpPerformanceCounters()
{
connection.Close();
this.PerfCounters = new PerformanceCounter[10];
string instanceName = GetInstanceName();
Type apc = typeof(ADO_Net_Performance_Counters);
int i = 0;
foreach (string s in Enum.GetNames(apc))
{
this.PerfCounters[i] = new PerformanceCounter();
this.PerfCounters[i].CategoryName = ".NET Data Provider for SqlServer";
this.PerfCounters[i].CounterName = s;
this.PerfCounters[i].InstanceName = instanceName;
i++;
}
}
[DllImport("kernel32.dll", SetLastError = true)]
static extern int GetCurrentProcessId();
private string GetInstanceName()
{
//This works for Winforms apps.
string instanceName =
System.Reflection.Assembly.GetEntryAssembly().GetName().Name;
// Must replace special characters like (, ), #, /, \\
string instanceName2 =
AppDomain.CurrentDomain.FriendlyName.ToString().Replace('(', '[')
.Replace(')', ']').Replace('#', '_').Replace('/', '_').Replace('\\', '_');
// For ASP.NET applications your instanceName will be your CurrentDomain's
// FriendlyName. Replace the line above that sets the instanceName with this:
// instanceName = AppDomain.CurrentDomain.FriendlyName.ToString().Replace('(','[')
// .Replace(')',']').Replace('#','_').Replace('/','_').Replace('\\','_');
string pid = GetCurrentProcessId().ToString();
instanceName = instanceName + "[" + pid + "]";
Console.WriteLine("Instance Name: {0}", instanceName);
Console.WriteLine("---------------------------");
return instanceName;
}
private void WritePerformanceCounters()
{
Console.WriteLine("---------------------------");
foreach (PerformanceCounter p in this.PerfCounters)
{
Console.WriteLine("{0} = {1}", p.CounterName, p.NextValue());
}
Console.WriteLine("---------------------------");
}
private static string GetIntegratedSecurityConnectionString()
{
// To avoid storing the connection string in your code,
// you can retrieve it from a configuration file.
return @"Data Source=.;Integrated Security=True;" +
"Initial Catalog=AdventureWorks";
}
private static string GetSqlConnectionString()
{
// To avoid storing the connection string in your code,
// you can retrieve it from a configuration file.
return @"Data Source=.;User Id=<myUserID>;Password=<myPassword>;" +
"Initial Catalog=AdventureWorks";
}
private static string GetSqlConnectionStringDifferent()
{
// To avoid storing the connection string in your code,
// you can retrieve it from a configuration file.
return @"Initial Catalog=AdventureWorks;Data Source=.;" +
"User Id=<myUserID>;Password=<myPassword>;";
}
}
}
İlgili içerik
- SqlClient'da olay sayaçları
- Veri kaynağına bağlanma
- Çalışma zamanı profili oluşturma
- Performans eşiklerini izlemeye giriş
- SQL Server için Microsoft ADO.NET