Oracle
創建索引後 sqlldr 執行緩慢
讓我解釋一下……
我執行了 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 以減慢碎片
- 禁用索引,載入,然後啟用(建構)索引