##EasyReadMore##

2009年3月6日 星期五

AS ABAP Process

Work Process處理概觀

Dispatcher分配資源給REQUEST,就是分配requests給work process,work process並不專屬於哪個人,有可能一次的動作就換很多procsess幫你服務,Buffer的作用是提升處理 USER的 request的速度,常用的資料被放在這以供work process讀取,每個instance都有自己的buffer.image

 

work process執行每個應用程式的流程邏輯,除了internal memory外,work process還有task handler協調work process,software processor還有database interface的動作

當動態程式處理器在執行應用程式螢幕流邏輯的時候,他會呼叫流程邏輯模組,並將要處理的資料交給他,以上的動作在SAP系統中,就是ABAP應用程式執行ABAP直譯器,screen processor會告訴ABAP processor要執行哪個子程式.

而被dispatcher選上的dialog work process會去執行 roll-in使用者資料的動作,包括現在執行的程式資料及字元,然後work process會開始執行使用者的request,會去資料庫或BUFFER撈資料,一旦work process將需求處理完,會將資料再roll out回去給shared memory.接著可以再接受新的request進來.

Work Process架構

image

AS ABAP的Database Interface

利用SAP的ABAP語言,可以使用ABAP OPEN SQL語言去存取資料庫,無論使用何種資料庫,DATABASE INTERFACE是每個WORK PROCESS的一部份,會將OPEN SQL翻譯成相對應的SQL語言給不同的資料庫使用,以達到資料庫獨立的意義(不必因不同的資料庫使用不同的語言).

image

當直譯OPEN SQL的語言時,資料庫介面會去檢查syntax並確保在shared memory的SAP BUFFER的最佳可用性.

以下這張圖是在說明dialog work process的多工

一個工作可能會切換很多work process幫你服務

image

Lock Management

為了確保資料的一致性,必須確保一筆資料同時只有一個人可以存取,SAP利用Enquque work process來實做這部份,SAP的程式存取資料時,會在Lock table中建立該資料的lock entries,Lock entries只能在這筆資料不在lock table上時才能製作,Enquque work process管理transaction的logical lock,lock table是存在於該instance的memory中

Note: 如果一個instance的記憶體包涵了lock table,這台機器也叫Enqueue server.

如果使用者想要改一筆資料,正在幫他服務的dialog work process會要求lock這筆資料

如果這個要求enqueue server通過了,dialog work process可以直接存取lock table,他會檢查是否可以產生新的lock,寫到lock table後,使用者會被給予一個lock key.

Lock key會被存在user context中(shared memory中),若dialog work process正在執行使用者的要求而同一instance的enqueue work process也沒有在忙,這兩個work process就會透過message server互相溝通,在這個圖中,lock request從dialog work process透過dispatcher和message server送給enqueue work process,enqueue work process會去檢查lock table中是否已經有這筆lock entries,如果沒有就會建立此一lock entries,lock key就會透過dispatcher和 message server傳給dialog work process.

image

image

應用程式的開發人員可以選擇以下兩種lock模式

寫入lock (lock mode Exclusive)

     被鎖定的資料只能被一個user編輯,所以另外的寫入要求和讀取要求都會被拒絕,也就是任何別人的動作都會被拒絕

讀取lock(lock mode Shared)

    其他人可以read但是不能寫入

加強式的寫入lock (lock mode eXclusive noncumulative)

    當寫入鎖定被同一transaction要求後,只能被要求一次,其餘都會被拒絕

最佳化lock (lock mode Optimistic)

    可以依據使用者當下的行為改變鎖定模式

Tcode SM12可以看目前有哪些東西被鎖住

要解開一個被鎖定的物件,除非原使用者離開那個tcode,不然就要用手動方式解除

注意:要解除前要先用SM04檢查設定LOCK的使用者是否還繼續登入在此系統

Update

在SAP系統中,一個商業流程會被對照到SAP的Tcode,其中包涵了許多螢幕畫面的切換(舉例來說,建立訂單),資料的更改會影響到一個流程是否完整的完成,如果這個動作中途中斷或是錯誤產生,就有可能資料沒寫到資料庫裡,SAP的Update系統就是為了確保寫入有正確執行

Update work process是以非同步的方式更新資料

資料會被先暫存在dialog process,再傳給update work process去更新資料庫的資料,因為是非同步的動作,所以dialog work process不用等update work process完成,

Dialog的部份要等到COMMIT WORK的指令下了才算完成,接著更新的步驟就會開始,UPDATE SERVER會傳送更新的請求給UPDATE WORK PROCESS,這裡每個DIALOG的步驟都會和資料庫的transaction互相對應

image

如果使用者想要更改一筆資料,SAP的transaction會呼叫相關的transaction,之後會初始化update work process以儲存該筆資料,有以下步驟:

1. 程式會先鎖定資料(Enqueue work process),將鎖定的資料寫到lock table

2. 傳送lock key給使用者,程式會讀取資料庫裡的更改紀錄,使用者可以開始更改資料

3. Dialog work process會利用CALL FUNCTION .之類的語法來呼叫別的程式,並將更改請求寫到資料庫的update table,也叫做VB* tables,因為他們的名字開頭都是VB*,直到資料寫到資料庫裡,不然都存在這

4. 在dialog過程的結尾,程式會用COMMIT WORK的指令,之後就會去呼叫update work process

5. Update work process會根據dialog work process 傳來的資料,讀取log的紀錄去將VB* tables.的資料寫入資料庫

6. 如果資料成功寫到database的table,update work process就會觸發資料庫的commit指令,然後把VB* tables的資料移掉,如果有錯誤產生,update work process就會觸發roll-back的動作,將相關的log紀錄從VB* tables移除。

7. 在lock table的lock entries 將會reset.

Note: 應用程式開發員可以選擇何時或是如何使用非同步更新.

為了增加效能,應用程式開發人員可以定義不同的更新類別,比如說V1 updates是用來處理對於時間需求較高的更新,比如說是更改物料存貨或是訂單,其餘的則可以選擇V2 updates來處理對於時間需求較步緊急的更新,比如說一些統計的資料結果

image

如果當更新時有錯誤產生,接著正在更新的元件被終止,使用者會被特別的郵件通知更新終止,如果dialog work process在寫資料到VB* tables時終止,VB* tables會將資料維持住並不寫到資料庫,接著在下次系統重開時這些entries會自動被清掉或可以手動清掉。

一個非同步的更新可能會因為不同的理由而終止,例如一直寫一樣的資料進table(會觸發意外處理),意外的狀態將會通知系統管理員

NOTES:TCODE SM13 (update requests)提供系統管理員分析工具以處理更新的異常中斷,一旦錯誤原因被排除,更新就可以繼續

沒有留言: