insert 加append 的優缺點

insert 加append 的優缺點

使用insert 插入資料的時候,資料會先在SGA的快取中進行插入修改,commit後,日誌會記錄你的插入操作,之後等待資料同步到磁碟。加append 插入時,直接路徑插入,繞過SGA,資料就不在sga中進行快取,直接插入磁碟,這種叫“直接路徑插入 dirct path”,對插入而言少做事了,當然快,而且append會在原表中專門在表末端繼續開闢一塊連續空間讓它用,避免每次插入資料時,資料庫還去確定下原表的碎片中,有沒可利用的空間,所以使用append有點浪費空間,因為原表中的一些可用空間就浪費了(比如索引刪除某些記錄,只是在這個記錄上打個刪除標記,這些標記就是所謂的碎片,下次插入時,這些碎片可以給其他要插入的資料複用,加了append就表示不會複用碎片的空間)。

缺點是繞過了sga,所以下次查詢時,由於沒有資料快取,速度會慢。

特別注意:oracle讀和寫不會相互阻塞,但是如果磁碟io太多,讀和寫都會變得很慢,這時候不能說讀阻塞了寫,或者寫阻塞了讀,根本原因是磁碟io不夠。

系統中 直接路徑插入 dirct path 太多的情況下,有可能出現一個現象,直接路徑插入 dirct path 需要保證一個前提,就是記憶體中的資料,要和磁碟中的資料一致,記憶體或者磁碟中不能有髒資料,所以每次直接路徑插入 dirct path,都會重新整理資料,同步磁碟與記憶體的資料,這個同步操作很費io資源,而且同步的時候,其他會話的讀操作,需要等你同步完成,才能讀到真實準確的資料,如果io資源不夠,同步很慢,其他會話的讀操作就會在那裡等待(這種等待不是讀寫阻塞,是io原因導致的)。給人的假象就是“讀寫阻塞”。

所以,如果你的資料庫磁碟效能一般般,不要過多的使用append插入資料,“快”是需要代價的。