《Oracle高性能自動化運維》一一3.3 Redo產生場景

3.3 Redo產生場景
我們知道,Oracle Redo是以條目(Redo Entries/Records)的形式記錄數據庫的所有更改操作(OP)。更改操作主要包括:
數據庫物理文件更改:主要指的是數據庫物理文件的增減等操作;
數據庫運行狀態更改:數據庫當前狀態版本的更改(Current Status Version),例如數據庫檢查點(Checkpoint)等操作;
數據庫后臺進程寫操作:數據庫后臺進程對數據庫的操作,例如DBWR寫磁盤、LGWR寫日志等操作;
DML事務操作:DML事務對數據的更改操作;
數據字典DDL操作:DDL操作會更改數據字典,例如Drop、Truncate等DDL操作;
數據庫內部遞歸調用:更改數據庫內部字典表操作。
可以看到,數據庫更改是Redo產生的根源,下面將對Redo產生的主要場景進行介紹。
3.3.1 Redo與DML事務
DML事務會產生Redo。DML事務(索引行)與Redo OP的關系如表3-4所示。
image

索引行DML事務是最典型的DML,因此以索引行DML事物為例進行介紹更具代表性。
以表3-4所示為基礎,下面驗證索引鍵(Index Key)DML更新與Redo(OP)的詳細關系。
1)基礎數據準備,如下所示:
image

2)以索引鍵數據更新為基準,經過多次測試得到索引鍵DML更新與Redo(OP)的詳細關系,如表3-5所示。
image

通過表3-5可以看出:
Step1:將索引鍵(c1)的值從非Null更新到不同的非Null時,首先對索引鍵進行更新操作,接著對索引鍵進行刪除、插入操作;
從某種意義來講,Update操作可以看作Delete操作之后的Insert操作。
Step2:將索引鍵的值從非Null更新到相同的非Null時,只有索引鍵更新操作,不會產生回滾和重做信息;
Step3:將索引鍵的值從非Null更新到Null時,首先對索引鍵進行更新操作,然后對索引鍵進行刪除操作,沒有索引鍵的插入操作;
Step4:將索引鍵的值從Null更新到非Null時,首先索引鍵進行更新操作,接著跳過索引鍵刪除操作直接進行索引鍵插入操作。
為了簡化內容,上述步驟省略了事務開始(OP:5.2)和事務結束(OP:5.4)的描述。
不難看出:
DML中的Null不會影響索引操作;
更新索引鍵數據時,索引也會相應更新;
當索引創建較多時,索引行DML更新可能會影響到多個索引鍵的DML更新,這樣會產生大量的Redo,從而影響數據庫的整體性能。因此,在滿足性能需求的情況下,應當盡可能少地創建索引。
3.3.2 Redo與Block Cleanout
在一般情況下,當事務提交后,事務影響的數據塊的ITL標識會立即被清除。如果當事務提交后,事務數據塊的ITL沒有及時被清除(ITL仍處于打開狀態),那么將會產生延遲塊清除(Delayed Block Cleanout)。
Block Cleanout 會產生Redo,如下所示:
image

Block Cleanout可以由Select語句產生,這就意味著Select查詢也可能產生Redo。Block Cleanout詳細內容請參考4.2.3節。
Block Cleanout主要與事務“熱塊”緊密相關。因此,我們在進行數據庫優化設計時,應當盡可能地將“熱塊”事務分散到不同的數據塊中,這樣就可以減少Block Cleanout產生的概率,從而減少Redo的產生。
3.3.3 Redo與Block Write
從Oracle 9開始,DBWR進程將Block Buffer寫入磁盤操作(Block Write)會被記錄到Redo中。與此同時,數據庫恢復操作也會引發Block Write,如下所示:
image

可以看到,當數據庫恢復引發Block Write時,系統將Block Write信息完整地記錄在Redo中,體現了“Redo記錄數據庫所有更改”這一特點。
3.3.4 Redo與Hot Backup
當數據庫進行熱備(Hot Backup)操作時,熱備信息會記錄在Redo中,如下所示:

可以看到,當數據庫進行熱備時,系統將熱備信息完整地記錄在Redo中,確保熱備數據的可恢復性。
3.3.5 Redo與Direct Load
當進行數據直接路徑加載(Direct Load)時,也會將Direct Load信息記錄在Redo中,如下所示:
image
image

