Profilace výkonu ovladače ODBC

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformní systém (PDW)

Important

SQL Server Native Client (SNAC) není dodáván s:

  • SQL Server 2022 (16.x) a novější verze
  • SQL Server Management Studio 19 a novější verze

Pro vývoj nových aplikací se nedoporučuje nativní klient SQL Serveru (SQLNCLI nebo SQLNCLI11) a starší zprostředkovatel Microsoft OLE DB pro SQL Server (SQLOLEDB).

Pro nové projekty použijte jeden z následujících ovladačů:

Informace o SQLNCLI, které se dodává jako součást databázového stroje SQL Serveru (verze 2012 až 2019), naleznete v tomto support lifecycle exception.

Nativní klientský ODBC ovladač SQL Server může profilovat dva typy výkonových dat:

  • Dlouhodobé dotazy.

    Ovladač může zapsat do logovacího souboru jakýkoli dotaz, na který server nedostane odpověď v daném časovém limitu. Programátoři aplikací nebo správci databází pak mohou prozkoumat každý zaznamenaný SQL příkaz, aby zjistili, jak mohou zlepšit jeho výkon.

  • Data o výkonu ovladačů.

    Ovladač může zaznamenávat statistiky výkonu a buď je zapisovat do souboru, nebo je zpřístupnit aplikaci prostřednictvím specifické datové struktury nazvané SQLPERF. Soubor obsahující statistiky výkonu je soubor oddělený tabulátory, který lze snadno analyzovat pomocí jakéhokoli tabulkového procesoru podporujícího soubory oddělené tabulátory, například Microsoft Excel.

Oba typy profilování lze zapnout tím, že:

  • Připojení ke zdroji dat, který specifikuje logování.

  • Volání SQLSetConnectAttr pro nastavení specifických atributů pro ovladače, které řídí profilování.

Každý aplikační proces získá vlastní kopii ovladače SQL Server Native Client ODBC a profilování je globální pro kombinaci kopie ovladače a aplikačního procesu. Když cokoli v aplikaci zapne profilování, profilování zaznamenává informace o všech aktivních spojení v ovladači z dané aplikace. Dokonce i kontakty, které výslovně nevyžadovaly profilování, jsou zahrnuty.

Poté, co ovladač otevře profilovací log (buď výkonnostní data, nebo dlouhodobě běžící dotazovací log), nezavírá log, dokud ovladač není odblokován správcem ovladačů ODBC, kdy aplikace uvolní veškeré prostředí, které v ovladači zvládne. Pokud aplikace otevře nový environmentální handle, načte se nová kopie ovladače. Pokud se aplikace pak připojí k datovému zdroji, který specifikuje stejný logovací soubor, nebo nastaví specifické atributy ovladače tak, aby se logovaly do stejného souboru, ovladač přepíše starý log.

Pokud aplikace začne profilovat do logovacího souboru a druhá aplikace se pokusí profilovat do stejného logovacího souboru, druhá aplikace není schopna zaznamenat žádná profilovací data. Pokud druhá aplikace začne profilovat poté, co první aplikace odpojí svůj ovladač, druhá aplikace přepíše logovací soubor z první aplikace.

Pokud se aplikace připojí ke zdroji dat, který má profilování zapnuté, ovladač vrátí SQL_ERROR pokud aplikace volá SQLSetConnectOption a začne logování. Volání do SQLGetDiagRec pak vrátí následující:

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

Ovladač přestane sbírat výkonnostní data, když je uzavřena environmentální rukojeť. Pokud má aplikace SQL Server Native Client více připojení, z nichž každé má svůj vlastní environmentální handle, ovladač přestane sbírat výkonnostní data, jakmile jsou některé z přidružených prostředí uzavřeny.

Data o výkonu ovladače mohou být buď uložena v datové struktuře SQLPERF, nebo zaznamenána v souboru odděleném tabulátory. Data zahrnují následující kategorie statistik:

  • Profil aplikace

  • Připojení

  • Network

  • Time

V následující tabulce se popisy polí v datové struktuře SQLPERF vztahují také na statistiky zaznamenané v souboru výkonnostního logu.

Statistiky profilu aplikace

