STREAMS筆記(9) 大事務 & 長事務
2013-06-10 10:35:47.540000 +07:00
CP01: large txn committed (14063 LCRs), xid: 0x0004.008.0000033a (4.8.826)
每隔10分鐘左右,會檢查一次大事務
2013-06-10 10:43:58.367000 +07:00
CP01: large txn detected (235559 LCRs), xid: 0x0008.004.00000341 (8.4.833)
2013-06-10 10:53:58.821000 +07:00
CP01: large txn detected (608753 LCRs), xid: 0x0008.004.00000341 (8.4.833)
2013-06-10 11:04:03.818000 +07:00
CP01: large txn detected (1033409 LCRs), xid: 0x0008.004.00000341 (8.4.833)
每隔20分鐘,會檢查一次長事務
2013-06-10 16:02:40.705000 +07:00
CP01: long running txn detected, xid: 0x000a.01f.00000542 (10.31.1346)
但是注意,只報告一個事務,無論此時有幾個大事務/長事務在執行中
capture一旦發現事務,就開始傳播。apply端要接收到commit標籤,才開始應用日誌
Apply spill的記錄表是,STREAMS$_APPLY_SPILL_MSGS_PART,其同時也儲存發生錯誤的事務
Queue spill,應該是寫入到佇列表
向STREAMS$_APPLY_SPILL_MSGS_PART寫入資訊,是自己控制提交頻率,一直在寫入提交
由於大事務,需要先寫入STREAMS$_APPLY_SPILL_MSGS_PART,所以會極大的增加目標庫產生的REDO
Troubleshooting Long-Running Transactions in Oracle Streams [ID 783927.1]
描述了streams處理事務的習慣
長事務的壞處:
1.capture程式發生流控
2.apply程式發生spilling
3.增加stream_pool的記憶體消耗
9i
1.訊息只能發生queue spill,也就是說只在存在記憶體壓力時,buffer queue才發生spill
2.舊訊息一直保留在記憶體中,只有新訊息才發生spill。這將增加IO壓力
3.訊息只能按照入列順序出列,也就是說,只有提交的訊息才能出隊,未提交的事務,會阻礙後續訊息的出列
4.如果不是的流控指令碼,長事務和流控指令碼間,將發生死鎖
10.1
1.不再只在記憶體存在壓力時才發生spill,增加了時間壓力的情況。入隊超過5分鐘事務將spill
2.不再按照入隊順序出隊,長事務不再柱塞訊息出隊
3.spill了的事務,只有當其又有相關資訊被入隊,才會考慮被應用
10.2
1.增加了apply spill的機制。queue spill involves spilling messages to disk under memory pressure and time pressure, apply spill allows spilling to disk under time pressure and transaction size.
2.apply spill能比queue spill提供更高的效能,apply spill可以釋放記憶體給新的事務
3.超時時間10分鐘,事務超過5分鐘發生apply spill
4.超過TXN_LCR_SPILL_THRESHOLD大小的事務,發生apply spill。預設為10000個LCR
5.事務被放入錯誤佇列
Capture/Propagation 中未提交的事務
select streams_name "Streams Name",
streams_type "Streams Type",
xidusn||'.'||xidslt||'.'||xidsqn XID,
to_number (sysdate-last_message_time)*1440
"Time Since Last Message (min)"
from GV$STREAMS_TRANSACTION
-- where to_number (sysdate-last_message_time)*1440 >= 20
order by "Time Since Last Message (min)";
Apply中,發生了spill的事務
select Apply_name "Apply Name",
xidusn||'.'||xidslt||'.'||xidsqn XID,
first_scn "First SCN",
first_message_create_time "First Message Time",
message_count "Message Count",
spill_creation_time "Spill Time"
from DBA_APPLY_SPILL_TXN
order by "Spill Time";
忽略事務
9.2.0.5 to 10.1.0.x ,只能在capture端忽略
execute
dbms_apply_adm.stop_apply('
execute
dbms_apply_adm.set_parameter('
execute
dbms_apply_adm.start_apply('
10.2+,可以在apply端忽略,11g的引數為ignore_transaction
execute
dbms_capture_adm.stop_capture('
execute
dbms_capture_adm.set_parameter('
execute
dbms_capture_adm.start_capture('
存在一個BUG 5736709,可能導致被忽略的事務沒有purge其spill的記錄,需要進行清理
參考
How to Purge Apply Spilled Transactions in Streams Environment. [ID 472440.1]
STREAMS$_APPLY_SPILL_MSGS_PART的結構
CREATE TABLE "SYS"."STREAMS$_APPLY_SPILL_MSGS_PART"
( "TXNKEY" NUMBER NOT NULL ENABLE,
"SEQUENCE" NUMBER NOT NULL ENABLE,
"SCN" NUMBER,
"SCNSEQ" NUMBER,
"CAPINST" NUMBER,
"FLAGS" NUMBER,
"FLAGS2" NUMBER,
"MESSAGE" "SYS"."ANYDATA" ,
"DESTQUEUE" VARCHAR2(66),
"UBAAFN" NUMBER,
"UBAOBJ" NUMBER,
"UBADBA" NUMBER,
"UBASLT" NUMBER,
"UBARCI" NUMBER,
"UBAFSC" NUMBER,
"SPARE1" NUMBER,
"SPARE2" NUMBER,
"SPARE3" NUMBER,
"SPARE4" VARCHAR2(4000),
"SPARE5" VARCHAR2(4000),
"SPARE6" VARCHAR2(4000),
"POSITION" RAW(64),
"SPARE7" DATE,
"SPARE8" TIMESTAMP (6),
"SPARE9" RAW(100)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
STORAGE(
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSAUX"
OPAQUE TYPE "MESSAGE" STORE AS BASICFILE LOB (
ENABLE STORAGE IN ROW CHUNK 8192 RETENTION
CACHE
STORAGE(
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT))
PARTITION BY LIST ("TXNKEY")
(PARTITION "P0" VALUES (0)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSAUX"
LOB ("MESSAGE") STORE AS BASICFILE (
ENABLE STORAGE IN ROW CHUNK 8192 RETENTION
CACHE
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) )
這個表建立在SYSAUX表空間中,如果存在大事務,可能導致SYSAUX極度擴張
MESSAGE列使用anydata型別儲存資料
基於TXNKEY分割槽,一個spill的事務,一個分割槽
Query From SYS.STREAMS$_APPLY_SPILL_MSGS_PART Takes Long Time [ID 756049.1]
Explain TXN_LCR_SPILL_THRESHOLD in Oracle10GR2 Streams [ID 365648.1]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8242091/viewspace-763700/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring事務筆記Spring筆記
- MySQL 筆記 - 事務&鎖MySql筆記
- SQL筆記(14)——事務SQL筆記
- 碰到巢狀事務-筆記巢狀筆記
- 注意Spring事務這一點,避免出現大事務Spring
- mysql大事務MySql
- SQL Server 查出未提交事務(長事務)SQLSQLServer
- 筆記:DB常用sql列印+事務使用筆記SQL
- 使用Kafka Streams和Spring Boot微服務中的分散式事務 - PiotrKafkaSpring Boot微服務分散式
- [高效能MYSQL學習筆記]事務MySql筆記
- MySQL事務控制語句(學習筆記)MySql筆記
- 為什麼要避免大事務以及大事務如何解決?
- STREAMS筆記(2) 其他建立Streams的方式筆記
- STREAMS筆記(6) rule筆記
- mysql隱式提交事務transaction一點筆記MySql筆記
- MySQL事務學習筆記(二) 相識篇MySql筆記
- MySQL事務學習筆記(三) 甚歡篇MySql筆記
- MySQL事務學習筆記(一) 初遇篇MySql筆記
- 事務隔離級別讀書筆記分享筆記
- MySQL innodb 事務的實現(看書筆記)MySql筆記
- 大事務導致資料庫恢復時間長資料庫
- Spring事務長了個腿?輕鬆掌握技巧告別長事務煩惱!Spring
- Spring筆記(4) - Spring的程式設計式事務和宣告式事務詳解Spring筆記程式設計
- 十四:事務Event的生成和寫入流程(筆記)筆記
- 十五:MySQL層事務提交流程簡析(筆記)MySql筆記
- Spring學習筆記3(JDBC模板&事務管理)Spring筆記JDBC
- 筆記53-Spring jdbcTemplate&宣告式事務筆記SpringJDBC
- Spring 事務學習筆記(一) 初遇篇Spring筆記
- INFORMIX長事務及onstat工具用法ORM
- 【SQL】長事務診斷指令碼SQL指令碼
- 十、Redis事務、事務鎖Redis
- MySQL 學習筆記(一)MySQL 事務的ACID特性MySql筆記
- 《MySQL必知必會》筆記事務、安全及效能等MySql筆記
- Java學習筆記3事務的四大特性Java筆記
- ITL事務槽記載-01
- STREAMS筆記(12) 效能監控筆記
- STREAMS筆記(11) GoldenGate & Heterogeneous筆記Go
- STREAMS筆記(10) 同步捕獲筆記