某Q友問題--啟用了for each row觸發器,如何提升forall操作效能
網友問題
問個問題,forall程式碼塊如果碰到for each row觸發器,效果會如何,會有影響嗎?對於這類問題,有好的插入方法嗎,因為這樣插入太慢了?
測試結論
1,如果定義了for each row的觸發器,基於forall的PLSQL程式碼會作用於每條DML語句對應的記錄(表的每條記錄,因為FORALL是一條性處理表的多條記錄)
2,啟用了for each row的觸發器,forall的效能會受效能,但雖受影響,效能仍好於非forall的程式碼
3,觸發器對於forall及non forall PLSQL程式碼影響非常明顯
4,只能在插入時禁用觸發器(因為一般用FORALL肯定是大批次DML操作,而大批次操作一般執行基於OLTP肯定是在非業務高峰期間執行,比如晚上或週末),爾後啟用
測試明細
SQL> select * from v$version where rownum<=2;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
SQL> conn scott/system
Connected.
SQL> create table t_all(a int,b int);
Table created.
SQL> create or replace procedure proc_forall
2 is
3 type a_tab is table of t_all.a%type index by binary_integer;
4 type b_tab is table of t_all.b%type index by binary_integer;
5 v_a a_tab;
6 v_b b_tab;
7 begin
8 for i in 1..3 loop
9 v_a(i):=i;
10 v_b(i):=i;
11 end loop;
12
13 forall i in 1..v_a.count
14 insert into t_all values(v_a(i),v_b(i));
15 commit;
16 end;
17 /
Procedure created.
啟用for each row觸發器
04:25:33 SQL> alter trigger trc_t_all enable;
Trigger altered.
Elapsed: 00:00:00.09
04:25:35 SQL>
04:27:14 SQL>
04:27:15 SQL>
04:27:15 SQL>
04:27:15 SQL> exec proc_forall;
PL/SQL procedure successfully completed.
Elapsed: 00:01:01.82
禁用for each row觸發器
04:28:34 SQL> alter trigger trc_t_all disable;
Trigger altered.
Elapsed: 00:00:00.13
04:30:26 SQL> exec proc_forall;
PL/SQL procedure successfully completed.
Elapsed: 00:00:03.04
啟用for each row
04:32:20 SQL> alter trigger trc_t_all enable;
Trigger altered.
Elapsed: 00:00:00.01
04:32:40 SQL> exec proc_non_forall;
PL/SQL procedure successfully completed.
Elapsed: 00:03:17.57
個人簡介
8年oracle從業經驗,具備豐富的oracle技能,目前在國內北京某專業oracle服務公司從事高階技術顧問。
服務過的客戶:
中國電信
中國移動
中國聯通
中國電通
國家電網
四川達州商業銀行
湖南老百姓大藥房
山西省公安廳
中國郵政
北京302醫院
河北廊坊新奧集團公司
專案經驗:
中國電信3G專案AAA系統資料庫部署及最佳化
中國聯通CRM資料庫效能最佳化
中國移動10086電商平臺資料庫部署及最佳化
湖南老百姓大藥房ERR資料庫sql最佳化專案
四川達州商業銀行TCBS核心業務系統資料庫模型設計和RAC部署及最佳化
四川達州商業銀行TCBS核心業務系統後端批處理儲存過程功能模組編寫及最佳化
北京高鐵訊號監控系統RAC資料庫部署及最佳化
河南宇通客車資料庫效能最佳化
中國電信電商平臺核心採購模組表模型設計及最佳化
中國郵政儲蓄系統資料庫效能最佳化及sql最佳化
北京302醫院資料庫遷移實施
河北廊坊新奧data guard部署及最佳化
山西公安廳身份證審計資料庫系統故障評估
國家電網上海災備專案4 node rac+adg
貴州移動crm及客服資料庫效能最佳化專案
貴州移動crm及客服務資料庫sql稽核專案
深圳穆迪軟體有限公司資料庫效能最佳化專案
貴州移動crm及客服資料庫效能最佳化專案
貴州移動crm及客服務資料庫sql稽核專案
深圳穆迪軟體有限公司資料庫效能最佳化專案
聯絡方式:
手機:18201115468
qq : 305076427
qq微博: wisdomone1
新浪微博:wisdomone9
qq群:275813900
itpub部落格名稱:wisdomone1 http://blog.itpub.net/9240380/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-1715195/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oralce觸發器解決問題觸發器
- postgresql 觸發器操作SQL觸發器
- 某Q友的問題--如何讓sqlplus spool產生的日誌附加sysdate日期資訊-shellSQL
- oracle觸發器~ 更新多表的問題Oracle觸發器
- DML操作 DDL觸發器觸發器
- 觸發器中操作LOB觸發器
- 利用觸發器監控對某個表操作的使用者資訊觸發器
- Oracle觸發器死鎖問題解決Oracle觸發器
- 如何提升高併發量伺服器的效能伺服器
- Oracle資料庫DDL審計觸發器觸發的bug問題Oracle資料庫觸發器
- Oracle 觸發器 限制DDL操作Oracle觸發器
- 由row cache lock等待事件引起的效能問題事件
- 某Q友問題-如何在windows環境ftp檔案到ftp server並且重新命名上傳檔案WindowsFTPServer
- PostgreSQL批量、單步寫入-row,statement觸發器(中間表)、CTE幾種用法效能對比SQL觸發器
- Win10斯巴達瀏覽器觸控效能大提升Win10瀏覽器
- 某Q友問題—為何sqlplus中new_value後續的..到底為何含義SQL
- CQRS批量操作的效能問題
- 資料庫觸發器,禁止DDL操作資料庫觸發器
- itpub網友問題--如何讓某資料庫使用者不能查詢all_users資料庫
- Oracle使用觸發器實現ID自增的問題Oracle觸發器
- oracle變異表觸發器相關問題解決Oracle觸發器
- 【知識分享】如何提升高併發量伺服器的效能伺服器
- 如何快速排查Linux伺服器效能問題Linux伺服器
- 利用觸發器解決更新主鍵衝突的問題觸發器
- 某個Eclipse無法啟動的問題Eclipse
- 記一次row cache lock引起的效能問題分析處理
- 透過觸發器禁止模式物件的DDL操作觸發器模式物件
- 你真的會用react hooks?看看eslint警告吧!(如何發請求、提升程式碼效能等問題)ReactHookEsLint
- mysql併發操作問題MySql
- Oracle觸發器觸發級別Oracle觸發器
- 如何提升Web前端效能?Web前端
- 如何提升瀏覽器CSS的網路效能? – csswizardry瀏覽器CSS
- PL/SQL 批次Bind Forall 的效能表現SQL
- forall_for loop效能對比測試_plsqlOOPSQL
- 如何檢視某個查詢用了多少TempDB空間
- 如何提升自己對問題的理解深度?
- 如何分析報表效能問題
- ORACLE 禁用/啟用外來鍵和觸發器Oracle觸發器