亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
樓主: pacman2000
打印 上一主題 下一主題

一個(gè)程序員在AS400銀行核心系統(tǒng)開(kāi)發(fā)中的技術(shù)總結(jié) [復(fù)制鏈接]

論壇徽章:
5
2015亞冠之阿爾艾因
日期:2015-08-10 02:23:34操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-08-13 06:20:002015七夕節(jié)徽章
日期:2015-08-21 11:06:1715-16賽季CBA聯(lián)賽之山西
日期:2016-04-13 02:36:59操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-04-14 06:20:00
11 [報(bào)告]
發(fā)表于 2015-07-03 01:04 |只看該作者
本帖最后由 pacman2000 于 2015-07-03 01:06 編輯

*性能加速之加載內(nèi)存

對(duì)于AS400系統(tǒng)來(lái)說(shuō),有一個(gè)提升性能的利器,利用系統(tǒng)的內(nèi)存加載技術(shù),將需要的表或者程序,預(yù)先加載到內(nèi)存中,使用的時(shí)候,大大提高了操作速度。

具體的使用上,系統(tǒng)提供的一個(gè)CL命令,SETOBJACC。以下是IBM官方資料《i5OS Commands》里關(guān)于這個(gè)命令的用法。
命令描述:
這個(gè)命令通過(guò)將對(duì)象加載到系統(tǒng)的內(nèi)存池或者從內(nèi)存池中去除,可以臨時(shí)性的改變操作對(duì)象的速度。如果選擇加載到一個(gè)有空余空間,并且沒(méi)有進(jìn)程關(guān)聯(lián)的內(nèi)存池,那么對(duì)象可以一直在內(nèi)存池中保留。重復(fù)使用這個(gè)命令,可以將一系列對(duì)象加載到一個(gè)內(nèi)存池中。
參數(shù):
OBJ:必輸項(xiàng),指定需要操作的對(duì)象。
OBJTYPE:可選項(xiàng),可以是*FILE或者*PGM。
POOL:關(guān)聯(lián)的內(nèi)存池,第一項(xiàng)是內(nèi)存池名或者子系統(tǒng)名。如果是子系統(tǒng)名,第二項(xiàng)是子系統(tǒng)定義的內(nèi)存池編號(hào)。如果名字為*JOB,表示當(dāng)前JOB使用的內(nèi)存池。如果名字為*PURGE,則從所有內(nèi)存池清除該對(duì)象。
MBR:要加載的FILE的MEMBER名,或者*FIRST表示第一個(gè)MEMBER。
MBRDATA:MEMBER要加載的內(nèi)容,可以是數(shù)據(jù),訪問(wèn)路徑,或者兩個(gè)都加載。

