2014年1月8日 星期三

疑難排除與效能調整

Troubleshooting SSIS Package

Design-Time 除錯

Breakpoints

我們常會在程式碼除錯時使用中斷點技巧,在 package 中也可以使用中斷點,不過它只可以用在 control-flow。 若你對某個 task 設定中斷,控制流程就會在這個工作暫停。

1. Edit Breakpoint

你可以在控制流程中的工作上設定中斷點。

2. Setting Breakpoint

封裝的中斷不像程式碼可以明確指定在第幾行中斷,它是利用執行工作的事件處理來引發中斷。 同時,你還可以利用叫用計數類型,來加強設定中斷條件。

  • 叫用計數類型(Hit Count Type):用來設定引發中斷條件類型
  • 叫用計數(Hit Count):設定引發中斷條件的計數

3. Breakpoint (a red dot)

Troubleshoot on Task paused

當中斷發生時,你可以使用以下功能進行除錯。

1. 查看區域變數。

上圖中,當紅點中有個黃色箭號,表示工作已被中斷,此時你可以開啟區域變數視窗觀查變數值的變化。 例如,你可以設定事件 OnPreExecution 和 OnPostExecution 要發生中斷,觀查變數值的變化。

2. 修改區域變數。

你也可以在此時修改區域變數。

3. 查看堆疊(stack)。

你可以透過堆疊視窗中的資訊,查看在中斷點之前,哪些工作已經執行過了。

4. 停止或繼續。

Using Data Viewers in the Data Flow

Breakpoints 用來中斷 Control-Flow 中的 Task ,如果你想要檢視 Data-Flow 中資料列的處理狀況,那麼就必須使用 Data Viewer

1.執行路徑(path)的右鍵選單中「編輯」。

在「資料檢視」頁籤中設定你要檢視的欄位,並勾選「啟用資料檢視器」項目。

有設定「資料檢視」的路徑狀態

2.你也可以直接在路徑(path)的右鍵選單中執行「啟用資料檢視器」。

這功能預設會直接勾選所有資料欄位

3. 當資料流執行到你設定的路徑中時,就會跳出一個Grid視窗,列出目前資料流中的資料。

4. 停用、啟用、刪除資料檢視器或中斷點。

你可以停用中斷,若一個個停用太慢,也可以全部停用或刪除。

如果選擇全部停用或刪除,包含控制流程中的中斷點,或者資料流程中的資料檢視器,都會一起停用或刪除。

Using Other Methods for Debugging

下列幾個除錯技巧也可以用在設計階段:

使用錯誤輸出(error outputs)

在 Data-Flow 中的每個元件,都會有一個 error flow ,你可以由這個輸出檢視哪些失敗的資料。

使用訊息視窗

在 Controol-Flow 中,你可以利用 Script Task 來顯示訊息視窗。

在 Data-Flow 中,你可以利用 Script Component 來顯示訊息視窗。

使用較少量的資料做測試

偵錯時,你可以使用 Percentage Sampling TransformationRow Sampling Transformation 來取得範本資料。

捕捉已處理資料筆數

你可以利用 Row Count Transformation 補捉資料來源的筆數,與最後寫入資料目的地的筆數做比對,驗證資料筆數是否符合。

Production-Time 除錯

Using the SSISDB Catalog

執行階段的除錯,除了透過 logging 方式外,在 SSIS 2012 中,最重要的新功能就是 SSISDB Catalog。 SSISDB Catalog 是一個中央儲存區,可用來管理所有的專案、封裝、參數、環境變數, 在封裝的執行過程中,它也可以自動記錄下這些過程。

SSISDB Catalog 預設的記錄層次為[基本],你可以在[目錄屬性]視窗中將預設記錄層次更改為「詳細資訊(Verbose)」,以記錄更多的資訊。

Logging levels

  • None: 關閉記錄功能。 只記錄封裝執行狀態。
  • Basic: 此為預設值。記錄所有事件,自訂和診斷事件除外。
  • Performance: 只記錄效能統計資料,以及 OnError 和 OnWarning 事件。
  • Verbose: 記錄所有事件,包括自訂和診斷事件。 會將過程中的每個步驟都詳記紀錄產生一筆資料,可透過 catalog.execution_data_statistics 檢視顯示。

同時 SSISDB Catalog 上面也有許多事先定義好的報表,你可以使用這些報表來查詢封裝的執行資訊。

點選上圖中的[概觀],還可進一步查看詳細資料。

或者,你可以使用 SSISDB 資料庫中的目錄檢視(catalog views),透過 TSQL 方式來查詢封裝的執行資訊。

select 
	execution_id, folder_name, project_name, environment_name, 
	executed_as_name, created_time, status, start_time, end_time, 
	caller_name, server_name
from 
	catalog.executions

Using Data Taps

前面提到過,在 Design-Time 時,你可以使用「資料檢視器」(Data Viewer)來查看資料流中的資料, 可是如果在 Production-Time 時,這個功能自然無法使用,這時你就可以使用 SQL 2012 提供的新功能:「Data Taps(資料竊聽器)」。 它功能就類似「資料檢視器」,你可以設定流過某個元件的資料,自動轉出成為逗號分割的檔案。

PS. Data Flow Taps 在 MSDN 中翻譯成「資料流程點選」。

要啟用 Data Taps ,必須先執行位於 SSISDB 資料庫中的下列預存程序:

  1. 使用 catalog.create_execution 建立封裝的執行個體。
  2. 使用 catalog.add_data_tap 加入 taps 。
  3. 使用 catalog.start_execution 執行封裝。
  4. 最後再利用 catalog.executions 可取得封裝執行狀況。

catalog.add_data_tap 的幾個參數:

  • @execution_id :裝執行id
  • @task_package_path :這個是封裝中,Data Flow Task 的路徑。

  • @dataflow_path_id_string :這個在 Data Flow 中你要竊聽的那個路徑的識別。

  • @data_filename :輸出檔案名稱。預設會儲存在 DataDumps 資料夾 (C:\Program Files\Microsoft SQL Server\110\DTS\DataDumps)

PS.這個例子執行不會成功,那個 dataflow_path_id_string 參數過不了,感覺是中文版的問題。

Performance Tuning

SSIS Data Flow Engine

Data Flow Tuning Options

Parallel Execution in SSIS

Troubleshooting and Benchmarking Performance

沒有留言:

張貼留言