分析 ODBC 驅動程式效能

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

重要

SQL Server Native Client (通常縮寫為 SNAC) 已從 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中移除。 不建議使用 SQL Server Native Client (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 開發新的應用程式。 往後請改用新的 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server 或最新的 Microsoft ODBC Driver for SQL Server。 如需 SQL Server 資料庫引擎元件隨附的 SQLNCLI(版本 2012 到 2019),請參閱此 支援生命週期例外狀況

SQL Server Native Client ODBC 驅動程式可以分析兩種類型的效能資料:

  • 長時間執行的查詢。

    驅動程式可以寫入記錄檔中,任何未在指定時間內從伺服器取得回應的查詢。 然後,應用程式程式設計人員或資料庫管理員可以研究每個記錄的 SQL 語句,以判斷它們如何改善其效能。

  • 驅動程式效能資料。

    驅動程式可以記錄效能統計資料,並將其寫入檔案,或透過名為 SQLPERF 的驅動程式特定資料結構提供給應用程式使用。 包含效能統計資料的檔案是一個以定位字元分隔的檔案,可使用任何支援 Tab 分隔檔案的試算表輕鬆分析,例如 Microsoft Excel。

您可以透過下列方式開啟任一類型的程式碼剖析:

  • 連接到指定記錄的資料來源。

  • 呼叫 SQLSetConnectAttr 以設定控制程式代碼剖析的驅動程式特定屬性。

每個應用程式進程都會取得自己的 SQL Server Native Client ODBC 驅動程式複本,而且分析是驅動程式複本與應用程式程式組合的全域。 當應用程式中的任何專案開啟分析時,分析會記錄來自該應用程式之驅動程式中所有作用中連線的資訊。 甚至未特別呼叫分析的連接也包含在內。

在驅動程式開啟分析記錄檔(效能資料或長時間執行的查詢記錄檔)之後,它不會關閉記錄檔,直到 ODBC 驅動程式管理員卸載驅動程式為止,當應用程式釋放驅動程式中開啟的所有環境控制碼為止。 如果應用程式開啟新的環境控制碼,則會載入驅動程式的新複本。 如果應用程式接著連接到指定相同記錄檔的資料來源,或將驅動程式特定的屬性設定為記錄至相同的檔案,驅動程式就會覆寫舊的記錄檔。

如果應用程式開始對記錄檔進行分析,而第二個應用程式嘗試開始對相同的記錄檔進行分析,第二個應用程式就無法記錄任何分析資料。 如果第二個應用程式在第一個應用程式卸載其驅動程式之後開始分析,第二個應用程式會從第一個應用程式覆寫記錄檔。

如果應用程式連線到已啟用分析的資料來源,則如果應用程式呼叫 SQLSetConnectOption 以開始記錄,驅動程式會傳回SQL_ERROR。 接著, 呼叫 SQLGetDiagRec 會傳回下列內容:

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

當環境控制碼關閉時,驅動程式會停止收集效能資料。 如果 SQL Server Native Client 應用程式有多個連線,每個連接都有自己的環境控制碼,則驅動程式會在關閉任何相關聯的環境控制碼時停止收集效能資料。

驅動程式的效能資料可以儲存在 SQLPERF 資料結構中,或記錄在索引標籤分隔的檔案中。 資料包括下列統計資料類別:

  • 應用程式佈建檔

  • 連線

  • 網路

  • Time

在下表中,SQLPERF 資料結構中欄位的描述也適用于效能記錄檔中記錄的統計資料。

應用程式佈建檔統計資料

SQLPERF 欄位 描述
TimerResolution 伺服器時鐘時間的最小解析度,以毫秒為單位。 這通常報告為 0(零),只有在報告的數位很大時,才應該考慮。 如果伺服器時鐘的最小解析度大於某些計時器型統計資料的可能間隔,這些統計資料可能會擴大。
SQLidu SQL_PERF_START之後的 INSERT、DELETE 或 UPDATE 語句數目。
SQLiduRows SQL_PERF_START之後的 INSERT、DELETE 或 UPDATE 語句數目。
SQLSelects SQL_PERF_START之後處理的 SELECT 語句數目。
SQLSelectRows SQL_PERF_START之後選取的資料列數目。
交易 SQL_PERF_START之後的使用者交易數目,包括復原。 當 ODBC 應用程式以 SQL_AUTOCOMMIT_ON 執行時,每個命令都會被視為交易。
SQLPrepares SQL_PERF_START之後的 SQLPrepare 函 式呼叫數目。
ExecDirects SQL_PERF_START之後的 SQLExecDirect 呼叫數目。
SQLExecutes SQL_PERF_START之後的 SQLExecute 呼叫數目。
CursorOpens 驅動程式在SQL_PERF_START之後開啟伺服器資料指標的次數。
CursorSize SQL_PERF_START之後,資料指標所開啟的結果集中資料列數目。
CursorUsed 在SQL_PERF_START之後,實際從資料指標擷取的資料列數目。
PercentCursorUsed 等於 CursorUsed/CursorSize。 例如,如果應用程式導致驅動程式開啟伺服器資料指標來執行 「SELECT COUNT\ FROM Authors」,23 個數據列將會在 SELECT 語句的結果集中。 如果應用程式接著只擷取其中三個數據列,CursorUsed/CursorSize 為 3/23,因此 PercentCursorUsed 為 13.043478。
AvgFetchTime 等於 SQLFetchTime/SQLFetchCount。
AvgCursorSize 等於 CursorSize/CursorOpens。
AvgCursorUsed 等於 CursorUsed/CursorOpens。
SQLFetchTime 針對伺服器資料指標擷取完成所花費的累計時間量。
SQLFetchCount 在SQL_PERF_START之後,針對伺服器資料指標進行的擷取數目。
CurrentStmtCount 目前在驅動程式中開啟的所有連接上開啟的語句控制碼數目。
MaxOpenStmt SQL_PERF_START之後,並行開啟的語句控制碼數目上限。
SumOpenStmt SQL_PERF_START之後開啟的語句控制碼數目。
連線統計資料:
CurrentConnectionCount 應用程式目前開啟的伺服器使用中連接控制碼數目。
MaxConnectionsOpened SQL_PERF_START之後開啟的並行連接控制碼數目上限。
SumConnectionsOpened SQL_PERF_START之後開啟的連接控制碼數目總和。
SumConnectionTime SQL_PERF_START之後開啟所有連線的時間總和。 例如,如果應用程式開啟 10 個連線並維護每個連線 5 秒,則 SumConnectionTime 會是 50 秒。
AvgTimeOpened Equals SumConnectionsOpened/ SumConnectionTime。
網路統計資料:
ServerRndTrips 驅動程式將命令傳送至伺服器並取得回復的次數。
BuffersSent 驅動程式在SQL_PERF_START之後傳送至 SQL Server 的表格式資料流程 (TDS) 封包數目。 大型命令可以接受多個緩衝區,因此,如果大型命令傳送到伺服器並填滿六個封包,ServerRndTrips 就會遞增一個,而 BuffersSent 會遞增六個。
BuffersRec 在應用程式開始使用驅動程式之後,驅動程式從 SQL Server 接收的 TDS 封包數目。
BytesSent 在應用程式開始使用驅動程式之後,在 TDS 封包中傳送至 SQL Server 的資料位元組數。
BytesRec 在應用程式開始使用驅動程式之後,驅動程式從 SQL Server 接收之 TDS 封包中的資料位元組數目。

時間統計資料

SQLPERF 欄位 描述
msExecutionTime 驅動程式在處理SQL_PERF_START之後所花費的累計時間,包括等候伺服器回復的時間。
msNetworkServerTime 驅動程式等候伺服器回復所花費的累計時間。

另請參閱

SQL Server Native Client (ODBC)
分析 ODBC 驅動程式效能操作說明主題 (ODBC)