要了解背后的原理,就得從AS400系統(tǒng)的內(nèi)存使用模式說(shuō)起。AS400內(nèi)存使用機(jī)制,和現(xiàn)在linux系統(tǒng)的文件內(nèi)存緩存機(jī)制是差不多的。當(dāng)用到執(zhí)行的程序和數(shù)據(jù)時(shí),先要將文件系統(tǒng)上的對(duì)象,加載到內(nèi)存中,然后才能執(zhí)行。但是AS400系統(tǒng)的內(nèi)存是劃分若干內(nèi)存池管理的,系統(tǒng)預(yù)設(shè)了4個(gè),分別是MACHINE,BASE,INTERACT,SPOOL,另外還可以定義共享內(nèi)存池SHRPOOL1到60,以及子系統(tǒng)私有內(nèi)存池,通過(guò)CL命令WRKSYSSTS可以看到系統(tǒng)各內(nèi)存池狀況。系統(tǒng)內(nèi)存池和共享內(nèi)存池是所有子系統(tǒng)共享使用,私有內(nèi)存池只供定義的子系統(tǒng)專(zhuān)用。在定義子系統(tǒng)描述時(shí),可以指定子系統(tǒng)可使用的內(nèi)存池分配方案。而在子系統(tǒng)route定義時(shí),又限定了job將使用的是子系統(tǒng)關(guān)聯(lián)的哪一個(gè)內(nèi)存池。于是,在job執(zhí)行時(shí),就明確知道是與哪個(gè)內(nèi)存池交互。如果沒(méi)有SETOBJACC時(shí),執(zhí)行程序或訪問(wèn)數(shù)據(jù)文件,操作系統(tǒng)就會(huì)先判斷job內(nèi)存池內(nèi)是否已經(jīng)加載相應(yīng)的PGM或MEMBER,沒(méi)有的話先從硬盤(pán)加載到j(luò)ob內(nèi)存池再使用,有的話直接使用。從而可以發(fā)現(xiàn),job第二次訪問(wèn)文件比第一次要快很多。但是內(nèi)存池大小是有限的,如果內(nèi)存池剩余大小不夠加載時(shí),就會(huì)把舊的對(duì)象清理出去,形成換頁(yè)。
那么,當(dāng)使用了SETOBJACC時(shí),又會(huì)發(fā)生什么呢?如果不是*PURGE,系統(tǒng)將對(duì)象提前加載進(jìn)指定的內(nèi)存池,否則將對(duì)象從內(nèi)存池中清除。猜測(cè)系統(tǒng)會(huì)登記對(duì)象已加載的內(nèi)存池,當(dāng)有讀取請(qǐng)求時(shí),直接從內(nèi)存池中讀,當(dāng)有寫(xiě)請(qǐng)求時(shí),內(nèi)存池和硬盤(pán)都會(huì)寫(xiě)入。于是,大大加速了讀取性能(不用真的從硬盤(pán)讀入內(nèi)存池),也稍微加速了寫(xiě)的性能(正常的寫(xiě),也首先要從硬盤(pán)加載進(jìn)內(nèi)存池,再更新內(nèi)存池中的對(duì)象,最后從內(nèi)存池寫(xiě)回硬盤(pán),節(jié)省了第一步)。但是,如果SETOBJACC后由于內(nèi)存池的使用,導(dǎo)致對(duì)象被擠出,那么就起不到加速效果了,這對(duì)關(guān)聯(lián)了job的內(nèi)存池很常見(jiàn)。為了解決這個(gè)問(wèn)題,可以用CHGSHRPOOL命令設(shè)置專(zhuān)門(mén)用于存放數(shù)據(jù)的共享內(nèi)存池,不與任何job關(guān)聯(lián),以保證對(duì)象不會(huì)擠出。

在核心系統(tǒng)中,我們對(duì)系統(tǒng)的數(shù)據(jù)表做了區(qū)分,以C開(kāi)頭的為參數(shù)表,這部分會(huì)全部加載到共享內(nèi)存池中。下面是核心系統(tǒng)設(shè)置內(nèi)存池及使用的例子。
CHGSHRPOOL POOL(*SHRPOOL1) SIZE(8388608) ACTLVL(999) TEXT('核心系統(tǒng)內(nèi)存池')
CHGSHRPOOL POOL(*SHRPOOL2) SIZE(262144) ACTLVL(*DATA) TEXT('參數(shù)表加載內(nèi)存池')
設(shè)置2個(gè)共享內(nèi)存池,SHRPOOL1為核心系統(tǒng)job使用,大小8G,同時(shí)訪問(wèn)數(shù)量為999。SHRPOOL2為參數(shù)表加載專(zhuān)用,大小為256M,建立后調(diào)用SETOBJACC將所有參數(shù)表加載進(jìn)去。

CRTSBSD SBSD(XXXSYSCRE/XXXONLSBS) POOLS((1 *BASE) (2 *SHRPOOL1)) TEXT('聯(lián)機(jī)子系統(tǒng)描述')
CRTSBSD SBSD(XXXSYSCRE/XXXON2SBS) POOLS((1 *BASE) (2 *SHRPOOL1)) TEXT('聯(lián)機(jī)子系統(tǒng)描述')
CRTSBSD SBSD(XXXSYSCRE/XXXBATSBS) POOLS((1 *BASE) (2 *SHRPOOL1)) TEXT('批量子系統(tǒng)描述')
CRTSBSD SBSD(XXXSYSCRE/XXXAMBSBS) POOLS((1 *BASE) (2 *SHRPOOL1)) TEXT('異步子系統(tǒng)描述')
核心系統(tǒng)的各子系統(tǒng),可使用的內(nèi)存池為1-BASE,2-SHRPOOL1。job使用的通過(guò)下面指定。這里不能肯定是否要將SHRPOOL2關(guān)聯(lián)編號(hào),才能起效果。有了解的請(qǐng)補(bǔ)充介紹。

