原創|使用教程|編輯:龔雪|2015-03-25 09:58:43.000|閱讀 195 次
概述:今天和Oracle的一個資深前輩聊了下,聊了不少技術的問題,他也來了興致,隨機提了幾個問題來問我,發現看似簡單的問題還是有不少的干貨,很多東西似懂非懂其實還是沒有深入理解,限于篇幅,整理了一部分的問題,有些問題回答的對,但是感覺理解還是不夠清晰深入。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
今天和Oracle的一個資深前輩聊了下,聊了不少技術的問題,他也來了興致,隨機提了幾個問題來問我,發現看似簡單的問題還是有不少的干貨,很多東西似懂非懂其實還是沒有深入理解,限于篇幅,整理了一部分的問題,有些問題回答的對,但是感覺理解還是不夠清晰深入。
log buffer的作用是什么?
log buffer的作用主要有兩部分,生成重做記錄,另一部分就是把重做記錄寫入重做日志文件commit操作的時候,是否會刷新log buffer?其實每一個commit就會觸發一次改動向量,完成了一次事務的更新。
pga的作用是什么?
pga的全稱是program global area,它是一個內存區域,該區域中包含了于某個特定服務器進程 相關的數據和控制信息。對于每個session來說,其執行的sql語句鎖傳入的綁定變量會存儲在pga中,需要執行比較復雜的sql語句時,排序和hash join連接這類的session所占用的內存空間也來自于PGA.
進程之間是否會共享PGA?
pga所占用的內存區域只能被其所屬的進程訪問,而不能被其它進程訪問,所以pga中也不需要latch這樣的內存結構來保護其中的信息。
buffer cache中的算法——hash算法和LRU算法。
當前臺進程發出一個select或者dml語句的時候,oracle會根據執行計劃找到符合條件的數據塊,然后會根據請求數據塊的地址以及數據塊的類型作為參數,運用hash算法找到數據塊所處的hash bucket,即確定數據塊是在那個hash chain上。
LRU算法即最近最少使用的buffer header鏈表,LRU鏈表串聯起來的buffer header都執行可用數據塊,buffer按照被使用的先后順序掛在LRUlianbiao shang ,先使用的buffer掛在LRU鏈表的后面,后被使用的buffer則掛在LRU鏈表的前面。
buffer cache中數據塊的狀態:
臟數據塊,空閑數據塊,干凈數據塊,釘住的數據塊。對于空閑數據塊和干凈數據塊,都統稱為可用數據塊。因為其中的內容可以被新的數據內容覆蓋。
數據字典的信息存儲在哪里?
數據字典的信息存儲在shared pool中的dictionary cache中。dictionary cache中存放了執行sql語句的過程中,所參照的數據字典的信息,包含sql語句所涉及的表名,表列,權限信息等,dictionary cache中的信息都是以數據行的形式存放的。所以也可以叫做row cache.
進程CKPT在哪里找到對應的信息?
CKPT即檢查點為止(checkpoint position),檢查點的位置記錄在控制文件中,在檢查點隊列上串起來的都是臟數據塊所對應的buffer header,每次dbwr寫臟數據塊的時候,也是從檢查點隊列上掃描臟數據塊,然后將臟數據塊寫入數據文件的。
數據恢復時的前滾與回滾的過程。
如果數據庫實例非正常關閉,則檢查點end scn號為空,在數據恢復的時候,會從控制文件中取得檢查點的位置,然后smon會到聯機日志文件中找到對應的檢查點位置,應用所有的重做條目,從而在buffer cache里又恢復了實例奔潰前那個時間點的狀態,這個過叫做前滾。
如果前滾完畢之后,smon進程會立即打開數據庫,但是這個時候數據庫中還含有哪些處于中間狀態的,沒有提交也沒有回滾的數據庫,也就是臟數據塊,因為沒有被提交,所以需要被回滾,打開數據庫以后,smon會在后臺做回滾的操作。
rman配置修改備份文件路徑的方法。
可以通過em,grid control中的圖形界面來修改rman中的備份文件的路徑,或者使用config命令方式來設定。
自己sql調優常用的幾個包是?dbms_sqltune,dbms_sql_advisor。
通過這些也發現自己對數據庫有了一定的認識,但是還是需要不斷的深化。可能自己碰到好多問題的時候都是囫圇吞棗,一問得細節一點就卡殼。人就是這樣的過程中不斷的提升自我,也從側面反映出自己近期有點松懈,沒有能夠投入更加高效的精力來,努力努力,有則改進,無則加冕,生活本屬不易,不能得過且過。:)
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn