Leo Yeh's Blog

SAS 效能優化 (1)

教學目標

初步了解 SAS 系統效能優化的基本概念。

重要概念

首先 SAS 程式碼提供使用者有許多選擇存取、操作、分析和處理資料與結果,然而系統效能可能會大大影響應用程式的行為,因此我們應該在應用程式開發過程的早期設計階段了解客戶的期望,以利提供更高效能的應用程式。但是往往在專案系統開始上線前導入正式資料時,將會發現應用程式處理的效率和效能需要進行改善,主要可以針對效能統計和系統效能進行改善。所謂效能統計主要是使用於處理 DATA STEP 和 PROC STEP 的總輸入和輸出的操作、記憶體和 CPU 時間測量,我們將能夠透過 SAS 系統選項獲取統計資訊,以利協助我們衡量工作的初始效能,並且確定如何改善效能。所謂系統效能主要是使用於處理 SAS 程式的總輸入和輸出的操作、記憶體和 CPU 時間測量,我們將會重新分配關鍵資源的使用,以利改善系統效能,並且選擇最適合特定情況的技術進行優化,此外我們針對效率和效能的改善的策略,分別為:

  1. 資料儲存
  2. I/O
  3. 記憶體
  4. CPU 時間
  5. 使用時間

其中 CPU 時間和使用時間主要是測量的基準,然而透過遵循準則將能夠有效提升應用程式處理的效率和效能。一般來說,透過簡單的策略將能夠改善多達 90% 的效率,但是最後的 10% 往往將會是個挑戰,此時我們則需要進行判斷,以利確保應用程式達到相對最佳的效率,同時維持時間和成本之間的平衡。

接著我們針對五大改善的策略有哪些關鍵的技術重點呢?針對資料儲存技術主要使用資料壓縮策略,以利降低儲存資料集的儲存空間,以及使用 KEEP 或 DROP 資料集選項保留需要的變數。 針對 I/O 技術主要是考慮使用大量資料集的資料壓縮,以及建立索引資料集,以利改善資料集的存取。針對記憶體技術主要使用在記憶體中執行 DATA STEP 建立雜湊物件,以利透過可用的記憶體和記憶體速度進行改善,以及使用 MEMSIZE 系統選項控制記憶體的使用情況。針對 CPU 技術主要是在 DATA STEP 中使用 IF-THEN/ELSE 或 SELECT-WHEN/OTHERWISE 指令,或者在 PROC SQL 中使用 CASE 條件表達式處理資料,以及使用 SASFILE 敘述式在多個時間處理相同的資料,以利降低 CPU 時間和使用時間。

再來我們若要優化系統效能除了針對資料儲存透過資料壓縮的 COMPRESS 系統選項降低儲存資料集的儲存空間,並且透過 Cleanwork 工具搭配工作排程器定期清理 SAS WORK 暫存資料夾改善效能之外。我們更能夠針對 I/O 、記憶體和 CPU 效能透過系統選項的設定進行優化。

最後我們可以使用 Windows 內建的效能監控工具進行 SAS 程式處理資料時的效能監控,我們僅需要在執行對話框中輸入「perfmon」就能夠開啟效能監控工具。此時效能監控工具將會立即收集並且顯示有關所選計數器的資訊,並且我們能夠監控多個 SAS 程式相關的計數器,主要包括八個與 SAS 程式相關的計數器,分別為:

  1. Virtual Alloc’ed Memory:虛擬記憶體總配置量。
  2. Disk ReadFile Bytes Read Total:讀取硬碟檔案的總位元數。
  3. Disk ReadFile Bytes Read/Sec:每秒讀取硬碟檔案的位元數。
  4. Disk WriteFile Bytes Written Total:寫入硬碟檔案的總位元數。
  5. Disk WriteFile Bytes Written/Sec:每秒寫入硬碟檔案的位元數。
  6. Disk SetFilePointer/Sec:成功使用硬碟檔案的次數。
  7. Memlib/Memcache Current Usage K:以位元組為單位指定目前正在使用擴展記憶體數量。
  8. Memlib/Memcache Peak Usage K:以位元組為單位指定目前最大使用擴展記憶體數量。

其中每個受監控的實體皆是獨立的 SAS 程序,同時以 PID 編號的方式進行識別,當然我們也能夠透過工作管理員處理所有程序的列表。此外我們還能夠在 Process 計數器中 %Processor Time、%User Time、%Privileged Time、…等 CPU 處理相關測量參數進行報表設定。

總結 SAS 系統效能優化我們能夠從資料儲存、I/O、記憶體、 CPU 時間和使用時間五大策略開始規劃進行 SAS 系統效能優化的改善,同時使用 Windows 內建的效能監控工具進行 SAS 程式處理資料時的系統效能監控,以利找出瓶頸點持續進行效率與效能的改善。

相關資源

⬅️ Go back