分析 ODBC 驅動程式效能
適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)
重要
SQL Server Native Client (SNAC) 未隨附:
- SQL Server 2022 (16.x) 及更新版本
- SQL Server Management Studio 19 與更新版本
不建議使用 SQL Server Native Client (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 進行新的應用開發。
針對新專案,請使用下列其中一個驅動程式:
針對 SQL Server 資料庫引擎 (2012 到 2019 版) 的隨附元件 SQLNCLI,請參閱支援生命週期例外狀況。
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 | 驅動程式等候伺服器回復所花費的累計時間。 |