物化檢視開發相關問題指導意見
1.建立快速重新整理(fast refresh,也稱增量重新整理)的物化檢視,必須在基表上先建立物化檢視日誌:
CREATE MATERIALIZED VIEW LOG ON hsfssdata.TBTRANSREQ with rowid,sequence including new values;
CREATE MATERIALIZED VIEW LOG ON hsfssdata.HIS_TBTRANSREQ with rowid,sequence including new values;
注意,此處沒有用primary key,而是rowid。
2.包含連線的物化檢視,在快速重新整理的時候有bug,因為執行計劃很差,導致增量重新整理速度很慢,可能比全量重新整理還慢好幾倍(具體要看日誌的資料量以及基表的資料量)。
解決辦法如下:
2.1 首先根據不同Oracle版本,設定不同的隱含引數值:
10.1 : _mv_refresh_use_stats=FALSE
10.2 : _mv_refresh_use_stats=TRUE
9.X : 9i太複雜了,稍後單獨處理
這一步需要DBA來做
2.2 然後將日誌表清空,並且在清空狀態下,收集統計資訊,並鎖定。
2.2.1 清空:
truncate table HSFSSDATA.MLOG$_TBTRANSREQ;
truncate table HSFSSDATA.MLOG$_HIS_TBTRANSREQ;
注: MV日誌表就是原表表明前加上 MLOG$_ 字首
2.2.2 收集統計資訊
EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 'HSFSSDATA' , TABNAME => 'MLOG$_TBTRANSREQ');
EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 'HSFSSDATA' , TABNAME => 'MLOG$_HIS_TBTRANSREQ');
2.2.3 鎖定統計資訊
EXEC DBMS_STATS.LOCK_TABLE_STATS(OWNNAME => 'HSFSSDATA' , TABNAME => 'MLOG$_TBTRANSREQ');
EXEC DBMS_STATS.LOCK_TABLE_STATS(OWNNAME => 'HSFSSDATA' , TABNAME => 'MLOG$_HIS_TBTRANSREQ');
3.建立物化檢視。需注意一下幾點:
3.1 建立MV時,可以先 build deferred 而不是 build immediate,這樣的話只會建立一個空殼,而不會真正產生資料。所有東西都除錯好之後在全量重新整理一遍,產生初始化資料。
如果初始化資料量太大,可以用基於預見表的方式建立MV. 不建議MV使用並行(PARALLEL)
3.2 使用 with rowid 的方式建立
3.3 包含連線的物化檢視,from 語句中出現的每一個表,都要將其 rowid 列寫在select 語句中。
3.4 不能使用子查詢,不能使用sysdate
3.5 使用UNION ALL時,對於每一段查詢,都要有一個區別於其他的常量欄位(即下例中的pmarker)
create materialized view hsfssdata.fund_tbtransreq_end_day_view
PARALLEL BUILD deferred --IMMEDIATE
REFRESH fast --制定重新整理方式:fast,complete,force ; must be include rowid whitch all tables
on demand--重新整理方式:demand,commit
START WITH sysdate--第一次重新整理時間
NEXT sysdate + 1/1440
with rowid
as
select
serial_no as "TRANSACTION_NO", --各系統交易登記流水
'721691' as "SYSID",
trans_code as "TRANSACTION_TYPE",--交易型別(需要配置交易控制表)
status as "TRANSACTION_STATUS",--交易狀態:01已受理、02已授權、03已稽核、04處理成功、05已撤消、99已沖銷
'02' as "BUSINESS_TYPE", --業務種類:01現金、02轉賬、03其他
bank_acc as "PRODUCT_NO", --產品號:賬號、卡號、購證卡號
client_no as "CLIENT_NO", --客戶號
amt as "AMOUNT", --交易金額
curr_type as "CURRENCY", --交易幣種
branch_no as "SITE_CODE", --交易網點
oper_no as "PROCESSOR_ID", --受理櫃員ID
to_date(trans_date,'yyyyMMdd') as "PROCESS_DATE",--受理日期
auth_oper as "COUNTER_AUTH_ID", --最後授權人ID
to_date(trans_date,'yyyyMMdd') as "COUNTER_AUTH_DATE",--最後授權日期
'sec1' as pmarker
,rowid id1
from hsfssdata.tbtransreq
--where phi_date=to_char(sysdate,'yyyymmdd') and
where status in('0','1','2','3','E','G','A','F','5','7','8','9','6')
and channel='6'
union all
select
serial_no as "TRANSACTION_NO", --各系統交易登記流水
'721691' as "SYSID",
trans_code as "TRANSACTION_TYPE",--交易型別(需要配置交易控制表)
status as "TRANSACTION_STATUS",--交易狀態:01已受理、02已授權、03已稽核、04處理成功、05已撤消、99已沖銷
'02' as "BUSINESS_TYPE", --業務種類:01現金、02轉賬、03其他
bank_acc as "PRODUCT_NO", --產品號:賬號、卡號、購證卡號
client_no as "CLIENT_NO", --客戶號
amt as "AMOUNT", --交易金額
curr_type as "CURRENCY", --交易幣種
branch_no as "SITE_CODE", --交易網點
oper_no as "PROCESSOR_ID", --受理櫃員ID
to_date(trans_date,'yyyyMMdd') as "PROCESS_DATE",--受理日期
auth_oper as "COUNTER_AUTH_ID", --最後授權人ID
to_date(trans_date,'yyyyMMdd') as "COUNTER_AUTH_DATE",--最後授權日期
'sec2' as pmarker
,rowid id1
from hsfssdata.his_tbtransreq
--where trans_date=to_char(sysdate,'yyyymmdd') and
where status in('2','3','G','F','5','7','8','9','6','4')
and channel='6'
4. 給物化檢視中 rowid 欄位建立索引(物化檢視增量重新整理時需要使用)
create index hsfssdata.ix_mv1_id1 on hsfssdata.fund_tbtransreq_end_day_view (id1) parallel 8;
alter index hsfssdata.ix_mv1_id1 noparallel;
上述語句為了加快建立索引的速度,開了並行度為8,大家可以根據具體的MV資料量和DB負載情況,酌情調整。
第二句將索引並行度關閉。這一點很重要,勿忘!
5. 如果物化檢視是包含連線的,還需要在基表的連線欄位上建立索引(一般都會有吧?)。請大家複核一下。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11411056/viewspace-733450/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 物化檢視相關工具包
- 【ORACLE】物化檢視相關後設資料檢視欄位說明Oracle
- [提問交流]開發問題求指導
- 物化檢視匯出匯入可能導致物化檢視日誌的失效
- 物化檢視重新整理的問題及分析
- 【ORACLE】常用物化檢視相關後設資料查詢語句Oracle
- 物化檢視妙用__表同步使用物化檢視方法
- 【物化檢視】幾種物化檢視日誌分析
- 物化檢視中的統計資訊導致的查詢問題分析和修復
- 【物化檢視】根據物化檢視日誌快速重新整理物化檢視的過程
- 多個物化檢視導致物化日誌無法及時更新
- 建議開發員少用帶錶連結的檢視(此檢視非物化檢視)
- oracle物化檢視Oracle
- 在pl/SQL中呼叫logminer相關檢視的問題SQL
- 關於開發檢視
- 如何推動智慧交通普惠發展 | 工信部印發民用無人機《指導意見》無人機
- 物化檢視詳解
- oracle 建立物化檢視Oracle
- Oracle 物化檢視建立Oracle
- materialized view (物化檢視)ZedView
- 物化檢視 on commitMIT
- 物化檢視日誌表被DROP後建立物化檢視報錯
- oracle Metrics相關檢視Oracle
- 《國辦關於深化改革推進出租汽車行業健康發展的指導意見》全文行業
- Oracle如何根據物化檢視日誌快速重新整理物化檢視Oracle
- 物化檢視的快速重新整理測試與物化檢視日誌
- 普通檢視和物化檢視的區別
- 建立物化檢視導致資料庫例項崩潰資料庫
- sql server 檢視tempdb使用的相關檢視SQLServer
- calcite物化檢視詳解
- Oracle物化檢視詳解Oracle
- ORACLE物化檢視測試Oracle
- Oracle 物化檢視案例分享Oracle
- 物化檢視梳理總結
- ZT 物化檢視詳解
- Oracle物化檢視語法Oracle
- ORACLE物化檢視入門Oracle
- 物化檢視-學習篇