ODBC Sürücüsü Performansı Profili Oluşturma

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform System (PDW)

Important

SQL Server Native Client (SNAC) ile birlikte gönderilmez:

  • SQL Server 2022 (16.x) ve sonraki sürümleri
  • SQL Server Management Studio 19 ve sonraki sürümleri

YENI uygulama geliştirme için SQL Server Yerel İstemcisi (SQLNCLI veya SQLNCLI11) ve SQL Server için eski Microsoft OLE DB Sağlayıcısı (SQLOLEDB) önerilmez.

Yeni projeler için aşağıdaki sürücülerden birini kullanın:

SQL Server Veritabanı Altyapısı'nın (sürüm 2012 ile 2019 arasında) bir bileşeni olarak gelen SQLNCLI için, Destek Yaşam Döngüsü özel durumukonusuna bakın.

SQL Server Native Client ODBC sürücüsü, iki tür performans verisini profilleyebilir:

  • Uzun süredir devam eden sorgular.

    Sürücü, belirli bir süre içinde sunucudan yanıt alamayan herhangi bir sorguyu log dosyasına yazabilir. Uygulama programcıları veya veritabanı yöneticileri daha sonra her kayıtlı SQL ifadesini araştırarak performansını nasıl geliştirebileceklerini belirleyebilirler.

  • Sürücü performans verileri.

    Sürücü, performans istatistiklerini kaydedebilir ve bunları ya bir dosyaya yazabilir ya da SQLPERF adlı sürücüye özgü bir veri yapısı aracılığıyla uygulamaya erişime açabilir. Performans istatistiklerini içeren dosya, Microsoft Excel gibi sekmelerle belirlenmiş dosyaları destekleyen herhangi bir tablo ile kolayca analiz edilebilen sekme-sınırlı bir dosyadır.

Her iki profilleme türü de şu şekilde etkinleştirilebilir:

Her uygulama süreci, SQL Server Native Client ODBC sürücüsünün kendi kopyasına sahip olur ve profilleme, sürücü kopyası ile uygulama sürecinin birleşimine göre küreseldir. Uygulamada herhangi bir şey profilleme açıldığında, profilleme o uygulamadan sürücüde aktif olan tüm bağlantıların bilgilerini kaydeder. Özellikle profilleme gerektirmeyen bağlantılar bile dahil ediliyor.

Sürücü profilleme logunu (performans verileri veya uzun süreli sorgu günlüğü) açtıktan sonra, sürücü ODBC Sürücü Yöneticisi tarafından yüklenene kadar günlüğü kapatmaz; bir uygulama, sürücüde açtığı tüm ortam işlemlerini serbest bıraktığında. Uygulama yeni bir ortam adresi açarsa, sürücünün yeni bir kopyası yüklenir. Uygulama ya aynı log dosyasını belirten bir veri kaynağına bağlanır ya da sürücüye özgü öznitelikleri aynı dosyaya loglar olarak ayarlarsa, sürücü eski logun üzerine yazar.

Bir uygulama bir log dosyasına profil vermeye başlar ve ikinci bir uygulama aynı log dosyasına profil vermeye çalışırsa, ikinci uygulama herhangi bir profilleme verisini kaydedemez. İkinci uygulama sürücüsünü kaldırdıktan sonra profil oluşturmaya başlarsa, ikinci uygulama ilk uygulamanın log dosyasını üzerine yazar.

Bir uygulama, profilleme etkin olan bir veri kaynağına bağlanırsa, sürücü SQLSetConnectOption çağrısı yaparak loglamaya başladığında sürücü SQL_ERROR döner. SQLGetDiagRec çağrısı ardından aşağıdaki sonuçları verir:

SQLState: 01000, pfNative = 0  
ErrorMsg: [Microsoft][SQL Server Native Client]  
   An error has occurred during the attempt to access  
   the log file, logging disabled.  

Bir ortam kolu kapalıyken sürücü performans verisi toplamayı durdurur. Bir SQL Server Native Client uygulamasının birden fazla bağlantısı varsa ve her biri kendi ortam tutamacına sahipse, ilgili ortam tutamaçları kapandığında sürücü performans verisini toplamayı durdurur.

Sürücünün performans verileri ya SQLPERF veri yapısında saklanabilir ya da sekmelerle belirlenmiş bir dosyaya kaydedilebilir. Veriler aşağıdaki istatistik kategorilerini içerir:

  • Uygulama profili

  • Bağlantı

  • Network

  • Time

Aşağıdaki tabloda, SQLPERF veri yapısındaki alanların açıklamaları, performans günlüğü dosyasında kaydedilen istatistikler için de geçerlidir.

Uygulama Profili İstatistikleri

SQLPERF alanı Description
Zamanlayıcı Çözüm Sunucunun saat süresinin minimum çözünürlüğü milisaniyelerde. Bu genellikle 0 (sıfır) olarak bildirilir ve yalnızca bildirilen sayı büyükse dikkate alınmalıdır. Sunucu saatinin minimum çözünürlüğü, bazı zamanlayıcı tabanlı istatistikler için muhtemel aralıktan daha büyükse, bu istatistikler şişirilebilir.
SQLidu SQL_PERF_START'den sonra , INSERTDELETE, veya UPDATE ifadelerin sayısı.
SQLiduRows SQL_PERF_START'den sonra , INSERTDELETE, veya UPDATE ifadelerin sayısı.
SQLSelects SQL_PERF_START sonra işlenen SELECT ifadesi sayısı.
SQLSelectRows SQL_PERF_START sonrası seçilen sıra sayısı.
Transactions SQL_PERF_START sonrası kullanıcı işlemlerinin sayısı, geri dönüşler dahil. Bir ODBC uygulaması SQL_AUTOCOMMIT_ON ile çalışırken, her komut bir işlem olarak kabul edilir.
SQLPrepares SQL_PERF_START'dan sonra SQLPrepare Fonksiyon çağrısı sayısı.
ExecDirects SQL_PERF_START sonrası SQLExecDirect çağrı sayısı.
SQLExecutes SQL_PERF_START'den sonra gelen SQLExecute çağrı sayısı.
CursorOpens Sürücünün SQL_PERF_START sonra sunucu imlecini açtığı sayısı.
CursorSize SQL_PERF_START'dan sonra imleçler tarafından açılan sonuç kümelerindeki satır sayısı.
CursorUsed SQL_PERF_START sonra sürücüden alınan satır sayısı.
PercentCursorUsed Eşittir CursorUsed/CursorSize. Örneğin, bir uygulama sürücünün "SELECT COUNT(*) FROM Authors" (SELECT COUNT(*) komutunu başlatmasına neden olursa, SELECT ifadesi için 23 satır sonuç setinde olur. Uygulama bu satırlardan sadece üçünü getirirse, CursorUsed/CursorSize 3/23 olur, yani PercentCursorUsed 13.043478 olur.
AvgFetchTime Eşittir SQLFetchTime/SQLFetchCount.
AvgCursorSize Eşit CursorSize/CursorOpens.
AvgCursorUsed Eşit CursorUsed/CursorOpens.
SQLFetchTime Sunucu imlecine karşı fetch'lerin tamamlanması gereken toplam süre.
SQLFetchCount SQL_PERF_START sonra sunucu imlecine karşı yapılan getirme sayısı.
CurrentStmtCount Sürücüde açık olan tüm bağlantılarda şu anda açık olan ifade tutamaçlarının sayısı.
MaxOpenStmt SQL_PERF_START sonra eşzamanlı açılan maksimum ifade adresi sayısı.
SumOpenStmt SQL_PERF_START sonra açılan ifade adreslerinin sayısı.
Bağlantı İstatistikleri:
CurrentConnectionCount Uygulamanın sunucuya açık olan mevcut aktif bağlantı adresi sayısı.
MaxConnectionsOpens SQL_PERF_START sonra açılan maksimum eşzamanlı bağlantı tutamaçları.
SumConnectionsOpens SQL_PERF_START sonra açılan bağlantı kollarının sayısının toplamı.
SumConnectionTime SQL_PERF_START sonra tüm bağlantıların açıldığı sürenin toplamı. Örneğin, bir uygulama 10 bağlantı açıp her bağlantıyı 5 saniye sürdürseyse, SumConnectionTime 50 saniye olurdu.
AvgTimeOpened Eşittir SumConnectionsOpened/SumConnectionTime.
Ağ İstatistikleri:
ServerRndTrips Sürücünün sunucuya komut gönderip cevap aldığı sayısı.
BuffersSent SQL_PERF_START sonra sürücü tarafından SQL Server'ye gönderilen Tablolu Veri Akışı (TDS) paket sayısı. Büyük komutlar birden fazla tampon alabilir, yani sunucuya büyük bir komut gönderilir ve altı paket doldurursa, ServerRndTrips bir, BuffersSent ise altı paket artar.
BuffersRec Uygulama sürücüyü kullanmaya başladıktan sonra sürücünün SQL Server'dan aldığı TDS paket sayısı.
Bayt Sayısı Uygulama sürücüyü kullanmaya başladıktan sonra TDS paketlerinde SQL Server'a gönderilen bayt veri sayısı.
BytesRec Uygulama sürücüyü kullanmaya başladıktan sonra sürücünün SQL Server'dan aldığı TDS paketlerindeki bayt veri sayısı.

Zaman İstatistikleri

SQLPERF Alanı Description
msExecutionTime Sürücünün SQL_PERF_START sonra işlem için harcadığı kümülatif süre, sunucudan yanıt bekleme süresi dahil.
msNetworkServerTime Sürücünün sunucudan yanıt beklemek için harcadığı toplam süre.