3個(gè)作用 1 對(duì)供應(yīng)商進(jìn)行分類,比如員工供應(yīng)商,關(guān)系人供應(yīng)商,采購(gòu)供應(yīng)商,財(cái)務(wù)供應(yīng)商 2 不同的編號(hào)范圍 3 控制供應(yīng)商主數(shù)據(jù)字段屬性(必輸,顯示、隱藏)
沙依巴克網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,沙依巴克網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為沙依巴克近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的沙依巴克做網(wǎng)站的公司定做!
SAP系統(tǒng)操作技巧:
1、“/N”:快速返回主界面。例如,當(dāng)用戶在錄入憑證時(shí)發(fā)現(xiàn)憑證錯(cuò)了,需要退出后重新錄入。如果點(diǎn)擊下面紅框中的圖標(biāo),可能需要點(diǎn)擊幾次才能返回到初始界面,此時(shí)只需在命令框中輸入“/N”即可返回到初始界面。
2、“/N+TCODE”:退出當(dāng)前界面,并進(jìn)入新的界面。例如,當(dāng)前用戶想要從會(huì)計(jì)科目顯示界面跳轉(zhuǎn)到憑證錄入界面時(shí),不必返回到初始界面,再輸入F-02,直接在命令框中錄入“/NF-02”即可(/N和F-02之間可以有空格)。
3、“/O”:打開新的窗口。SAP中最多可以同時(shí)打開6個(gè)窗口,用戶可以在一個(gè)窗口查看報(bào)表,另一個(gè)窗口中錄入憑證,相互不影響。用戶可以通過命令“/O”,或者是點(diǎn)擊下圖紅圈中的圖標(biāo)打開新的窗口。
4、“/O+TCODE”:打開新的窗口并進(jìn)入操作界面。單獨(dú)打開新的窗口一般點(diǎn)擊上圖紅圈中的圖標(biāo),“/O”一般結(jié)合事務(wù)碼使用,例如“/OF-02”表示打開一個(gè)新的窗口,并進(jìn)入到F-02記賬界面。
5、“/NEX”:直接退出SAP系統(tǒng)。如果同時(shí)打開了5個(gè)窗口,退出SAP系統(tǒng)時(shí),一個(gè)一個(gè)窗口去關(guān)掉會(huì)比較費(fèi)事,此時(shí)可以直接在命令行中輸入“/NEX”退出SAP。說明:命令“/NEX”直接退出SAP,不會(huì)有任何提示,如果某些窗口中有內(nèi)容沒有保存,信息就會(huì)丟失。
系統(tǒng)增強(qiáng)是對(duì)SAP標(biāo)準(zhǔn)程序功能上的增加或者補(bǔ)強(qiáng), 是要基于原來的sap 代碼的。 如果不是同一個(gè)系統(tǒng)(包括不同的產(chǎn)品或相同產(chǎn)品不同的解決方案,甚至完全相同產(chǎn)品的同一個(gè)系統(tǒng)的dev,QAS,PRD但是support pagckage 的版本不同)與之對(duì)于的SAP標(biāo)準(zhǔn)代碼和借口不同,就可能達(dá)不到預(yù)期的結(jié)果。
如果底層的SAP系統(tǒng)還有配置都完全相同, 請(qǐng)告知復(fù)制方式和過程,可能是在這個(gè)環(huán)節(jié)出問題了
性能問題總是數(shù)據(jù)庫(kù)領(lǐng)域里面永恒的話題,使用 DB2 作為底層數(shù)據(jù)平臺(tái)的 SAP 系統(tǒng)為我們提供了許多方法監(jiān)控和檢測(cè)數(shù)據(jù)庫(kù)性能問題。本文從數(shù)據(jù)庫(kù)性能問題檢測(cè)的一般思路和方法論入手,介紹了如何通過 SAP 系統(tǒng)對(duì) DB2 的性能進(jìn)行監(jiān)控和分析。回頁首數(shù)據(jù)庫(kù)性能問題檢測(cè)的思路及方法論在數(shù)據(jù)庫(kù)運(yùn)維工作中遇到性能問題時(shí),通常會(huì)讓數(shù)據(jù)庫(kù)管理員感到無從下手,不容易斷定問題的根源所在。如果能有一種可操作的一般性的方法作為指導(dǎo),我們通常就能夠發(fā)現(xiàn)大部分?jǐn)?shù)據(jù)庫(kù)性能問題的根源。那么,首先根據(jù)我們對(duì)數(shù)據(jù)庫(kù)性能監(jiān)控的一些實(shí)踐經(jīng)驗(yàn)來總結(jié)一下在遇到性能問題時(shí)應(yīng)該進(jìn)行哪些檢查。我們不能保證通過文中介紹的方法就能找到所有性能瓶頸,性能問題的原因很多,解決方法也多種多樣,我們?cè)谶@里只是提供一些普遍的,一般性的方法,具體的實(shí)施還需要根據(jù)系統(tǒng)的具體情況和不斷的實(shí)踐經(jīng)驗(yàn)積累。同時(shí),通過進(jìn)行這些監(jiān)控,也有利于為技術(shù)支持人員提供更詳細(xì)診斷信息,以便于快速定位性能問題。當(dāng)遇到一個(gè)性能問題,我們首先進(jìn)行以下排查: 性能問題是在何時(shí)發(fā)生的; 性能問題持續(xù)存在的還是間斷性的; 系統(tǒng)范疇的性能問題還是數(shù)據(jù)庫(kù)本身的性能問題; 性能問題是否只存在于某一個(gè)應(yīng)用; 性能問題是隨機(jī)出現(xiàn)的還是必然出現(xiàn)的。如果性能問題存在于所有應(yīng)用,我們可以進(jìn)行以下排查: 如果發(fā)現(xiàn)系統(tǒng)存在大量的 I/O 操作: 檢查設(shè)備使用情況; 檢查排序情況和臨時(shí)表空間; 檢查查詢性能是否有效的得到優(yōu)化; 檢查緩沖池的使用狀況。 如果發(fā)現(xiàn) CPU 具有很高的負(fù)載: 檢查排序狀況; 檢查緩沖池的使用狀況。 如果發(fā)現(xiàn) CPU 和 I/O 操作的負(fù)荷都很大: 檢查用戶數(shù)量; 檢查排序狀況。 如果發(fā)現(xiàn) CPU 和 I/O 操作的負(fù)荷都很小而數(shù)據(jù)庫(kù)響應(yīng)仍然很慢: 檢查并發(fā)性和鎖的使用狀況; 檢查緩沖池的使用狀況。如果性能問題可以被定位在一個(gè)應(yīng)用,我們可以進(jìn)行以下排查: 檢查排序情況。 檢查并發(fā)性和鎖的使用狀況。 檢查統(tǒng)計(jì)信息是否更新?;仨撌淄ㄟ^SAP 系統(tǒng)的工具對(duì) DB2 UDB 進(jìn)行監(jiān)控通過前一部分的描述,我們了解到了在遇到性能問題以后應(yīng)該用什么思路尋找性能的瓶頸,從而想辦法解決性能問題。在對(duì)數(shù)據(jù)庫(kù)進(jìn)行檢查的過程中,我們通常會(huì)用到數(shù)據(jù)管理工具,命令行以及操作系統(tǒng)的工具,還要結(jié)合 SAP 的自身特點(diǎn)尋找性能問題的根源,這將是一個(gè)比較繁瑣和費(fèi)事的工作。在使用 SAP 作為底層數(shù)據(jù)庫(kù)的 SAP 系統(tǒng)中,由于 SAP 實(shí)現(xiàn)了與 DB2 緊密的結(jié)合。SAP 的 DBA Cockpit 提供了許多功能來支持?jǐn)?shù)據(jù)庫(kù)的管理工作,使得數(shù)據(jù)庫(kù)性能監(jiān)控和分析變得更加簡(jiǎn)單。下面我們就來看看,SAP 為 DB2 性能監(jiān)控和分析提供了哪些支持。磁盤I/O 性能監(jiān)控概念對(duì)于數(shù)據(jù)庫(kù)來說,最消耗時(shí)間的操作實(shí)際上是從磁盤中檢索數(shù)據(jù)。這是由磁盤的物理特性決定的。盡管磁盤存儲(chǔ)技術(shù)已經(jīng)取得了極大的進(jìn)步,但磁盤的讀寫速度與內(nèi)存的讀寫速度仍然相差幾個(gè)數(shù)量級(jí)。從性能調(diào)整的角度來說,如果一個(gè)機(jī)器的磁盤出現(xiàn)問題,那么其他的任何優(yōu)化工作都無法提供幫助。因此我們應(yīng)該保證運(yùn)行數(shù)據(jù)庫(kù)的磁盤系統(tǒng)是健康的。SAP 系統(tǒng)為我們提供了監(jiān)控磁盤讀寫速度的功能,讓我們可以直接了解當(dāng)前磁盤的性能狀況。監(jiān)控我們首先進(jìn)入 SAP 的 DBA Cockpit ( 可以直接輸入 st04),然后在 Performance 的目錄下雙擊 Database, Buffer Pool 的標(biāo)簽內(nèi),可以看到當(dāng)前數(shù)據(jù)庫(kù)磁盤的讀寫狀況。圖1. 磁盤 I/O 信息從圖中我們可以看到磁盤物理平均讀速度為 3.25ms,寫速度為 7.45ms。分析磁盤物理讀寫速度反應(yīng)了磁盤子系統(tǒng)的性能。一般情況下,磁盤讀寫速度應(yīng)該小于 5ms,讀速度一般要大于寫速度,但在一些具有大量緩存的存儲(chǔ)系統(tǒng)中,寫速度可能會(huì)快于讀速度。磁盤性能的優(yōu)化已經(jīng)超出了本文討論的范圍,這里只是提供一些基本的指導(dǎo)。緩沖池監(jiān)控概念緩沖池是數(shù)據(jù)庫(kù)單獨(dú)開辟的一塊存儲(chǔ)區(qū)域,這片區(qū)域用來緩存從磁盤讀出的包含數(shù)據(jù)表和索引的數(shù)據(jù)頁。當(dāng)數(shù)據(jù)第一次被檢索出來以后便被暫時(shí)緩存在緩沖池中,當(dāng)數(shù)據(jù)下次被訪問時(shí),數(shù)據(jù)庫(kù)將直接從緩沖池中讀取數(shù)據(jù),這樣減少了相對(duì)緩慢的磁盤 I/O 操作。因此,緩沖池的配置對(duì)于數(shù)據(jù)庫(kù)性能十分重要。在緩沖池中,目前還不支持存儲(chǔ)大對(duì)象和長(zhǎng)數(shù)據(jù)記錄。反映緩沖池質(zhì)量的一個(gè)重要性能指標(biāo)是緩沖池命中率。緩沖池命中率指數(shù)據(jù)庫(kù)管理器不需從磁盤讀入頁就能處理頁請(qǐng)求的時(shí)間百分比。其計(jì)算方法為:緩沖池命中率 = (1 - (( 緩沖池?cái)?shù)據(jù)物理讀 + 緩沖池索引物理讀 ) / ( 緩沖池?cái)?shù)據(jù)邏輯讀 + 緩沖池索引邏輯讀 ) ) ) * 100%另外兩個(gè)重要性能指標(biāo)是索引命中率和數(shù)據(jù)命中率。索引命中率反映了可以在緩沖池中找到的頁面能夠滿足的對(duì)索引頁的所有讀請(qǐng)求所占的百分比。其計(jì)算方法為:索引命中率 = (1 - ( 緩沖池索引物理讀 / 緩沖池索引邏輯讀 ) ) ) * 100%數(shù)據(jù)命中率說明了可以在緩沖池中找到的頁面能夠滿足的對(duì)數(shù)據(jù)頁的所有讀請(qǐng)求所占的百分比。其計(jì)算方法為:數(shù)據(jù)命中率 = (1 - ( 緩沖池?cái)?shù)據(jù)物理讀 / 緩沖池?cái)?shù)據(jù)邏輯讀 ) ) ) * 100%監(jiān)控我們可以從三個(gè)級(jí)別來看緩沖池的質(zhì)量,這三個(gè)層次分別是數(shù)據(jù)庫(kù)級(jí),緩沖池級(jí),表空間級(jí)。在 SAP 系統(tǒng)中我們可以使用 DBA Cockpit 來查看不同級(jí)別的緩沖池質(zhì)量。首先可以在數(shù)據(jù)庫(kù)級(jí)查看緩沖池的質(zhì)量,我們進(jìn)入 SAP 的 DBA Cockpit,然后在 Performance 的目錄下雙擊 Database, 在 Buffer Pool 的標(biāo)簽內(nèi),可以看到當(dāng)前數(shù)據(jù)庫(kù)總體的緩沖池質(zhì)量。圖2. 緩沖池總體狀況我們從圖中可以看出,數(shù)據(jù)庫(kù)緩沖池的總體命中率是 99.81%,數(shù)據(jù)命中率為 99.86%,索引命中率為 99.70%。如果在 st04 中選中 Performance - Buffer pools, 我們也可以在緩沖池級(jí)別看到命中率,如果一個(gè)數(shù)據(jù)庫(kù)只有一個(gè)緩沖池,那么這個(gè)命中率與我們?cè)跀?shù)據(jù)庫(kù)級(jí)別看到的命中率相同。圖3. 數(shù)據(jù)庫(kù)級(jí)別緩沖池信息如果在 st04 中選中 Performance - Tablespaces,我們就可以在表空間級(jí)別看到緩沖池的命中率。圖4. 表空間級(jí)別緩沖池信息分析緩沖池的理想命中率對(duì)于索引應(yīng)該大于 90%, 對(duì)于數(shù)據(jù)應(yīng)該大于 95%。要提高緩沖池的命中率,可以增加緩沖池的大小,也可以為不同類型數(shù)據(jù)分配不同緩沖池,可以為每個(gè)經(jīng)常訪問的具有自己的表空間的大型表使用一個(gè)緩沖池,也可以為一組小型表使用一個(gè)緩沖池。緩存監(jiān)控概念數(shù)據(jù)庫(kù)的緩存主要有包緩存 (Package Cache) 和編目錄緩存 (Catalog Cache)。它們與數(shù)據(jù)庫(kù)的查詢性能息息相關(guān)。包緩存(Package Cache) :SQL 語句編譯通常消耗的資源比較大,為了提高系統(tǒng)性能,動(dòng)態(tài) SQL 語句在被編譯后一般存放于包緩存中。當(dāng)用戶下一次請(qǐng)求同一條 SQL 語句,就無需再次編譯 SQL 語句。包緩存的質(zhì)量一般通過包緩存命中率來衡量,它表明了包緩存的設(shè)置是否成功的避免了 SQL 語句的重新編譯。其計(jì)算方法為:包緩存命中率 = (1 - ( 在包緩存中的插入次數(shù) / 查詢包緩存的次數(shù) )) * 100編目錄緩存 (Catalog Cache):編目錄緩存用來緩存系統(tǒng)編目錄信息,如系統(tǒng)表,權(quán)限,系統(tǒng)存儲(chǔ)過程。系統(tǒng)編目錄的訪問速度對(duì)于系統(tǒng)的性能有著十分重要的影響。在 DPF 環(huán)境下,系統(tǒng)編目錄的訪問速度至關(guān)重要。通過使用編目錄緩存可以大大提高訪問系統(tǒng)編目錄的速度。編目錄緩存質(zhì)量一般通過編目錄命中率來衡量,它表明了編目錄緩存是否成功的避免了從磁盤中讀取編目錄信息。其計(jì)算方法為:包緩存命中率 = (1 - ( 在編目錄緩存中的插入次數(shù) / 查詢編目錄緩存的次數(shù) )) * 100監(jiān)控我們進(jìn)入 SAP 的 DBA Cockpit,然后在 Performance 的目錄下雙擊 Database, 在 Cache 的標(biāo)簽內(nèi),可以看到當(dāng)前數(shù)據(jù)庫(kù)緩存的統(tǒng)計(jì)信息。圖5. 數(shù)據(jù)庫(kù)緩存信息從圖中我們可以看到編目錄緩存的質(zhì)量是 99.93%,在圖中的 quality 就是我們前面所說的命中率。當(dāng)前數(shù)據(jù)庫(kù)編目錄緩存的大小為 10240KB,沒有緩存溢出。在左邊一欄,我們可以看到,包緩存的質(zhì)量是 97.64%,包緩存的大小為 62080KB,沒有緩存溢出。分析包緩存的理想命中率應(yīng)該大于 98%,用戶通常不用關(guān)注包緩存的大小,如果 PCKCACHESZ 被設(shè)置為 automatic,其大小由 DB2 自動(dòng)調(diào)節(jié)。編目錄緩存的理想命中率也應(yīng)該大于 98%,其大小應(yīng)該保證編目錄緩存不應(yīng)該發(fā)生任何溢出。我們可以調(diào)整數(shù)據(jù)庫(kù)配置參數(shù) CATALOGCACHE_SZ 來改變編目錄緩存大小,由于編目錄緩存是從數(shù)據(jù)庫(kù)堆中分配的,因此,在改變 CATALOGCACHE_SZ 變量的同時(shí),應(yīng)該注意到數(shù)據(jù)庫(kù)堆的大小也會(huì)相應(yīng)改變。排序監(jiān)控概念DB2 在運(yùn)行過程中時(shí)經(jīng)常要做排序操作。一般說來,在 OLTP 類型的數(shù)據(jù)庫(kù)中,排序操作通常少于 OLAP 類型的數(shù)據(jù)庫(kù)環(huán)境。排序操作通常會(huì)在三種情況下發(fā)生,第一種情況是數(shù)據(jù)的查詢處理,比如 order by, group, 哈希連接,索引操作,內(nèi)存的表操作等等。第二種是當(dāng)我們載入操作的對(duì)象是帶有索引的表時(shí),再載入操作過程中就會(huì)涉及到對(duì)索引鍵的列表和排序,這樣就會(huì)產(chǎn)生排序操作。第三種情況發(fā)生在創(chuàng)建索引的時(shí)候。排序的效率因而直接影響到數(shù)據(jù)庫(kù)的響應(yīng)時(shí)間,我們必須對(duì)排序進(jìn)行有效監(jiān)控。監(jiān)控我們進(jìn)入 SAP 的 DBA Cockpit,然后在 Performance 的目錄下雙擊 Database, 在 Sorts 的標(biāo)簽內(nèi),可以看到當(dāng)前數(shù)據(jù)庫(kù)的排序狀況。圖6. 數(shù)據(jù)庫(kù)排序狀況可以從圖中看出,共享排序堆的大小為 1676KB, 私有排序堆的大小為 1340KB。如果沒有索引滿足所取的行的要求順序,或者 DB2 查詢優(yōu)化器認(rèn)為排序的代價(jià)低于索引掃描,那么就需要在排序堆中進(jìn)行排序。DB2 的排序分為私有排序和共享排序。私有排序發(fā)生在代理的私有代理內(nèi)存中,而共享排序發(fā)生在數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)共享內(nèi)存中。我們還可以看出,排序堆溢出次數(shù) 1174 次,總的排序次數(shù)為 310642 次。分析如果數(shù)據(jù)庫(kù)分配的排序堆大小不夠大,就會(huì)出現(xiàn)排序溢出的情況,這樣就需要?jiǎng)佑门R時(shí)表空間來輔助排序的進(jìn)行,由于臨時(shí)表空間存在于磁盤,這將大大影響排序的速度。理想情況下,排序溢出率 ((Sort overflows * 100) / Total sorts ) 不應(yīng)該超過 1%。如果這個(gè)溢出率過高,那么數(shù)據(jù)庫(kù)中很可能發(fā)生了大的排序,我們就需要調(diào)查出現(xiàn)過度排序的原因。在發(fā)現(xiàn)根源之前,一個(gè)簡(jiǎn)易的解決方案是增加 SORTHEAP 的大小。然而,這樣做通常是治標(biāo)不治本并且掩蓋了真實(shí)的性能問題。比較徹底的解決方案應(yīng)該是確定引起排序的 SQL 并更改該語句,或通過增加索引來避免或減少排序開銷。并發(fā)性和鎖的監(jiān)控概念數(shù)據(jù)庫(kù)的鎖是數(shù)據(jù)庫(kù)管理器用來控制應(yīng)用程序并發(fā)訪問數(shù)據(jù)庫(kù)數(shù)據(jù)并且保證數(shù)據(jù)庫(kù)數(shù)據(jù)的一致性的重要機(jī)制,數(shù)據(jù)庫(kù)中行和表都可以上鎖。數(shù)據(jù)庫(kù)的鎖在保證了數(shù)據(jù)庫(kù)數(shù)據(jù)一致性同時(shí)也在一定程度上降低了數(shù)據(jù)庫(kù)的響應(yīng)速度。鎖等待和死鎖是影響數(shù)據(jù)庫(kù)相應(yīng)速度的重要因素,糟糕的應(yīng)用程序設(shè)計(jì)和不合理的 SQL 查詢計(jì)劃的生成都會(huì)導(dǎo)致鎖等待和死鎖。鎖升級(jí) (Lock Escalation):一個(gè)鎖通常作為一個(gè)記錄存儲(chǔ)在內(nèi)存鎖表中,鎖表的大小可以由數(shù)據(jù)庫(kù)自動(dòng)調(diào)節(jié)。鎖升級(jí)一般發(fā)生在鎖的數(shù)量超過了數(shù)據(jù)庫(kù)配置參數(shù) MAXLOCKS 所指定的大小,為了減少鎖的數(shù)量,數(shù)據(jù)庫(kù)會(huì)把若干行一級(jí)的鎖合并為表鎖。這樣數(shù)據(jù)庫(kù)的并發(fā)性就會(huì)受到影響。監(jiān)控我們進(jìn)入 SAP 的 DBA Cockpit,然后在 Performance 的目錄下雙擊 Database, 在 Locks and Deadlocks 的標(biāo)簽內(nèi),可以看到當(dāng)前數(shù)據(jù)庫(kù)的鎖的狀況。圖7. 數(shù)據(jù)庫(kù)鎖狀況從圖中可以看到,當(dāng)前鎖表的大小為 22144KB,已經(jīng)使用了 94KB。鎖等待的平均時(shí)間為 10.40ms,沒有鎖升級(jí)和死鎖被檢測(cè)到。分析影響數(shù)據(jù)性能的有關(guān)鎖的問題主要集中在鎖等待,死鎖和鎖升級(jí)。這些問題的根源很可能是數(shù)據(jù)庫(kù)應(yīng)用的設(shè)計(jì)問題。因此,我們應(yīng)該仔細(xì)調(diào)查造成死鎖,鎖等待和鎖升級(jí)的應(yīng)用程序,以及其用到的 SQL 語句。同時(shí),在問題定位之前,我們也可以通過下面方法來解決數(shù)據(jù)庫(kù)鎖造成的性能問題。鎖等待和死鎖:如果要避免鎖等待和死鎖的問題我們需要注意數(shù)據(jù)庫(kù)參數(shù)中的 DLCHKTIME 和 LOCKTIMEOUT 兩個(gè)參數(shù)的設(shè)置。其中 DLCHKTIME 單位是毫秒,是 DB2 檢查死鎖的間隔時(shí)間,如果該值為 10000ms,則表明每隔 10 秒鐘數(shù)據(jù)庫(kù)會(huì)檢查一下有無死鎖存在,如有死鎖,會(huì)選擇回滾其中的某一個(gè)事務(wù),讓另外一個(gè)事務(wù)完成交易。LOCKTIMEOUT 單位是秒,是鎖等待最長(zhǎng)時(shí)間,超過該時(shí)間仍未獲得鎖,則返回錯(cuò)誤。LOCKTIMEOUT 的默認(rèn)值為 -1,這意味著鎖等待時(shí)間無限大,一般不推薦這種設(shè)置。DLCHKTIME 時(shí)間通常要設(shè)得比 LOCKTIMEOUT 時(shí)間小一些,否則還未發(fā)現(xiàn)死鎖,就會(huì)返回鎖等待超時(shí)錯(cuò)誤 (SQL0911N 返回碼 68) 。鎖升級(jí):要避免鎖升級(jí),我們應(yīng)該正確設(shè)置數(shù)據(jù)庫(kù)參數(shù) LOCKLIST 和 MAXLOCKS。LOCKLIST 表明分配給鎖表的內(nèi)存大小。每個(gè)數(shù)據(jù)庫(kù)都有一個(gè)鎖表,鎖表包含了并發(fā)連接到該數(shù)據(jù)庫(kù)的所有應(yīng)用程序所持有的鎖。MAXLOCKS 定義了應(yīng)用程序可以占有鎖表空間的百分比,當(dāng)一個(gè)應(yīng)用程序所使用的鎖表百分比達(dá)到 MAXLOCKS 時(shí),數(shù)據(jù)庫(kù)管理器會(huì)升級(jí)這些鎖,用表鎖代替行鎖,從而減少列表中鎖的數(shù)量。我們一般可以通過增加鎖表大小的方法解決鎖升級(jí)問題。日志性能監(jiān)控概念DB2 事務(wù)日志對(duì)于恢復(fù)來說極其重要。它們記錄對(duì)數(shù)據(jù)庫(kù)對(duì)象和數(shù)據(jù)所做的更改。在 DB2 中數(shù)據(jù)和索引的改變都會(huì)先被寫入日志緩沖區(qū),保證對(duì)數(shù)據(jù)所做的修改在記錄到數(shù)據(jù)庫(kù)之前,總是被具體化為日志文件。日志緩沖區(qū)的數(shù)據(jù)由日志處理器寫入磁盤。在下列情況下,查詢處理必須等待日志數(shù)據(jù)寫入磁盤后才能進(jìn)行: 事務(wù)提交時(shí)。 在將相應(yīng)數(shù)據(jù)頁寫入磁盤之前,因?yàn)?DB2 使用預(yù)寫日志記錄。預(yù)寫日志記錄的好處是當(dāng)執(zhí)行 COMMIT 語句完成事務(wù)之后,并非所有更改的數(shù)據(jù)和索引頁都需要寫入磁盤。 在元數(shù)據(jù)更改(一般通過執(zhí)行 DDL 語句產(chǎn)生的)之前。 日志緩沖區(qū)已滿。DB2 以這種方法管理向磁盤寫入日志數(shù)據(jù)的目的是盡可能地縮短處理延遲時(shí)間。在存在許多較小的并發(fā)事務(wù)的環(huán)境中,許多處理延遲是由 COMMIT 造成的,因?yàn)樗仨毜却罩緮?shù)據(jù)寫入磁盤后才能進(jìn)行。因此,日志處理器進(jìn)程頻繁地將少量日志數(shù)據(jù)寫入磁盤會(huì)造成大量處理延遲,另外一些延遲是由日志 I/O 開銷造成的。監(jiān)控我們進(jìn)入 SAP 的 DBA Cockpit,然后在 Performance 的目錄下雙擊 Database, 在 Logging 的標(biāo)簽內(nèi),可以看到當(dāng)前數(shù)據(jù)庫(kù)日志的狀況。圖8. 數(shù)據(jù)庫(kù)日志狀況我們?cè)趫D中可以看到日志文件以及日志緩沖區(qū)的情況。包括日志文件的數(shù)量,大小,數(shù)據(jù)庫(kù)使用的日志空間以及可用日志空間的大小。還可以看到日志緩沖區(qū)的情況,當(dāng)前日志緩沖區(qū)的命中率為 100%。分析由于數(shù)據(jù)庫(kù)中的處理必須等待日志數(shù)據(jù)寫入磁盤才能進(jìn)行,日志文件的讀寫速度對(duì)數(shù)據(jù)庫(kù)的響應(yīng)速度也會(huì)產(chǎn)生很大影響。因此,應(yīng)該把日志文件放到速度比較快的磁盤上,以減少磁盤 I/O 開銷。日志文件寫入的性能可以通過平均寫時(shí)間來觀察。另外,我們可以通過調(diào)整數(shù)據(jù)庫(kù)配置參數(shù) LOGBUFSZ 來指定日志緩沖區(qū)的大小。如果數(shù)據(jù)庫(kù)對(duì)于日志磁盤有相當(dāng)多的讀操作,或者希望有較高的磁盤利用率。一般來說,如果日志緩沖區(qū)的命中率小于 98%,那么可以增加這個(gè)緩沖區(qū)的大小以提高命中率。當(dāng)增加這個(gè)參數(shù)的值時(shí),也要考慮 DBHEAP 參數(shù),日志緩沖區(qū)使用的空間是 DBHEAP 參數(shù)所定義的內(nèi)存空間的一部分。數(shù)據(jù)庫(kù)統(tǒng)計(jì)信息監(jiān)控概念數(shù)據(jù)庫(kù)的統(tǒng)計(jì)信息反映了表及其相關(guān)索引的物理特點(diǎn)。統(tǒng)計(jì)信息主要包含: 表信息:表的行數(shù),使用的數(shù)據(jù)頁,溢出的行數(shù),列的平均長(zhǎng)度,列的最大最小值等。 索引信息:索引條目的數(shù)量,索引所關(guān)聯(lián)列的不同值的數(shù)量,索引的層數(shù)等。這些信息被數(shù)據(jù)庫(kù)查詢優(yōu)化器用來生成查詢計(jì)劃。好的訪問計(jì)劃對(duì)于 SQL 語句的快速執(zhí)行至關(guān)重要。我們需要想辦法保證統(tǒng)計(jì)信息準(zhǔn)確地反映了當(dāng)前數(shù)據(jù)庫(kù)的狀況。由于數(shù)據(jù)庫(kù)的表和索引總是隨著數(shù)據(jù)庫(kù)處理各種更新請(qǐng)求而不斷發(fā)生變化的,因此,總會(huì)出現(xiàn)統(tǒng)計(jì)信息過時(shí),而不能正確反映數(shù)據(jù)庫(kù)數(shù)據(jù)現(xiàn)狀的情況。這時(shí),數(shù)據(jù)庫(kù)查詢優(yōu)化器生成的查詢計(jì)劃可能不是最優(yōu)的,這將大大影響數(shù)據(jù)庫(kù)的查詢性能。我們應(yīng)該經(jīng)常檢查數(shù)據(jù)庫(kù)的統(tǒng)計(jì)信息是否為最新的,并及時(shí)更新統(tǒng)計(jì)信息。SAP 系統(tǒng)為我們提供了監(jiān)控和執(zhí)行統(tǒng)計(jì)信息收集的方法。監(jiān)控我們進(jìn)入 SAP 的 DBA Cockpit,然后在 Performance 的目錄下雙擊 Tables, 在 Table 列表中雙擊要監(jiān)控的表,在 Table 的標(biāo)簽中,我們可以看到當(dāng)前表的基本信息。這時(shí),如果我們點(diǎn)擊 Count 按鈕,就會(huì)看到統(tǒng)計(jì)信息的質(zhì)量。圖9. 表的統(tǒng)計(jì)信息狀況從圖中我們看到,表的當(dāng)前行數(shù)為 27,Deviation 為 8%。分析如果我們監(jiān)控到一個(gè)表的 Deviation 超過了 15%,我們就應(yīng)該重新收集這個(gè)表的統(tǒng)計(jì)信息。在 SAP 中我們可以選擇手動(dòng)收集統(tǒng)計(jì)信息。我們也可將系統(tǒng)配置成自動(dòng)收集統(tǒng)計(jì)信息,這樣大大減少了系統(tǒng)手動(dòng)維護(hù)的工作量。自動(dòng)統(tǒng)計(jì)信息收集通常每隔 2 個(gè)小時(shí)觸發(fā)一次,它會(huì)自動(dòng)選擇在 24 小時(shí)之內(nèi)沒有收集過統(tǒng)計(jì)信息的持久的基表。如果 SAP 系統(tǒng)進(jìn)行 Client Copy 或在 BI 表中加載大量數(shù)據(jù),由于這些操作在短時(shí)間就可以改變表的數(shù)據(jù)狀況及分布,因此會(huì)導(dǎo)致統(tǒng)計(jì)信息的過時(shí)。在 DB2 V9.5 中,為了解決這個(gè)問題,提供了一種 RTS (Real Time Statistics) 的特性,該特性可以允許在查詢被處理并優(yōu)化前對(duì)表的統(tǒng)計(jì)信息進(jìn)行收集或采樣,如果優(yōu)化器認(rèn)為重新收集統(tǒng)計(jì)信息比用過時(shí)的統(tǒng)計(jì)信息進(jìn)行查詢的速度快,那么會(huì)在處理該查詢之前重新收集表的統(tǒng)計(jì)信息,從而達(dá)到實(shí)時(shí)收集統(tǒng)計(jì)信息的目的。我們一般需要將數(shù)據(jù)庫(kù)配置參數(shù) AUTO_STMT_STATS 設(shè)為 ON 來開啟 RTS 特性,但在 SAP 系統(tǒng)中,RTS 已經(jīng)是默認(rèn)設(shè)置,我們無需進(jìn)行任何改變。回頁首結(jié)束語本文從數(shù)據(jù)庫(kù)問題檢測(cè)的一般思路和方法論出發(fā),介紹了如何通過 SAP 系統(tǒng)對(duì) DB2 的性能進(jìn)行監(jiān)控。