• 沒有找到結果。

第二章 文獻探討

第六節 效能評估的方法

在本節中並不說明如何效能調教,而是介紹效能評估的方法。一個查詢需要 的 CPU、IO 資源越多,查詢執行的速度就越慢。因此,調教效能的方式除了以 一種使用更少的 CPU、IO 資源的方式重寫查詢命令,另一種方式就是調教資料 庫綱要。調教效能的目的是盡可能的耗費更少的伺服器資源,而不單單只是查詢 耗費時間最短,尚需考慮磁碟 I/O 成本,尤其是在資源利用不斷變化的伺服器上 更是如此。

一 般 而 言 評 估 資 料 庫 效 能 有 兩 大 指 標 , 一 為 查 詢 耗 費 的 時 間 (Elapsed Time);另一為磁碟 I/O 成本(Disk I/O Cost)。本研究是採用 Microsoft SQL Server 2005 做 為 不 同 綱 要 設 計 的 實 驗 測 試 平 台 , 在 此 資 料 庫 管 理 系 統 (Database Management System 縮寫為 DBMS)中提供兩個指令可以觀察上述兩大指標以用 於效能評估,這兩個指令分別為 SET STATISTICS IO ON 以及 SET STATISTICS TIME ON。

通常在 DBMS 中有 buffer(或稱 cache)的設計,目的是儲存先前的已經執行

過的查詢計畫,若下一次又再執行相同的查詢時可以不需要再從磁碟拿取,故可 以提昇整體效能。但本研究的評估基準是必須在 buffer 沒有預先儲存查詢計畫的 條 件 下 才 能 成 立 , 故 在 執 行 上 述 兩 個 指 令 之 前 必 須 先 執 行 DBCC DROPCLEANBUFFERS 以及 DBCC FREEPROCCACHE,這二條指令將清空 SQL Server 的 buffer,這樣才能夠使每次執行查詢時能在同一個基準點上,否則每次 執行查詢得到的結果就不具有可比較性了(Chen S., 2004)。

Transact-SQL 命令範例如下:

DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS SET STATISTICS IO ON SET STATISTICS TIME ON

{ … … }

{ Query Commands }

{ … … }

SET STATISTICS TIME OFF SET STATISTICS IO OFF 執行結果:

DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請連絡您的系統管理員。

DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請連絡您的系統管理員。

---0.11811023622047244 (query result sets) (1 個資料列受到影響)

資料表 'TestResult'。掃描計數 4,邏輯讀取 3462,實體讀取 57,讀取前讀取 37。…○2 (Table 'TestResult'. Scan count 4, logical reads 3462, physical reads 57, read-ahead reads 37) SQL Server 執行次數(SQL Server Execution Times):

CPU 時間 = 0 ms,經過時間 = 250 ms。(CPU time = 0 ms, elapsed time = 250 ms. ) …○1

1 為 SET STATISTICS TIME ON 的效果。

表示執行此次查詢耗費多少 CPU 執行時間和執行查詢時使用多少時間 (elapsed time)。CPU 執行時間是對執行查詢所需要 CPU 資源的一種相對穩定的 測量方法,與 CPU 的忙閒程度沒有關係。但是,每次執行查詢時這個數字也會 有所不同,只是變化的範圍沒有總時間變化大。經過時間是執行查詢所需要的時 間(不計算阻塞或讀數據的時間),由於伺服器上的負載(loading)是不斷在變化 的,因此這一數據的變化範圍有時會相當地大。

2 是 SET STATISTICS IO ON 的效果 1. Scan Count

在查詢中涉及到的資料表被查訪的次數。在本範例中,其中 TestResult 資料 表被查訪了 4 次,本查詢命令的範例包括 join,故此一資訊是十分有用的,值越 小代表效能越好。

2. Logical Reads

邏輯讀取,此項目是提供最有用的資訊。在 SQL Server 對任何資料進行運 作前,首先必須把資料讀取到 buffer 中。此外,SQL Server 會從 buffer 中讀取資 料,並把資料讀取到大小為 8K 位元組的頁(page)中。而邏輯讀取乃是指 SQL Server 為得到查詢中的結果而必須從 buffer 讀取的頁數。在執行查詢時,SQL Server 不會讀取比實際需求多或少的資料,因此,當在相同的資料集上執行同一 個查詢,得到的邏輯讀取的數字總是相同的(偶而會不同但差異很小)。所以如果 邏輯讀取值下降,那麼就表示查詢時所使用的伺服器資源減少,效能就有所提 高;反之則效能減低。故在其他條件不變的情況下,查詢所使用的邏輯讀取越少,

其效能就越好速度就越快。

3. Physical Reads

實體讀取。在 SQL Server 開始執行查詢前,首先它要作的就是檢查所需要

的資料是否存在 buffer 中,如果在就從中讀取,如果不在 SQL Server 就會先將 所需要的資料從磁碟讀到 buffer 中。不難想像 SQL Server 在執行實體讀取時比 執行邏輯讀取需要更多的伺服器資源。因此,在理想情況下應當儘量避免實體讀 取操作。值越小表示效能越好;反之則越差。

4. Read-Ahead Reads

讀取前讀取。表示 SQL Server 在執行預讀機制時讀取的實體頁。為了最佳 化性能,SQL Server 在認為它需要的資料之前預先讀取一部分資料,根據 SQL Server 對資料需求預測的準確程度,預讀的資料頁可能有用,也可能沒用。值越 小表示效能越好;反之則越差。

表 2- 7 I/O 輸出項目摘要

Output Item Meaning

Scan Count Number of index or table scans performed.

Logical Reads Number of pages read from the data cache.

Physical Reads Number of pages read from disk.

Read-Ahead Reads Number of pages placed into the cache for the query.

(資料來源 MSDN Library, 2009)

相關文件