可以看到,當進行數據直接路徑加載時,系統仍然會將數據直接路徑加載的信息記錄到Redo中。相對于其他方式的數據加載方式,數據直接路徑加載將會產生較少的Redo。
Direct Load操作會越過Buffer Cache直接將數據寫入磁盤,從而產生較少的Redo。
3.3.6 Redo與Nologging
Nologging 日志記錄模式可以減少Redo的產生,但是Nologging的使用需要特別留意,這是因為:
Nologging 方式創建的數據庫對象將不可恢復;
一旦數據庫對象被設置為Nologging模式后,必須立即進行數據庫(對象)備份;
當使用Nologging完成特定操作后,強烈建議將數據庫對象的日志記錄模式恢復為Logging模式(默認模式)。可使用以下命令實現:
Alter [database] tablespace force logging;
Nologging模式下進行特定的數據庫操作可以提升數據庫性能,例如,在創建索引時就可以使用Nologging來加快索引創建的速度。
Nologging的使用級別:
對象級(Database/Tablespace/Table等)的使用,如下所示:
Create[Alter] table[index] table_name[index_name] parallel nologging;
SQL語句級的使用,如下所示:

Insert /+ nologging append/ into table_name select from xxx..;
Nologging可以減少Redo的產生,如下所示:
image
image

可以看出,采用Nologging模式后,Redo產生量大幅度降低。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394680.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394680.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394680.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智能算法(GA、DBO等)求解零空閑流水車間調度問題(NIFSP)

先做一個聲明:文章是由我的個人公眾號中的推送直接復制粘貼而來,因此對智能優化算法感興趣的朋友,可關注我的個人公眾號:啟發式算法討論。我會不定期在公眾號里分享不同的智能優化算法,經典的,或者是近幾年…

《構建之法》讀后感 二

個人感受部分: 01. 過去的我對自己的職業沒有一個規劃,認為讀大學就是拿畢業證,至于以后找到什么樣的工作從來沒有考慮過。在拿到一個軟件作業時,總是在設計階段就把它想得特別完美,想讓他沒有任何出錯的做出來&#x…

android 簡單實現圓角,Android 實現圓角圖片的簡單實例

Android 實現圓角圖片的簡單實例實現效果圖:本來想在網上找個圓角的例子看一看,不盡人意啊,基本都是官方的Demo的那張原理圖,稍后會貼出。于是自己自定義了個View,實現圖片的圓角以及圓形效果。效果圖:Andr…

zookeeper介紹及集群的搭建(利用虛擬機)

ZooKeeper ?   ZooKeeper是一個分布式的,開放源碼(apache)的分布式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase、dubbox、kafka的重要組件。它主要用來解決分布式集群中應用系統的一致性問題…

pythondict初始化_利用defaultdict對字典進行全局初始化。

通常我們在操作字典時,如果讀取的鍵未被初始化,則會拋出KeyError的錯誤,這個是我們都很熟悉的。那么一般的解決方式是使用異常處理或者是調用字典的get方法來避免出現這個異常。 可以看到,這兩種寫法都比較繁瑣,第二種…

標準庫類型String

定義和初始化string對象 初始化string對象方式 string s1 默認初始化,s1是一個空串 string s2(s1) s2是s1的副本 string s2 s1 等價于s2(s1), s2是s1的副本 string s3("value") s3是字面值"value"的副本,除了字面值最后的那個…

輕量級數據庫中間件利器Sharding-JDBC深度解析(有彩蛋)

講師介紹張亮 當當架構部總監 負責分布式中間件和私有云平臺建設 目前主導開源項目:Elastic-Job及Sharding-JDBC 主題簡介: 1、關系型數據庫中間件核心功能介紹 2、Sharding-JDBC架構及內核解析 3、Sharding-JDBC未來展望 一、關系型數據庫中間件核心功…

python字典嵌套字典的情況下獲取某個key的value

最近在用python寫接口的測試程序,期間用到解析字典獲取某個key的value,由于多個接口返回的字典格式不是固定的并存在多層嵌套的情況。在字典的方法中也沒有找到可直接達到目的的方法(也可能是我對字典的方法了解的不深的緣故),于是自己寫了個…

系統在此應用程序堆棧溢出_從部署我的第一個完整堆棧Web應用程序中學到的經驗教訓...

系統在此應用程序堆棧溢出by Will Abramson威爾艾布拉姆森(Will Abramson) 從部署我的第一個完整堆棧Web應用程序中學到的經驗教訓 (Lessons learned from deploying my first full-stack web application) I recently achieved one of my long-term goals: deploying my firs…

const 常量_條款03:盡可能使用const

const 允許你指定一個語義約束(也就是指定一個“不該被改動”的對象),而編譯器會強制實施這項約束。1、const指針如果關鍵字const出現在星號左邊,表示被指物是常量;如果出現在星號右邊,表示指針自身是常量&…

javascript高級程序設計---js事件思維導圖

繪制思維軟件與平時用的筆記,以及導出功能,這三個問題綜合起來,于是我把思維導圖分開畫 1、js事件的基本概念 2、js事件的事件處理程序 3、js事件的事件對象 轉載于:https://www.cnblogs.com/Jamie1032797633/p/10567419.html

jq挑戰30天——打字機效果+小程序

<!doctype html><html><head><meta charset"utf-8"><title>基于jQuery實現的打字機效果-jq22.com</title><script src"http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script><style></…

和 Thrift 的一場美麗邂逅

一. 與 Thrift 的初識 也許大多數人接觸 Thrift 是從序列化開始的。每次搜索 “java序列化” “方式”、“對比” 或 “性能” 等關鍵字時&#xff0c;搜索引擎總是會返回一大堆有關各種序列化方式的使用方法或者性能對比的結果給你&#xff0c;而其中必定少不了 Thrift&#…

instagram技術_Instagram9位科技女孩進行技術采訪的主要技巧

instagram技術by Rachel通過瑞秋 Instagram9位科技女孩進行技術采訪的主要技巧 (Top tips for technical interviews from nine of Instagram’s tech girls) My job-hunt came to an end a few weeks ago. After endless phone interviews, coding challenges, and on-sites,…

彈出框 每次打開 滾動條置頂_微信置頂文字怎么弄?微信置頂一句話教程

今日支付寶紅包支付寶首頁搜索511501453馬上領取紅包(支付寶雙十二活動&#xff0c;瓜分15億紅包)(領取后一定要記得使用&#xff0c;不然會浪費的呦&#xff0c;更會影響第二天的領取&#xff01;)奶思靚機“ 一 個 有 用 的 公 眾 號 の ”嗨&#xff0c;最近很流行在微信上面…

Python學習_字符串格式化

#!/usr/bin/env python # -*- coding:utf-8 -*-# 百分號格式化 # %[(name)[flags][width].[precision]]typecode # name : 指定占位符的key # flags : - 空格 0 # width : 寬度 # precision : 小數點后保留的位數 # typecode : 必需,數據類型 # 字符串里面有%的時候, %%表示一…

python 3 面向過程編程

python 3 面向過程編程 核心是過程&#xff08;流水線式思維&#xff09;&#xff0c;過程即解決問題的步驟&#xff0c;面向過程的設計就像設計好一條工業流水線&#xff0c;是一種機械式的思維方式。 1、優點&#xff1a;程序結構清晰&#xff0c;可以把復雜的問題簡單化&…

在ionic/cordova中使用百度地圖插件

在ionic項目中&#xff0c;如果想實現定位功能&#xff0c;可以使用ng-cordova提供的cordova-plugin-geolocation。 但由于高墻的緣故&#xff0c;國內andorid環境下&#xff0c;此插件不起作用&#xff08;ios環境下可用&#xff09;。 國內比較好的是現實使用百度地圖提供的A…

django國際化與html語言,Django 國際化

Django 國際化Django 支持國際化&#xff0c;多語言。Django的國際化是默認開啟的&#xff0c;如果您不需要國際化支持&#xff0c;那么您可以在您的設置文件中設置 USE_I18N False&#xff0c;那么Django會進行一些優化&#xff0c;不加載國際化支持機制。NOTE: 18表示Intern…

mongo 刪除節點_將生產節點/ Express Mongo App部署到AWS —反思

mongo 刪除節點在AWS中部署生產Web應用程序的經驗教訓 (Lessons learned deploying a production web application in AWS) 背景 (Background) This is not a code-based tutorial. It consists of all the things I wish I knew before I started the project and the steps I…