問題剛發生時,往往不易察覺,但是經過一連串的連鎖反應,各種不同的徵兆會逐漸浮現出來。理論上無論從哪一個面相鑽研下去,最後一定都會指到問題的核心,不過前提是,在過濾分析過程中,都不可忽視其它相關因素,這樣才能確保在解決問題的過程當中,不會偏失方向。若是把整個過程中所做的資料分析記錄下來,再交叉比對,其實您會發現,不管從那個面相切進去看問題,每個因素都互有關連,互為佐證。
舉例來說,若是資料庫系統效能受到影響、乃是肇因於某個SQL指令所使用的查詢條件複雜(若是Table裡的資料有建立索引,代表查詢有可能會使用 Index Scan,因此會用到CPU的運算資源),而且回傳的資料筆數相當多(這代表記憶體用量會升高。若是分配的記憶體不夠,那會將一部分資料移到虛擬記憶體,也就是會發生Page Swap,也就代表Disk I/O也會升高),這時候從表面上看來,能觀察到的現象可能有:
1.CPU使用率增高。
2.Disk I/O頻繁。
3.Memory用量大增。
若是從CPU使用率方面著手調查,您應該會看到是資料庫系統的行程佔用了不少CPU資源。接下來您要查出,是那些資料庫連線最為忙碌,而判斷的依據,就是 CPU、Disk I/O以及Memory用量。再從用量最高的連線著手調查,看是在執行什麼工作,也就是在執行什麼SQL指令,如此一步步地追查下去。同樣地,若是從 Memory方面著手,可以先分析實體記憶體以及虛擬記憶體的使用比例。若是資料容量己經超出實體記憶體許多,代表Page Swapping是無可避免的現象,此時可以找出那些行程的Disk I/O最為忙碌。若確定行程是屬於資料庫系統時,您就可利用之前所提的步驟往下繼續分析。
由以上例子可知,若能在解決問題的過程當中,考慮到可能的相關因素、並加以推導,就會發現哪些資料對您來說是有用的。只消幾個步驟,就可以去蕪存菁、事半功倍。若能把這些解決問題的步驟記錄下來,包括註明那些是該收集的資料,那您還可以逐漸發展出自己的專家系統。



1.不想再從業IT的人 於 2008/06/03 12:08 回應
你講的是個大方向,以我的了解(我是個DBA),一般資料庫的調校分為四個層次1.硬體(作業系統)
2.db instance
3.db object
4.db sql tuning
我的日常工作,就是產出每日的效能報表來做判斷
在作業系統層,你當然需要看memory, cpu的使用狀況
在db instance 層,每個資料庫都有自己的數據分析方法
在db object 層,通常的sql 語法大概都是analyze table, index等,然後去找出各物件目錢在
storage的狀況,表格資料是否分散,index是否歪斜或者leaf node太深,都需要做重整的考量
至於sql tune就是看執行計畫,因為sql 是一種宣告式的語言,你要處理資料,只需要告訴
資料庫系統,你要處理那些欄位,那些表格,需不需要排序或做運算,其它的事情,資料庫系統會幫
你做掉,因此你不知道資料庫系統會不會使用所謂的"最佳執行路徑"來幫你處理,比方說,
從台北到高雄,你可以搭巴士,坐飛機,乘火車,你願意的話,也可以自己開車或騎車,假如你找一個朋友幫你決定使用那種工具,你只跟他講說,我要到高雄,他幫你挑的工具,不見得是你覺得最喜歡的(最具效益),你要資料庫系統幫你處理資料,也是同樣的情況
我調過作業系統,instance, object,也調過sql 語法
作業系統層最明顯的例子在於記憶體不夠,這個狀況下,整個系統會hang住,你連登入都不行,
碰到這種狀況,如果該調整的都已經調了,就直接跟上面講說"加硬體就對了",不過通常主管都
像白癡一樣,跟他講了又不聽,老是以為自己經驗要多強,都是狗屎,重要的是提出數據來他也看
不懂,要怎麼跟他溝通?....哈!!!只有發生幾次狀況,被逼了..只好照著做....才能夠證明出你是
對的..............................哈........
有問題的話,大家就一同聊聊吧 !!