分析DB2數(shù)據(jù)庫(kù)性能理解的主要誤區(qū)
關(guān)于DB2數(shù)據(jù)庫(kù)性能理解的主要誤區(qū)的講解,比較適合剛剛?cè)腴T(mén)的初學(xué)者學(xué)習(xí),為大家很好的掌握DB2數(shù)據(jù)庫(kù)的知識(shí)提供了一個(gè)很好的參考文獻(xiàn),這樣一開(kāi)始大家就掌握了正確的知識(shí),避免以后走彎路,希望對(duì)大家能夠有所幫助。
DB2數(shù)據(jù)庫(kù)性能理解的主要誤區(qū):
邏輯設(shè)計(jì)應(yīng)該總是能和物理設(shè)計(jì)完全映射
實(shí)際:DB2數(shù)據(jù)庫(kù)設(shè)計(jì)中物理設(shè)計(jì)應(yīng)該盡可能的和邏輯結(jié)構(gòu)相近,但是為性能做出的物理設(shè)計(jì)改變不能被忽略,因?yàn)樗鼈儾⒉粊?lái)自于邏輯設(shè)計(jì)。
將所有東西放在一個(gè)緩沖池(BP0)中讓DB2管理
實(shí)際:就像在DB2手冊(cè)和其他地方說(shuō)明的一樣,你只能在你的內(nèi)存非常受限的情況下(10000 4k pages或者更少),你沒(méi)有時(shí)間去管理它,你也沒(méi)有考慮到性能的條件下,去這樣做。最好這樣說(shuō):不要放置除了DB2 catalog和目錄以外的東西進(jìn)入BP0。
DSNDB07是100%順序的
實(shí)際:DSNDB07從來(lái)就不是100%順序的,因?yàn)橛泄ぷ魑募械膶?duì)頁(yè)面進(jìn)行的隨機(jī)活動(dòng)。隨即活動(dòng)可能高達(dá)45%,但是通常范圍是3%到10%。
VARCHAR應(yīng)該總是被放置在行末
實(shí)際:這就是總是引發(fā)問(wèn)題的話(huà)。如果表總是被讀,并且非常少的更新,那么可以,這將會(huì)減少CPU負(fù)載,但是在其它情況下這樣做就是最壞的,甚至如果表是被壓縮的。只有在頻繁更新的情況下它應(yīng)該被放置在末尾,但是并不通常這樣。
程序應(yīng)該以遵循邏輯過(guò)程的方式編碼
實(shí)際:偽代碼或者一個(gè)邏輯過(guò)程圖并不需要考慮性能相關(guān)的編碼方式。在OLTP交易代碼中這非常具有戲劇性。
大多數(shù)過(guò)程不在SQL中進(jìn)行
實(shí)際:事實(shí)上,問(wèn)題的反面往往是正確的。SQL是一個(gè)非常豐富的語(yǔ)言,能夠處理大多數(shù)過(guò)程。實(shí)際上最大的困難是SQL經(jīng)常被用來(lái)作為I/O處理器而不是一個(gè)集合處理器。
代碼和引用表應(yīng)該和DB2聲明的referential integrity(RI)一起使用
實(shí)際:RI不應(yīng)該作為一個(gè)編輯有效性的快捷方式而使用,這通常屬于別的什么,但是應(yīng)該在真父子關(guān)系中使用。
表至多有一到兩個(gè)索引
實(shí)際:表應(yīng)該按照性能需求擁有多個(gè)索引。
非分割索引(NPI)不應(yīng)該被使用,尤其是不應(yīng)該在大的表中使用
實(shí)際:這關(guān)系到數(shù)不清的問(wèn)題,總體上這些都能被克服,但是NPI是對(duì)適當(dāng)?shù)脑L(fǎng)問(wèn)和性能非常必要的。
大表應(yīng)該被分割
實(shí)際:因?yàn)橐粋€(gè)表中有太多數(shù)據(jù)就意味著有性能下降,這是一個(gè)遺留的擔(dān)心。當(dāng)一些表中有超過(guò)60億行數(shù)據(jù)時(shí),這個(gè)理解已經(jīng)被消除了。
DB2缺省就是好的
實(shí)際:缺省的一般不是最好的,他們因版本不同而改變。比如考慮綁定參數(shù)CURRENTDATA。
不要在SQL WHERE謂詞里使用否定
實(shí)際:另外一個(gè)這種規(guī)則并沒(méi)有被解釋清楚。只有謂詞是一個(gè)否定時(shí),SQL訪(fǎng)問(wèn)路徑可能使用一個(gè)不必要的表空間掃描。但是在其它的多數(shù)情況下,多余的過(guò)濾應(yīng)該在DB2引擎里完成,這會(huì)較好。
我可以只依靠EXPLAIN來(lái)決定是否訪(fǎng)問(wèn)路徑是好的
實(shí)際:EXPLAIN不顯示執(zhí)行的查詢(xún)塊的順序,不會(huì)告訴你1或者2階段的謂詞,不會(huì)告訴你一個(gè)塊會(huì)多長(zhǎng)時(shí)間執(zhí)行一次。基本的,EXPLAIN只是導(dǎo)出一些數(shù)據(jù)到一個(gè)表里,然后結(jié)合其他一些信息來(lái)進(jìn)行更多的一些解釋。有一些工具來(lái)幫助處理此過(guò)程(如Visual Explain),但是如果所有的事實(shí)都沒(méi)有被考慮的話(huà),這樣的方式只會(huì)帶來(lái)壞處。
不要做EDM池太大以避免其分頁(yè)
實(shí)際:EDM池通常通過(guò)分頁(yè)來(lái)提升性能(這里分頁(yè)是指擴(kuò)展存儲(chǔ),而不是磁盤(pán))而不是變得更小并且因?yàn)轫?yè)面置換和其他因素持續(xù)重建內(nèi)部結(jié)構(gòu)。
擴(kuò)展不會(huì)關(guān)系其他任何東西
實(shí)際:什么時(shí)候開(kāi)始的?未來(lái)如果世界上充滿(mǎn)了SAN或者ESS,那差不多。擴(kuò)展的影響已經(jīng)因?yàn)樾碌拇疟P(pán)緩存控制器而變得很小了,但是仍然有一些額外的檢查和處理需要來(lái)管理它們。
關(guān)系的劃分不會(huì)在DB2中使用
實(shí)際:關(guān)系的劃分已經(jīng)在過(guò)去的許多系統(tǒng)中被使用了,可以有效的通過(guò)數(shù)據(jù)庫(kù)設(shè)計(jì)者和程序開(kāi)發(fā)者來(lái)實(shí)現(xiàn)。在目前的商業(yè)智能(BI)和市場(chǎng)系統(tǒng)中,它可以被數(shù)次用在每個(gè)單個(gè)程序中。
將所有的包綁定到兩個(gè)計(jì)劃中:一個(gè)批處理和一個(gè)在線(xiàn)的
實(shí)際:在介紹DB2包的時(shí)候,這是一個(gè)不好的陳述。有許多理由可以說(shuō)這個(gè)理解是錯(cuò)誤的。
未授權(quán)的讀是不好的
實(shí)際:未授權(quán)的讀并不是一個(gè)四字單詞但是是一個(gè)非常好的性能增強(qiáng),可以被用在比經(jīng)常理解的更多的地方。
在沒(méi)有超時(shí)和死鎖的情況下不會(huì)有鎖問(wèn)題
實(shí)際:事實(shí)上沒(méi)有一個(gè)問(wèn)題發(fā)生并不意味著沒(méi)有需要關(guān)注的的性能問(wèn)題。經(jīng)常鎖定不被認(rèn)為是一個(gè)問(wèn)題,因?yàn)樽⒁饬χ饕旁诜磻?yīng)的調(diào)節(jié)測(cè)量(統(tǒng)計(jì)死鎖或者超時(shí)的數(shù)量),而不是后發(fā)式的調(diào)節(jié)(監(jiān)控鎖等待時(shí)間)。
ESA數(shù)據(jù)壓縮總是好的
實(shí)際:當(dāng)壓縮能被在很多地方起作用時(shí),有一些情況它能帶來(lái)問(wèn)題。每種情況都要在壓縮使用前決定是否使用它。這不是可選的,而是必須要在高層決定是否使用還是不使用。
【編輯推薦】