Sql最佳化(八):程式的可擴充套件性----direct insert的副作用
本篇繼續介紹不合理設計導致程式可擴充套件性差的例子。 資料庫執行出賬程式時,出現enq: TM - contention等待事件,主要原因是多個程式在insert bill_invoice_*時,使用了insert /*+ append*/這一方式,本來想透過append即direct insert方式提升速度,結果產生表級鎖。這樣開帳程式相互等待,實際上是變成序列的操作了,反而影響了速度。更嚴重的是,如果是生產系統,還會導致賬單表上所有修改操作都無法進行,影響其他重要業務,這個後果就很嚴重了。[@more@]
Direct insert這一用法有其速度快的優點,但也有其缺點,必須注意適用場合。大家想一下,為什麼oracle不預設用append呢?
這裡總結一下,direct-load insert(及append,direct方式sqlldr等)適合於:
1)大量記錄的insert時使用會提升速度,因為繞過databuffer直接訪問資料檔案,且不用掃描原有block上哪些有剩餘空間,而直接分配新空間
2)單個程式,通常是資料維護時,或者臨時倒資料等
這兩種情況下,使用direct-load insert不僅速度快,還減少了資料庫data buffer的使用,對資料庫上的其他應用產生的影響也較小。
不適合:
1)少量記錄insert。因為每次insert /*+append */後會進行索引維護,少量記錄insert使用append反而慢。
2)多使用者,OLTP環境。因為append會產生表級鎖。OLTP系統除了一些批處理操作,大多數應用都不應該使用append。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2124913/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Sql最佳化(十) 程式的可擴充套件性—sequence上的競爭SQL套件
- 可擴充套件性套件
- ETL的可擴充套件性和可維護性套件
- 可擴充套件性筆記一套件筆記
- Sql最佳化(九) 程式的可擴充套件性-- 短連線的危害,以及資料庫連線(connection)管理SQL套件資料庫
- 聊聊如何讓你的業務程式碼具有可擴充套件性套件
- 編寫可擴充套件程式套件
- 可預測的效能和實際的可擴充套件性——SQL Server 2008套件SQLServer
- 教你 4 步搭建彈性可擴充套件的 WebAPI套件WebAPI
- 服務的擴充套件性套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 可擴充套件的搜尋元件套件元件
- Sql最佳化(六)程式可擴充套件性:soft parse/hard parse,以及為什麼要使用繫結變數SQL套件變數
- 寫擴充套件性好的程式碼:函式套件函式
- bash的特有擴充套件屬性套件
- sql中的擴充套件學習SQL套件
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- 可擴充套件物件導向的canvas畫圖程式套件物件Canvas
- 軟體可擴充套件性:來自星巴克的經驗套件
- 獲取表空間是否可自動擴充套件的SQL套件SQL
- SQL Story摘錄(三)————可擴充套件設計 (轉)SQL套件
- 實用的可選項(Optional)擴充套件套件
- dubbo是如何實現可擴充套件的?套件
- bgo: 具備擴充套件性的 go 程式構建工具Go套件
- Chrome瀏覽器擴充套件開發系列之八:Chrome擴充套件的資料儲存Chrome瀏覽器套件
- 實現近乎無限可擴充套件性的7種設計模式套件設計模式
- 雲端CRM系統排名:靈活性與可擴充套件性的較量套件
- [譯] 論資料流的擴充套件性套件
- 高擴充套件性的學習路線套件
- Swift 擴充套件 Storyboard 屬性Swift套件
- 可擴充套件的TextView,ExpandableTextView與Scroller類的使用套件TextView
- 可擴充套件的使用者表設計套件
- dubbo是如何實現可擴充套件的?(二)套件
- Yahoo!Screwdriver:可擴充套件的持續整合工具套件
- 構建可擴充套件的有態服務套件
- 構建可擴充套件的應用(一) (轉)套件
- 從 IM 通訊 Web SDK 來看如何提高程式碼可維護性與可擴充套件性Web套件
- COLA的擴充套件性使用和原始碼研究套件原始碼