Oracle

創建索引後 sqlldr 執行緩慢

  • February 22, 2022

讓我解釋一下……

我執行了 1 次 sqlldr 會話,同時我在 6 個欄位的表中執行索引……現在索引已完成,但 sqlldr 執行速度非常慢,它每 30 分鐘載入一個文件……

現在,當我進行任何更改以關閉索引時,它不會讓我這樣做,即使我執行另一個 sqlldr 也會出現(ORA-000054 和 ORA-000604)的錯誤……

任何建議將不勝感激……下面是我的控製文件標題的範例……

OPTIONS(DIRECT=TRUE,ROWS=10000,BINDSIZE=209700000,readsize=209700000) 
load data 
append 
into table name 
FIELDS TERMINATED by '!' 
OPTIONALLY ENCLOSED by '"' 
trailing nullcols 

當我執行以下查詢時

從 dba_dml_locks 中選擇 *

session_id,owner,name,mode_held,mode_requested,last_convert,blocking_others 
123,username,tablename,exclusive,none,1228,not blocking 

任何建議…這是我的日常調度程序,用於載入大約 8000+ 大約 20GB 的文件,所以任何建議

由於現在沒有其他會話正在訪問您的表,因此鎖顯示為 NOT BLOCKING。一旦其他會話嘗試管理該表,它就會突然感覺它被阻塞了。該索引已被使用,因此只要其他會話正在使用它,您就無法管理它。

在大量載入的表上擁有索引肯定就像在載入程序程序中剎車一樣。您可以通過查看文件來幫助自己。請參閱正常和直接路徑載荷

也許分區可以幫助你。你可以準備一個表,載入它,完成它的索引並執行分區交換。只是不要在這樣的表上創建全域索引。

索引將減慢插入、更新和刪除

速度隨著索引變得碎片化,它變得更慢

你能做的很少

  • 按索引順序載入或盡可能接近以減慢碎片
  • 創建索引將填充因子小於 100 以減慢碎片
  • 禁用索引,載入,然後啟用(建構)索引

引用自:https://dba.stackexchange.com/questions/91652