ADDRTGE SBSD(XXXSYSCRE/XXXONLSBS) SEQNBR(10) CMPVAL(*ANY) PGM(QSYS/QCMD) CLS(XXXSYSCRE/XXXONLCLS) POOLID(2)
ADDRTGE SBSD(XXXSYSCRE/XXXON2SBS) SEQNBR(10) CMPVAL(*ANY) PGM(QSYS/QCMD) CLS(XXXSYSCRE/XXXON2CLS) POOLID(2)
ADDRTGE SBSD(XXXSYSCRE/XXXBATSBS) SEQNBR(10) CMPVAL(*ANY) PGM(QSYS/QCMD) CLS(XXXSYSCRE/XXXBATCLS) POOLID(2)
ADDRTGE SBSD(XXXSYSCRE/XXXAMBSBS) SEQNBR(10) CMPVAL(*ANY) PGM(QSYS/QCMD) CLS(XXXSYSCRE/XXXAMBCLS) POOLID(2)
定義了各子系統(tǒng)job執(zhí)行時(shí),都會(huì)使用子系統(tǒng)2號(hào)內(nèi)存池,即SHRPOOL1。



下一集介紹性能加速的另一重要寫(xiě)法--激活組。

論壇徽章:
0
12 [報(bào)告]
發(fā)表于 2015-07-04 13:00 |只看該作者
回復(fù) 11# pacman2000

期待樓主持續(xù)連載,激活組一直想用一直不清楚啊,大神加油
   

論壇徽章:
0
13 [報(bào)告]
發(fā)表于 2015-07-17 13:48 |只看該作者
唉,不要傷心了,哈哈哈,IBM自己也不搞了,哈哈哈。!

論壇徽章:
5
2015亞冠之阿爾艾因
日期:2015-08-10 02:23:34操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-08-13 06:20:002015七夕節(jié)徽章
日期:2015-08-21 11:06:1715-16賽季CBA聯(lián)賽之山西
日期:2016-04-13 02:36:59操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-04-14 06:20:00
14 [報(bào)告]
發(fā)表于 2015-07-27 02:51 |只看該作者
本帖最后由 pacman2000 于 2015-07-27 02:58 編輯

*激活組

隨著AS400的程序模型從OPM發(fā)展到ILE,寫(xiě)法上有了巨大的提升。激活組的引入,作為ILE最重要的變化,影響到整個(gè)系統(tǒng)程序的組織和性能?墒悄壳,仍然有很多系統(tǒng),沿用著老式的OPM寫(xiě)法和程序組織,沒(méi)有對(duì)激活組做好規(guī)劃,只是使用缺省激活組管理,從而失去了ILE激活組帶來(lái)的可控資源管理和性能提升,頗為可惜。因此,我介紹一下在Firebird核心系統(tǒng)中,對(duì)ILE激活組的使用方式,作為參考。更詳細(xì)的信息,可以查看IBM官方手冊(cè)的《ILE Concepts》文檔。

隨著從RPG升級(jí)到RPGLE,CL升級(jí)到CLLE,當(dāng)前的程序,已經(jīng)都是ILE程序了。ILE程序的運(yùn)行,首先要進(jìn)行程序的激活。ILE通過(guò)激活組來(lái)管理程序的運(yùn)行和靜態(tài)存儲(chǔ)區(qū)域。激活組是比job粒度更小的單位,不同job之間互不影響,即使不同job存在同名的激活組,系統(tǒng)也是分開(kāi)獨(dú)立管理的。一旦程序加載進(jìn)激活組激活,靜態(tài)存儲(chǔ)區(qū)域就會(huì)被初始化(包含F(xiàn)表文件的打開(kāi),D表定義的變量INZ初始化,以及執(zhí)行*INZSR過(guò)程)。如果程序沒(méi)有被激活組清除,并且激活組也沒(méi)有被刪除,那么下次運(yùn)行程序時(shí),將會(huì)直接用已加載的程序和存儲(chǔ)區(qū)域執(zhí)行。這時(shí)注意三點(diǎn)。一,已加載的程序不受文件系統(tǒng)上的程序目標(biāo)更改的影響,即改變了程序目標(biāo),但執(zhí)行的仍是老代碼。二,F(xiàn)表打開(kāi)的文件,以及訪問(wèn)的文件位置,均會(huì)保留上次執(zhí)行結(jié)束時(shí)的狀態(tài),這個(gè)效果對(duì)性能加速非常有用。三,D表的INZ和*INZSR不會(huì)再次執(zhí)行,全局變量會(huì)保留上次執(zhí)行結(jié)束時(shí)的殘留值,因此程序在開(kāi)始處需要執(zhí)行RESET(設(shè)置成初始化數(shù)據(jù)),或者CLEAR(根據(jù)數(shù)據(jù)類(lèi)型清空內(nèi)容)。在實(shí)際使用中,程序不設(shè)置INZ和*INZSR,將所有獨(dú)立變量統(tǒng)一定義在D_VARS結(jié)構(gòu)下,在*ENTRY后,首先執(zhí)行CLEAR的動(dòng)作。

