【筆記】 使用物化檢視(一)
有一個年代久遠的報表實在太慢,加之最近報表庫效能下的很厲害,這個報表基本就是ora-01555了。
邏輯上修改感覺代價更大,由於這個報表是定期的月報表,試一下使用物化檢視的效果。
在hp dl585上虛擬了一個紅帽,系統都ok了,接下來就是試驗了:
--sys使用者下:
create tablespace test datafile '/tpsys/oracle/product/10.2.0/db_1/oradata/test.dbf' size 300m;
create user test
identified by test
default tablespace test
temporary tablespace temp
profile DEFAULT;
grant connect,dba,resource to test;
--進入test使用者,建立相關的dblink,同義詞等
-- Create database link
.........................................................
select 'create synonym ' || a.object_name || ' for ' || a.object_name ||
'@xxxx;'
from all_objects@xxxx a
where a.object_type = 'SYNONYM'
and a.object_name like 'T!_%' escape '!';
select 'drop synonym '||a.object_name||';'
from all_objects a where a.object_type = 'SYNONYM' and a.owner = 'SYS' and a.object_name like 'T%';
--中間遇到了一點問題,忘記切換到test使用者下了,
--並且由於另外一個程式正在查詢其中的一個表,鎖住了
--查詢或者鎖的相關資訊:
--sid
select * from v$lock a where a.ADDR = '000000007E504198';
--serialno
select SERIAL# col1 from v$session
where sid=&1;
--kill session
alter system kill session '&1, &serialno';
--kill session後出現 session marked killed
--並未及時釋放資源
--於是找到對應linux系統的程式號,對於windows來說是執行緒號,然後kill掉,以釋放資源
select spid, osuser, s.program from v$session s,v$process p where
s.paddr=p.addr and s.sid=152;
--windows 和linux分別是,本次操作是在linux下進行的,使用的kill -9
--orakill 152 11846
--kill -9 11846 linux
select * from v$session a where a.STATUS = 'ACTIVE' and a.USERNAME = 'TEST';
select * from v$sqlarea;
select a.sid,a.USERNAME,a.SQL_ID,b.SQL_TEXT from v$session a,v$sqlarea b where a.SQL_ID = b.SQL_ID
and a.STATUS = 'ACTIVE' and a.USERNAME = 'TEST';
--擴充套件表空間
--資料量有點大,先擴充套件一下。
alter database test datafile '/tpsys/oracle/product/10.2.0/db_1/oradata/test.dbf' resize 3072m;
select * from v$datafile;
下面就要吧sql中的with temp as () 拿出來,以後可以固定在月底25日重新整理
程式碼大致如下:
create materialized view mv_report_customer
build immediate
refresh force
on demand
as
..
.....
...
--done in 1696s
雖然花了20多分鐘,不過還是很值得的。
--物化檢視建立好以後,本地會有一個相應的table,根據業務邏輯建立必要的幾個索引,並分析
analyze table table_name compute statistics for all indexes;
select 'analyze table '||a.object_name||' compute statistics ;' from all_objects a where a.object_type = 'SYNONYM' and a.owner = 'TEST';
然後是
在此物化檢視基礎上的查詢操作,
具體程式碼省略。
這個中間報了幾個錯:
1,temp表空間不夠
2,檔案無法擴充套件
3,系統io報錯
1更換預設的臨時表空間後解決,後面兩個是因為系統檔案大小限制:
ORA-09817 和檔案系統不能寫。
估計是空間不夠,也懶得去管,刪了前面的一個3g的表空間,不用的,就ok了。
執行結果:
--20090831 27907 rows selected in 938.125 seconds
10多分鐘ok!
也就是說重新整理和拉資料總共的時間不到40分鐘,這在以前的情況下,還是比較困難的,涉及到的幾張主要的表資料量都在千萬以上,
而且有很多統計操作。反正不用一半夜了ora-01555了。效能方面具體還有待再搞搞清楚。
--10g的臨時表空間組是新東西,本次也需要擴充套件temp表空間,
--使用的方法是,新建一個新的temp空間,然後設定為當前臨時表空間
--臨時表空間組也是需要再仔細研究下的。
select * from v$tablespace;
SELECT * FROM DBA_TABLESPACE_GROUPS;
SELECT USERNAME, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE
FROM DBA_USERS;
--臨時表空間大小
select file#,name,bytes/1024/1024 from v$tempfile;
--當前使用大小
select (sum (blocks))*8/1000 "MB" from v$sort_usage;
select * from (
select sess.SID, segtype, blocks*8/1000 "MB" ,sql_text
from v$sort_usage sort, v$session sess ,v$sql sql
where sort.SESSION_ADDR = sess.SADDR
and sql.ADDRESS = sort.SQLADDR (+)
order by blocks desc
) a
where rownum<10;
Select round((f.bytes_free + f.bytes_used) / 1024 / 1024, 2) "total MB",
round(((f.bytes_free + f.bytes_used) - nvl(p.bytes_used, 0)) / 1024 / 1024, 2) "Free MB" ,
d.file_name "Datafile name",
round(nvl(p.bytes_used, 0)/ 1024 / 1024, 2) "Used MB",
round((f.bytes_free + f.bytes_used) / 1024, 2) "total KB",
round(((f.bytes_free + f.bytes_used) - nvl(p.bytes_used, 0)) / 1024, 2) "Free KB",
round(nvl(p.bytes_used, 0)/ 1024, 2) "Used KB",
0 "Fragmentation Index"
from SYS.V_$TEMP_SPACE_HEADER f, DBA_TEMP_FILES d, SYS.V_$TEMP_EXTENT_POOL p
where f.tablespace_name(+) = d.tablespace_name
and f.file_id(+) = d.file_id
and p.file_id(+) = d.file_id
;
create temporary tablespace temp1 tempfile '/tpsys/oracle/product/10.2.0/db_1/oradata/test/temp1.dbf' size 2048m;
alter database default temporary tablespace temp1;
--drop掉之前的temp表空間
drop tablespace temp;
select * from v$tempstat;
select * from v$sort_usage;
select * from v$tempseg_usage;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16179598/viewspace-613648/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle物化檢視的建立及使用(一)Oracle
- 物化檢視
- 物化檢視(zt)
- Oracle物化檢視的建立及使用(二)Oracle
- calcite物化檢視詳解
- Oracle普通檢視和物化檢視的區別Oracle
- 使用Materialise物化檢視解耦微服務架構解耦微服務架構
- Postgres使用trigger自動重新整理物化檢視
- 資料庫的物化檢視資料庫
- 物化檢視分割槽實驗
- ClickHouse 物化檢視學習總結
- 物化檢視幾個知識點
- ClickHouse 效能優化?試試物化檢視優化
- ClickHouse效能優化?試試物化檢視優化
- MySQL筆記 13 檢視MySql筆記
- StarRocks 物化檢視重新整理流程和原理
- StarRocks 物化檢視重新整理流程及原理
- 基於ROWID更新的物化檢視測試
- 物化檢視如何快速完成資料聚合操作?
- 使用SpringBoot+PostgreSQL物化檢視實現微服務設計模式 - vinsguruSpring BootSQL微服務設計模式
- 物化檢視快速重新整理與ORA-00001
- TiFlink:使用 TiKV 和 Flink 實現強一致的物化檢視丨TiDB Hackathon 專案分享TiDB
- 火山引擎ByteHouse:如何最佳化ClickHouse物化檢視能力?
- hg_job配置定時重新整理物化檢視
- 【MVIEW】Oracle通過物化檢視同步表資料及簡介ViewOracle
- 物化檢視日誌無法正常清除的解決方法
- 資料泵匯出匯入物化檢視(ORA-39083)
- iOS學習筆記04 檢視切換iOS筆記
- tableau視訊筆記(一)筆記
- 基於圖神經網路的動態物化檢視管理神經網路
- 【SQL】Oracle查詢轉換之物化檢視查詢重寫SQLOracle
- 用exp、imp遷移包含物化檢視日誌的資料
- Echarts檢視視覺化-學習筆記(努力更新中)Echarts視覺化筆記
- MySQL筆記之一致性檢視與MVCC實現MySql筆記MVC
- 一個 react 的小專案方便檢視 github 上的筆記ReactGithub筆記
- Django 原始碼閱讀筆記(基礎檢視)Django原始碼筆記
- 檢視提交歷史 —— Git 學習筆記 11Git筆記
- win10檢視軟體使用記錄方法 win10怎麼檢視軟體使用記錄Win10
- celery筆記九之task執行結果檢視筆記