oracle筆記整理10——效能調優之臨時表與物化檢視
1. 臨時表
1) 概念
a) 臨時表跟永久表最大的區別就是表中的資料不會永遠的存在
b) Oracle臨時表分為會話級臨時表和事務級臨時表。
c) 會話臨時表,結束或中斷會話時清空資料。
create global temporary table XXX()
on commit preserve rows;
d) 事務臨時表,commit之後清空資料。
on commit delete rows;
2) 原理
a) 臨時表不會為它們的塊生成redo。因此,對臨時表的操作不是“可恢復的” 。修改臨時表中的一個塊時,不會將這個修改記錄到重做日誌檔案中。不過,臨時表確實會生成 undo,而且這個 undo 會計入日誌。因此,臨時表也會生成一些redo。
b) 這是因為你能回滾到事務中的一個 SAVEPOINT。由於undo資料必須建立日誌,因此臨時表會為所生成的undo生成一些重做日誌。這樣似乎很糟糕。但是,在臨時表上執行的 SQL 語句主要是 INSERT 和SELECT。幸運的是,INSERT 只生成極少的 undo(需要把塊恢復為插入前的“沒有”狀態,而儲存“沒有”不需要多少空間),另外SELECT根本不生成undo。
c) Oracle的臨時表還保證了多使用者操作的獨立性:對於使用同一張臨時表的不同使用者,ORACLE都會分配一個獨立的Temp Segment,這樣就避免了多個使用者在對同一張臨時表操作時發生交叉,從而保證了多個使用者操作的併發性和獨立性;
3) 應用優化
a) 當多表關聯,且存在小表時。可以採用將大表關聯得到比較小的結果集合存放在臨時表中,再用臨時表去關聯小表。
b) 如果某個資料集在這個會話期間需多次使用,建議使用臨時表。
2. 物化檢視
1) 概念
檢視是一個虛擬表(也可以認為是一條語句),基於它建立時指定的查詢語句返回的結果集。每次訪問它都會導致這個查詢語句被執行一次。為了避免每次訪問都執行這個查詢,可以將這個查詢結果集儲存到一個物化檢視(也叫實體化檢視)。
2) 型別
物化檢視的型別:ON DEMAND、ON COMMIT
a) on demand
根據需要(ON DEMAND):物化檢視會在顯式請求的情況下進行重新整理(可以通過手工呼叫,也可以通過執行按照指定的時間間隔的任務)。這意味著從基礎表修改到物化檢視重新整理這段時間內,物化檢視中可能包含失效的資料。
b) on commit
在提交時(ON COMMIT):物化檢視會在基礎表修改所在的同一個事務裡進行自動重新整理,也就是說,物化檢視總是包含最新的資料;(這種方式比較少用)
3) 重新整理
a) 完全重新整理(COMPLETE)
會刪除表中所有的記錄(如果是單表重新整理,可能會採用TRUNCATE的方式),然後根據物化檢視中查詢語句的定義重新生成物化檢視。
b) 快速重新整理(FAST)
採用增量重新整理的機制,只將自上次重新整理以後對基表進行的所有操作重新整理到物化檢視中去。
c) FORCE方式
這是預設的資料重新整理方式。Oracle會自動判斷是否滿足快速重新整理的條件,如果滿足則進行快速重新整理,否則進行完全重新整理。
4) 語法
create materialized view view_name
refresh [fast|complete|force]
[
on [commit|demand] |
start with (start_time) next (next_time)
]
AS subquery;
5) 示例
a) 建立MATERIALIZED VIEW:
create materialized view mv_materialized_test refresh force on demand start with sysdate next
to_date(concat(to_char(sysdate+1,'dd-mm-yyyy'),'10:25:00'),'dd-mm-yyyy hh24:mi:ss') as
select * from user_info;
--這個物化檢視在每天10:25進行重新整理
b) 修改重新整理時間:
alter materialized view mv_materialized_test refresh force on demand start with sysdate
next to_date(concat(to_char(sysdate+1,'dd-mm-yyyy'),' 23:00:00'),'dd-mm-yyyy hh24:mi:ss');
或
alter materialized view mv_materialized_test refresh force on demand start with sysdate
next trunc(sysdate,'dd')+1+1/24; -- 每天1點重新整理
相關文章
- ClickHouse 效能優化?試試物化檢視優化
- ClickHouse效能優化?試試物化檢視優化
- 檢視oracle臨時表空間佔用率的檢視Oracle
- 物化檢視快速重新整理與ORA-00001
- LDA臨時筆記,待整理LDA筆記
- hg_job配置定時重新整理物化檢視
- Oracle普通檢視和物化檢視的區別Oracle
- ORACLE常見檢視和表整理Oracle
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle
- 【MVIEW】Oracle通過物化檢視同步表資料及簡介ViewOracle
- StarRocks 物化檢視重新整理流程和原理
- StarRocks 物化檢視重新整理流程及原理
- Oracle物化檢視的建立及使用(二)Oracle
- Oracle物化檢視的建立及使用(一)Oracle
- 物化檢視
- 【SQL】Oracle查詢轉換之物化檢視查詢重寫SQLOracle
- Postgres使用trigger自動重新整理物化檢視
- 《CSS重構:樣式表效能調優》讀書筆記CSS筆記
- RabbitMq 最全的效能調優筆記MQ筆記
- 物化檢視(zt)
- 資料庫優化之臨時表優化資料庫優化
- oracle 臨時表的使用Oracle
- ORACLE臨時表總結Oracle
- js效能優化相關內容筆記整理JS優化筆記
- Oracle 臨時表 OracleDataAdapter 批次更新OracleAPT
- oracle資料庫檢視鎖表的sql語句整理Oracle資料庫SQL
- MySQL之臨時表MySql
- 臨時筆記11筆記
- calcite物化檢視詳解
- Oracle 效能調優工具:SQL MonitorOracleSQL
- Linux之效能調優Linux
- 【效能調優】效能測試、分析與調優基礎
- 效能測試之測試分析與調優
- oracle臨時表空間相關Oracle
- Oracle臨時表使用注意事項Oracle
- 資料庫的物化檢視資料庫
- 物化檢視分割槽實驗
- 效能調優學習之硬體調優
- 效能調優命令之jstackJS