ILE程序必須加載到激活組運(yùn)行,而運(yùn)行在哪個(gè)激活組,是在編譯程序時(shí)指定的。通過(guò)CRTPGM或者CRTSRVPGM命令,包括衍生的CRTBNDRPG,CRTBNDCL,CRTSQLRPGI,可以用DFTACTGRP和ACTGRP參數(shù)選擇激活組的屬性?梢赃x擇的方式有:DFTACTGRP默認(rèn)為*YES,表示使用系統(tǒng)默認(rèn)的激活組,系統(tǒng)默認(rèn)激活組是不會(huì)被刪除的;DFTACTGRP為*NO,ACTGRP為*CALLER,表示與調(diào)用者在同一個(gè)激活組;DFTACTGRP為*NO,ACTGRP為*NEW,表示讓系統(tǒng)自動(dòng)新增一個(gè)系統(tǒng)命名的激活組,系統(tǒng)保證激活組一定是與已有激活組不同的名字,因此一定是新建立;DFTACTGRP為*NO,ACTGRP為用戶(hù)自定義名稱(chēng),表示使用用戶(hù)命名的激活組,如果激活組不存在則建立,已存在則直接使用。
激活組可以解決一個(gè)很特殊的問(wèn)題。我們知道有一種程序?qū)懛ń凶鲞f歸調(diào)用,即程序調(diào)用自身執(zhí)行。缺省情況下,這種調(diào)用AS400會(huì)報(bào)錯(cuò)。這是因?yàn)槌绦蛘{(diào)用自身時(shí),激活組內(nèi)已經(jīng)存在一份正在運(yùn)行的程序目標(biāo)和存儲(chǔ)區(qū)域,未執(zhí)行完時(shí)必須保留,再調(diào)用自身時(shí)就產(chǎn)生了沖突。那么如何實(shí)現(xiàn)遞歸呢?我們可以把程序編譯成*NEW激活組,這樣調(diào)用自身也是在另外一份激活組內(nèi)加載獨(dú)立的目標(biāo)和存儲(chǔ)區(qū)域,不會(huì)再報(bào)錯(cuò)。
激活組是用來(lái)管理程序資源的,激活組刪除時(shí)程序資源會(huì)自動(dòng)釋放。那么,激活組會(huì)出現(xiàn)哪些情況呢?RPG程序中的LR資源釋放指示器會(huì)產(chǎn)生什么影響呢?我們依次進(jìn)行分析說(shuō)明。
一,系統(tǒng)默認(rèn)激活組是從不刪除的,一直到j(luò)ob結(jié)束,隨著job的釋放而釋放。因此,在默認(rèn)激活組執(zhí)行的程序,有兩種方式釋放資源。第一種是在RPG程序中SETON LR指示器,那么在程序RETURN后就會(huì)被清理。第二種是不做SETON LR,加載的程序下次調(diào)用仍可使用,直到調(diào)用了RCLRSC命令。RCLRSC命令只對(duì)缺省激活組有效,調(diào)用后,在缺省激活組的已執(zhí)行結(jié)束但未釋放的程序,將被清理。
二,用*NEW系統(tǒng)自動(dòng)建立的激活組,當(dāng)建立程序執(zhí)行結(jié)束RETURN時(shí),系統(tǒng)自動(dòng)進(jìn)行刪除激活組,也就自動(dòng)釋放所有組內(nèi)程序資源,因此不需要程序設(shè)置LR。
三,用ACTGRP指定用戶(hù)自定義名稱(chēng)的激活組,不會(huì)自動(dòng)刪除,當(dāng)組內(nèi)所有程序均不在運(yùn)行狀態(tài)時(shí),使用RCLACTGRP命令,指定名稱(chēng)或者ACTGRP(*ELIGIBLE)刪除。刪除后,釋放所有組內(nèi)程序資源。既然使用了自定義的激活組,就是為了利用激活組的性能加速,因此我們也不用再設(shè)置LR了。

充分使用激活組的功能,對(duì)應(yīng)用系統(tǒng)有著重要的意義。在核心系統(tǒng)中,聯(lián)機(jī)和批處理主控程序運(yùn)行于*NEW激活組,交易程序運(yùn)行于CORE激活組,交易調(diào)用的各級(jí)模塊程序均指定為*CALLER,可以由主控控制何時(shí)執(zhí)行RCLACTGRP。
首先,可以用激活組的目標(biāo)加載,實(shí)現(xiàn)應(yīng)用程序版本更新。程序上線時(shí),更新了新的目標(biāo),不會(huì)對(duì)已經(jīng)調(diào)用過(guò)此目標(biāo)的job產(chǎn)生影響,而只要觸發(fā)主控的激活組回收,即可實(shí)現(xiàn)新目標(biāo)的運(yùn)行切換。
其次,保留的程序資源,可以實(shí)現(xiàn)極大的性能加速。批處理往往是循環(huán)重復(fù)調(diào)用模塊組件訪問(wèn)相同的表,節(jié)省了文件的打開(kāi)關(guān)閉動(dòng)作,加速效果非常顯著。聯(lián)機(jī)交易結(jié)合同一環(huán)境啟用多套聯(lián)機(jī)主控子系統(tǒng)的支持,一樣能達(dá)到很好的效果。銀行交易有特殊性,交易量排名前幾的交易,往往占比很大,因此考慮對(duì)這些交易各自啟動(dòng)專(zhuān)用主控子系統(tǒng),就可以達(dá)到同樣的交易程序重復(fù)執(zhí)行最大加速的效果。

曾幾何時(shí),RPG程序開(kāi)發(fā)規(guī)范上,寫(xiě)著在RETURN前必須SETON LR指示器。而現(xiàn)在,到了拋棄指示器,擁抱ILE新環(huán)境的時(shí)候了。

論壇徽章:
0
15 [報(bào)告]
發(fā)表于 2015-08-06 16:05 |只看該作者
“隨著國(guó)家的自主安全可控號(hào)召,AS400系統(tǒng)看來(lái)在銀行IT逐漸退出了!   --- AS400要從銀行退出了???

論壇徽章:
5
2015亞冠之阿爾艾因
日期:2015-08-10 02:23:34操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-08-13 06:20:002015七夕節(jié)徽章
日期:2015-08-21 11:06:1715-16賽季CBA聯(lián)賽之山西
日期:2016-04-13 02:36:59操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-04-14 06:20:00
16 [報(bào)告]
發(fā)表于 2015-08-07 21:49 |只看該作者
iCloud400 發(fā)表于 2015-08-06 16:05
“隨著國(guó)家的自主安全可控號(hào)召,AS400系統(tǒng)看來(lái)在銀行IT逐漸退出了。”   --- AS400要從銀行退出了???



差不多,雖然老系統(tǒng)還在用,但換系統(tǒng)的話都在考慮換平臺(tái)了。

論壇徽章:
5
2015亞冠之阿爾艾因
日期:2015-08-10 02:23:34操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-08-13 06:20:002015七夕節(jié)徽章
日期:2015-08-21 11:06:1715-16賽季CBA聯(lián)賽之山西
日期:2016-04-13 02:36:59操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-04-14 06:20:00
17 [報(bào)告]
發(fā)表于 2015-08-10 02:21 |只看該作者
本帖最后由 pacman2000 于 2015-08-10 02:23 編輯

*性能加速之批處理事務(wù)提交

在核心系統(tǒng)中,對(duì)性能要求最高的,就是批處理程序了。那么,對(duì)批處理提升性能,有哪些技術(shù)方法呢?下面介紹一下在Firebird系統(tǒng)中的做法。

首先,前面介紹的SETOBJACC加載內(nèi)存,同樣適用于批處理。除了與聯(lián)機(jī)處理一樣,加載系統(tǒng)參數(shù)表外,還可以新開(kāi)一個(gè)專(zhuān)用SHRPOOL,加載批處理中會(huì)重復(fù)用到的表,然后在批處理結(jié)束后釋放這個(gè)SHRPOOL。
其次,激活組的加速也能起到很大效果。批處理程序同樣由總控調(diào)度任務(wù),每個(gè)任務(wù)再按照分段不分段,啟動(dòng)不同的job執(zhí)行。每一個(gè)job都是多次循環(huán)處理相同的程序邏輯,操作相同的表,恰好是激活組最能發(fā)揮作用的場(chǎng)景。按照系統(tǒng)的規(guī)劃,交易程序使用命名激活組CORE,各模塊組件使用激活組*CALLER,批處理也遵循這一規(guī)則即可,完美達(dá)到模塊組件重用的效果。
然而本次主要介紹的,是另外一種性能加速的方法。我們知道批處理程序耗時(shí)最多的,是在數(shù)據(jù)表文件的操作和事務(wù)日志處理上。由于數(shù)據(jù)庫(kù)事務(wù)的ACID特性,因此每次事務(wù)處理都會(huì)落實(shí)到磁盤(pán)的寫(xiě)JRN日志記錄上。如果去翻看關(guān)聯(lián)的JRN文件記錄,會(huì)發(fā)現(xiàn)里面記錄的內(nèi)容非常多,通常包含開(kāi)始事務(wù),打開(kāi)關(guān)閉文件,讀寫(xiě)文件記錄數(shù)據(jù),事務(wù)提交或者回滾等。如果每條日志記錄產(chǎn)生時(shí)都寫(xiě)磁盤(pán),顯然性能就會(huì)受到影響。于是,在這方面就有了優(yōu)化的空間。

我們先看看STRJRNPF的參數(shù)能調(diào)整什么。STRJRNPF有幾個(gè)選項(xiàng),一個(gè)是IMAGES,如果是*AFTER,則在記錄變更時(shí)只在JRN中登記變更后數(shù)據(jù),如果是*BOTH,那么變更時(shí)會(huì)登記BEFORE和AFTER兩條數(shù)據(jù)。另一個(gè)是OMTJRNE,如果是*OPNCLO,表示省略掉打開(kāi)關(guān)閉文件的記錄不登記。通過(guò)這兩個(gè)選項(xiàng),在把PF加進(jìn)事務(wù)處理,可以稍微省一點(diǎn)事務(wù)日志產(chǎn)生的數(shù)量。然后我們?cè)倏纯碈RTJRN或者CHGJRN的一個(gè)選項(xiàng),JRNCACHE選擇*YES。這個(gè)選項(xiàng)可以讓事務(wù)日志累積在內(nèi)存CACHE中,再成批寫(xiě)進(jìn)磁盤(pán)。但是值得注意的是,IBM官方文檔沒(méi)有說(shuō)明,這個(gè)CACHE仍然需要保證數(shù)據(jù)庫(kù)事務(wù)的ACID性質(zhì),因此只能對(duì)事務(wù)緩存到COMMIT或者ROLLBACK為止。對(duì)于批處理循環(huán)每筆COMMIT來(lái)說(shuō),其實(shí)并沒(méi)有想象中那么好的提升效果。那有沒(méi)有其他辦法呢?有,而且是一個(gè)有爭(zhēng)議的大招,叫做soft commit。具體做法是,設(shè)置環(huán)境變量,ADDENVVAR ENVVAR(QIBM_TN_COMMIT_DURABLE) VALUE(*NO)。當(dāng)這個(gè)環(huán)境變量與JRNCACHE同時(shí)使用時(shí),事務(wù)日志的CACHE將不顧C(jī)OMMIT和ROLLBACK一直緩存,直到緩存滿(mǎn)后才一次性寫(xiě)入磁盤(pán)。用這樣的方法,大大減少了寫(xiě)磁盤(pán)的次數(shù)。但是這是有爭(zhēng)議的,即要承受風(fēng)險(xiǎn),如果系統(tǒng)崩潰或者斷電導(dǎo)致緩存丟失,那么未寫(xiě)入磁盤(pán)的已完成事務(wù)將永久丟失,造成數(shù)據(jù)丟失的嚴(yán)重后果。以銀行系統(tǒng)來(lái)說(shuō),恐怕這種風(fēng)險(xiǎn)是很難接受的。

操作系統(tǒng)提供的技術(shù)方法,沒(méi)有找到其他手段了。但是,作為應(yīng)用系統(tǒng),可以調(diào)整應(yīng)用程序的設(shè)計(jì),達(dá)到既能加速,又不會(huì)丟失數(shù)據(jù)的效果。既然通過(guò)JRNCACHE緩存一筆COMMIT事務(wù)還是比較有保障的,那批處理程序可以循環(huán)若干條再做一次COMMIT提交,使CACHE的日志數(shù)量盡可能接近填滿(mǎn)CACHE大小。可是這種批量方式有一個(gè)缺陷,當(dāng)一批若干條中有一條出現(xiàn)錯(cuò)誤導(dǎo)致事務(wù)需要回滾,那么同一批內(nèi)其他成功記錄都會(huì)受影響被回滾。這必須得想辦法克服?紤]過(guò)每一筆設(shè)置SAVEPOINT,發(fā)生錯(cuò)誤回滾到上個(gè)SAVEPOINT,但SAVEPOINT性能損失的代價(jià)很大,小概率才會(huì)發(fā)生的錯(cuò)誤導(dǎo)致所有正常處理也要付出代價(jià),得不償失。思考良久之后,最終通過(guò)調(diào)整批處理程序的寫(xiě)法達(dá)到效果。
批處理程序的機(jī)制先要支持?jǐn)帱c(diǎn)續(xù)跑。即每段事務(wù)中,都記錄目前已處理到的位置。這樣當(dāng)發(fā)生錯(cuò)誤ROLLBACK,主控重新調(diào)起任務(wù)時(shí),程序會(huì)定位到上次成功的位置后開(kāi)始接著執(zhí)行。這個(gè)不難實(shí)現(xiàn),大多數(shù)現(xiàn)有系統(tǒng)也都支持。單筆事務(wù)處理的程序沒(méi)有問(wèn)題,但為了性能使用多筆一次事務(wù)提交時(shí),就需要改變寫(xiě)法了。程序開(kāi)始時(shí)處于多筆模式,記錄好起始位置和一批數(shù)量,先按多筆方式正常處理。當(dāng)某一批中出現(xiàn)錯(cuò)誤時(shí),整批事務(wù)回滾,并切換成單筆模式,從本批開(kāi)始的位置重新執(zhí)行,當(dāng)本批數(shù)量的記錄處理完需要進(jìn)入下一批時(shí),重新切回多筆模式正常執(zhí)行。即出現(xiàn)錯(cuò)誤的這一小段單筆執(zhí)行,過(guò)了這一段又多筆執(zhí)行,從而達(dá)到性能加速和控制錯(cuò)誤粒度的完美結(jié)合。