Pole SQLPERF Description
TimerResolution Minimální rozlišení doby hodin serveru v milisekundách. Obvykle se uvádí jako 0 (nula) a mělo by se zohledňovat pouze tehdy, pokud je uvedené číslo velké. Pokud je minimální rozlišení serverových hodin větší než pravděpodobný interval některých statistik založených na časovači, mohou být tyto statistiky navýšeny.
SQLidu Počet INSERT, DELETE, nebo UPDATE výroků po SQL_PERF_START.
SQLiduRows Počet INSERT, DELETE, nebo UPDATE výroků po SQL_PERF_START.
SQLSelects Počet zpracovaných SELECT příkazů po SQL_PERF_START.
SQLSelectRows Počet řádků vybraných po SQL_PERF_START.
Transakce Počet transakcí uživatelů po SQL_PERF_START, včetně rollbacků. Když aplikace ODBC běží s SQL_AUTOCOMMIT_ON, každý příkaz je považován za transakci.
SQLPrepares Počet volání funkcí SQLPrepare po SQL_PERF_START.
ExecDirects Počet volání SQLExecDirect po SQL_PERF_START.
SQLExecutes Počet volání SQLExecute po SQL_PERF_START.
CursorOpens Kolikrát ovladač po SQL_PERF_START otevřel kurzor serveru.
CursorSize Počet řádků ve výsledkových sadách otevřených kurzory po SQL_PERF_START.
CursorUsed Počet řádků skutečně získaných driverem z kurzorů po SQL_PERF_START.
PercentCursorUsed Rovná se CursorUsed/CursorSize. Například pokud aplikace způsobí, že ovladač otevře kurzor serveru pro "SELECT COUNT(*) FROM Authors", bude v sadě výsledků pro příkaz SELECT 23 řádků. Pokud aplikace pak načte pouze tři z těchto řádků, CursorUsed/CursorSize je 3/23, takže PercentCursorUsed je 13,043478.
AvgFetchTime Equals SQLFetchTime/SQLFetchCount.
AvgCursorSize Rovná se CursorSize/CursorOpens.
AvgCursorUsed Rovná se CursorUsed/CursorOpens.
SQLFetchTime Souhrnná doba, kterou trvalo dokončit načítání kurzorů serveru.
SQLFetchCount Počet načítání provedených proti kurzorům serveru po SQL_PERF_START.
CurrentStmtCount Počet příkazových rukojetí, které jsou aktuálně otevřené na všech spojení v ovladači.
MaxOpenStmt Maximální počet současně otevřených výpisů po SQL_PERF_START.
SumOpenStmt Počet rukojetí výpisů, které byly otevřeny po SQL_PERF_START.
Statistiky spojení:
CurrentConnectionCount Aktuální počet aktivních připojení má aplikace otevřená na serveru.
MaxConnectionsOtevřeno Maximální počet současných spojovacích rukojetí se otevřel po SQL_PERF_START.
SumConnectionsOtevřeno Součet počtu kontaktních rukojetí, které byly otevřeny po SQL_PERF_START.
SumConnectionTime Součet času, po kterém jsou všechna připojení otevřena po SQL_PERF_START. Například pokud aplikace otevře 10 spojení a udrží každé spojení po dobu 5 sekund, pak SumConnectionTime bude 50 sekund.
AvgTimeOtevřeno Rovná se SumConnectionsOpen/ SumConnectionTime.
Statistiky sítě:
ServerRndTrips Kolikrát ovladač poslal příkazy serveru a dostal odpověď.
BuffersSent Počet paketů Tabulárního datového toku (TDS), které ovladač po SQL_PERF_START odesílal SQL Server. Velké příkazy mohou přijímat více bufferů, takže pokud je serveru odeslán velký příkaz a naplní šest paketů, ServerRndTrips se zvýší o jeden a BuffersSent o šest.
BuffersRec Počet TDS paketů, které ovladač obdržel od SQL Server poté, co aplikace začala ovladač používat.
BytesSent Počet bajtů dat odeslaných SQL Server v TDS paketech poté, co aplikace začala používat ovladač.
BytesRec Počet bajtů dat v TDS paketech, které ovladač obdržel od SQL Server poté, co aplikace začala ovladač používat.

Časová statistika

SQLPERF pole Description
msExecutionTime Kumulativní doba, kterou ovladač strávil zpracováním po SQL_PERF_START, včetně doby čekání na odpovědi ze serveru.
msNetworkServerTime Kumulativní doba, kterou driver strávil čekáním na odpovědi od serveru.

Viz také

Nativní klient SQL Serveru (ODBC)
Profilace témat s postupy k výkonu ovladačů ODBC (ODBC)