| 導購 | 订阅 | 在线投稿
分享
 
 
 

全面解析DB2性能調優方面的二十個疑難問題

來源:互聯網  2008-06-24 08:57:18  評論

1、邏輯設計應該總是能和物理設計完全映射

實際:DB2數據庫設計中物理設計應該盡可能的和邏輯結構相近,但是爲性能做出的物理設計改變不能被忽略,因爲它們並不來自于邏輯設計。

2、將所有東西放在一個緩沖池(BP0)中讓DB2管理

實際:就像在DB2手冊和其他地方說明的一樣,你只能在你的內存非常受限的情況下(10000 4k pages或者更少),你沒有時間去管理它,你也沒有考慮到性能的條件下,去這樣做。最好這樣說:不要放置除了DB2 catalog和目錄以外的東西進入BP0。

3、DSNDB07是100%順序的

實際:DSNDB07從來就不是100%順序的,因爲有工作文件中的對頁面進行的隨機活動。隨即活動可能高達45%,但是通常範圍是3%到10%。

4、VARCHAR應該總是被放置在行末

實際:這就是總是引發問題的話。如果表總是被讀,並且非常少的更新,那麽可以,這將會減少CPU負載,但是在其它情況下這樣做就是最壞的,甚至如果表是被壓縮的。只有在頻繁更新的情況下它應該被放置在末尾,但是並不通常這樣。

5、程序應該以遵循邏輯過程的方式編碼

實際:僞代碼或者一個邏輯過程圖並不需要考慮性能相關的編碼方式。在OLTP交易代碼中這非常具有戲劇性。

6、大多數過程不在SQL中進行

實際:事實上,問題的反面往往是正確的。SQL是一個非常豐富的語言,能夠處理大多數過程。實際上最大的困難是SQL經常被用來作爲I/O處理器而不是一個集合處理器。

7、代碼和引用表應該和DB2聲明的referential integrity(RI)一起使用

實際:RI不應該作爲一個編輯有效性的快捷方式而使用,這通常屬于別的什麽,但是應該在真父子關系中使用。

8、表至多有一到兩個索引

實際:表應該按照性能需求擁有多個索引。

9、非分割索引(NPI)不應該被使用,尤其是不應該在大的表中使用

實際:這關系到數不清的問題,總體上這些都能被克服,但是NPI是對適當的訪問和性能非常必要的。

10、大表應該被分割

實際:因爲一個表中有太多數據就意味著有性能下降,這是一個遺留的擔心。當一些表中有超過60億行數據時,這個理解已經被消除了。

11、DB2缺省就是好的

實際:缺省的一般不是最好的,他們因版本不同而改變。比如考慮綁定參數CURRENTDATA。

12、不要在SQL WHERE謂詞裏使用否定

實際:另外一個這種規則並沒有被解釋清楚。只有謂詞是一個否定時,SQL訪問路徑可能使用一個不必要的表空間掃描。但是在其它的多數情況下,多余的過濾應該在DB2引擎裏完成,這會較好。

13、我可以只依靠EXPLAIN來決定是否訪問路徑是好的

實際:EXPLAIN不顯示執行的查詢塊的順序,不會告訴你1或者2階段的謂詞,不會告訴你一個塊會多長時間執行一次。基本的,EXPLAIN只是導出一些數據到一個表裏,然後結合其他一些信息來進行更多的一些解釋。有一些工具來幫助處理此過程(如Visual Explain),但是如果所有的事實都沒有被考慮的話,這樣的方式只會帶來壞處。

14、不要做EDM池太大以避免其分頁

實際:EDM池通常通過分頁來提升性能(這裏分頁是指擴展存儲,而不是磁盤)而不是變得更小並且因爲頁面置換和其他因素持續重建內部結構。

15、擴展不會關系其他任何東西

實際:什麽時候開始的?未來如果世界上充滿了SAN或者ESS,那差不多。擴展的影響已經因爲新的磁盤緩存控制器而變得很小了,但是仍然有一些額外的檢查和處理需要來管理它們。

16、關系的劃分不會在DB2中使用

實際:關系的劃分已經在過去的許多系統中被使用了,可以有效的通過數據庫設計者和程序開發者來實現。在目前的商業智能(BI)和市場系統中,它可以被數次用在每個單個程序中。

17、將所有的包綁定到兩個計劃中:一個批處理和一個在線的

實際:在介紹DB2包的時候,這是一個不好的陳述。有許多理由可以說這個理解是錯誤的。

18、未授權的讀是不好的

實際:未授權的讀並不是一個四字單詞但是是一個非常好的性能增強,可以被用在比經常理解的更多的地方。

19、在沒有超時和死鎖的情況下不會有鎖問題

實際:事實上沒有一個問題發生並不意味著沒有需要關注的的性能問題。經常鎖定不被認爲是一個問題,因爲注意力主要放在反應的調節測量(統計死鎖或者超時的數量),而不是後發式的調節(監控鎖等待時間)。

20、ESA數據壓縮總是好的

實際:當壓縮能被在很多地方起作用時,有一些情況它能帶來問題。每種情況都要在壓縮使用前決定是否使用它。這不是可選的,而是必須要在高層決定是否使用還是不使用。

1、邏輯設計應該總是能和物理設計完全映射 實際:DB2數據庫設計中物理設計應該盡可能的和邏輯結構相近,但是爲性能做出的物理設計改變不能被忽略,因爲它們並不來自于邏輯設計。 2、將所有東西放在一個緩沖池(BP0)中讓DB2管理 實際:就像在DB2手冊和其他地方說明的一樣,你只能在你的內存非常受限的情況下(10000 4k pages或者更少),你沒有時間去管理它,你也沒有考慮到性能的條件下,去這樣做。最好這樣說:不要放置除了DB2 catalog和目錄以外的東西進入BP0。 3、DSNDB07是100%順序的 實際:DSNDB07從來就不是100%順序的,因爲有工作文件中的對頁面進行的隨機活動。隨即活動可能高達45%,但是通常範圍是3%到10%。 4、VARCHAR應該總是被放置在行末 實際:這就是總是引發問題的話。如果表總是被讀,並且非常少的更新,那麽可以,這將會減少CPU負載,但是在其它情況下這樣做就是最壞的,甚至如果表是被壓縮的。只有在頻繁更新的情況下它應該被放置在末尾,但是並不通常這樣。 5、程序應該以遵循邏輯過程的方式編碼 實際:僞代碼或者一個邏輯過程圖並不需要考慮性能相關的編碼方式。在OLTP交易代碼中這非常具有戲劇性。 6、大多數過程不在SQL中進行 實際:事實上,問題的反面往往是正確的。SQL是一個非常豐富的語言,能夠處理大多數過程。實際上最大的困難是SQL經常被用來作爲I/O處理器而不是一個集合處理器。 7、代碼和引用表應該和DB2聲明的referential integrity(RI)一起使用 實際:RI不應該作爲一個編輯有效性的快捷方式而使用,這通常屬于別的什麽,但是應該在真父子關系中使用。 8、表至多有一到兩個索引 實際:表應該按照性能需求擁有多個索引。 9、非分割索引(NPI)不應該被使用,尤其是不應該在大的表中使用 實際:這關系到數不清的問題,總體上這些都能被克服,但是NPI是對適當的訪問和性能非常必要的。 10、大表應該被分割 實際:因爲一個表中有太多數據就意味著有性能下降,這是一個遺留的擔心。當一些表中有超過60億行數據時,這個理解已經被消除了。 11、DB2缺省就是好的 實際:缺省的一般不是最好的,他們因版本不同而改變。比如考慮綁定參數CURRENTDATA。 12、不要在SQL WHERE謂詞裏使用否定 實際:另外一個這種規則並沒有被解釋清楚。只有謂詞是一個否定時,SQL訪問路徑可能使用一個不必要的表空間掃描。但是在其它的多數情況下,多余的過濾應該在DB2引擎裏完成,這會較好。 13、我可以只依靠EXPLAIN來決定是否訪問路徑是好的 實際:EXPLAIN不顯示執行的查詢塊的順序,不會告訴你1或者2階段的謂詞,不會告訴你一個塊會多長時間執行一次。基本的,EXPLAIN只是導出一些數據到一個表裏,然後結合其他一些信息來進行更多的一些解釋。有一些工具來幫助處理此過程(如Visual Explain),但是如果所有的事實都沒有被考慮的話,這樣的方式只會帶來壞處。 14、不要做EDM池太大以避免其分頁 實際:EDM池通常通過分頁來提升性能(這裏分頁是指擴展存儲,而不是磁盤)而不是變得更小並且因爲頁面置換和其他因素持續重建內部結構。 15、擴展不會關系其他任何東西 實際:什麽時候開始的?未來如果世界上充滿了SAN或者ESS,那差不多。擴展的影響已經因爲新的磁盤緩存控制器而變得很小了,但是仍然有一些額外的檢查和處理需要來管理它們。 16、關系的劃分不會在DB2中使用 實際:關系的劃分已經在過去的許多系統中被使用了,可以有效的通過數據庫設計者和程序開發者來實現。在目前的商業智能(BI)和市場系統中,它可以被數次用在每個單個程序中。 17、將所有的包綁定到兩個計劃中:一個批處理和一個在線的 實際:在介紹DB2包的時候,這是一個不好的陳述。有許多理由可以說這個理解是錯誤的。 18、未授權的讀是不好的 實際:未授權的讀並不是一個四字單詞但是是一個非常好的性能增強,可以被用在比經常理解的更多的地方。 19、在沒有超時和死鎖的情況下不會有鎖問題 實際:事實上沒有一個問題發生並不意味著沒有需要關注的的性能問題。經常鎖定不被認爲是一個問題,因爲注意力主要放在反應的調節測量(統計死鎖或者超時的數量),而不是後發式的調節(監控鎖等待時間)。 20、ESA數據壓縮總是好的 實際:當壓縮能被在很多地方起作用時,有一些情況它能帶來問題。每種情況都要在壓縮使用前決定是否使用它。這不是可選的,而是必須要在高層決定是否使用還是不使用。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有