通過(guò)最近幾篇介紹的方法,F(xiàn)irebird系統(tǒng)性能相對(duì)現(xiàn)有系統(tǒng),不論是聯(lián)機(jī)交易還是批處理交易,都有好幾倍的提升,效果十分顯著。性能部分就告一段落了,再下來(lái)會(huì)介紹程序上用到的新寫(xiě)法,敬請(qǐng)期待。

論壇徽章:
0
18 [報(bào)告]
發(fā)表于 2015-08-12 16:49 |只看該作者
開(kāi)放平臺(tái)和分布式總歸是趨勢(shì)的,過(guò)去的經(jīng)歷總是難忘,能與400結(jié)緣或是命中注定,正所謂英雄不提當(dāng)年之勇,往前看吧

論壇徽章:
5
2015亞冠之阿爾艾因
日期:2015-08-10 02:23:34操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-08-13 06:20:002015七夕節(jié)徽章
日期:2015-08-21 11:06:1715-16賽季CBA聯(lián)賽之山西
日期:2016-04-13 02:36:59操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-04-14 06:20:00
19 [報(bào)告]
發(fā)表于 2015-08-13 08:23 來(lái)自手機(jī) |只看該作者
且行且珍惜,哈哈

論壇徽章:
1
操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-02-18 06:20:00
20 [報(bào)告]
發(fā)表于 2015-08-19 17:45 |只看該作者
然并卵……
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP