91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

為什么歸檔日志的大小比在線日志的大小小很多

發布時間:2020-08-07 06:36:22 來源:ITPUB博客 閱讀:193 作者:guocun09 欄目:關系型數據庫

有些用戶會對于歸檔日志的大小比在線日志小感到疑惑,對于這種情況:

首先請檢查您的歸檔日志文件是否壓縮:
SELECT to_char(first_time,'yyyy-mm-dd hh34:mi:ss'),blocks*block_size/1024/1024,compressed from v$archived_log;

如果未壓縮,那么這個問題可能和您的CPU個數有關。
請查看您的CPU個數:
show parameter CPU_COUNT

歸檔日志的大小是真實的在線日志文件的使用量,也就是在線日志文件切換前其中寫入的內容的大小。
但是為了更好的并行減少沖突,oracle會按每16個CPU分一股(strand),每一股獨立從redo buffer以及redo log中分配一塊空間,當這一塊redo buffer用完,會寫入redo log并且繼續從redo log中分配相同大小的空間,如果無法分配空閑空間就會進行日志切換,而不管其他strand是否寫完。
下面舉例子來說明這個算法:
比如CPU的個數是64個,則會有64/16=4個strand
例1)當log buffer的大小和redo log file的大小都是256M的時候,則每個strand都是256M/4=64M。
每一個redo log file被啟用時,會預先將redo log file中的大小分配出4個64M與log buffer對應,如圖:
為什么歸檔日志的大小比在線日志的大小小很多
因為log buffer的大小和redo log file的大小都是256M,則redo log file沒有剩余的未分配的空間了。

每個進程產生的redo會分配到log buffer上的1,2,3,4其中的某一個strand上,單個進程只能對應一個strand,
這樣當數據庫中只有某些進程(比如極端的情況,只有某一個進程)產生的redo很多的時候,其中一個strand會快速寫滿,比如圖中的strand 1:
為什么歸檔日志的大小比在線日志的大小小很多
寫滿之后LGWR會將log buffer中strand 1的內容寫入到redo log file中,并且試圖從redo log file中分配一個新的64M空間,發現沒有了,則將所有strand中的內容寫入日志,并作日志切換。
為什么歸檔日志的大小比在線日志的大小小很多
這樣,可能會導致redo log file只寫入了一個strand的內容,其他部分幾乎是空的,則產生的archive log會只接近64M,而不是256M。
當CPU_COUNT很大時,這個差值會更大。

例2)當log buffer的大小是256M,而redo log file的大小是1G的時候,每個strand還是256M/4=64M。
每一個redo log file被啟用時,會預先將redo log file中的大小分配出4個64M與log buffer對應,如圖:
為什么歸檔日志的大小比在線日志的大小小很多
這時,redo log file中還有1G-256M=768M剩余的未分配的空間。 如果strand 1寫滿之后,LGWR會將log buffer中strand 1的內容寫入到redo log file中,并且試圖從redo log file中分配一個新的64M空間,然后不斷往下寫。
為什么歸檔日志的大小比在線日志的大小小很多


直到redo log file中再沒有可分配空間了,則將所有strand中的內容寫入日志,并作日志切換。


為什么歸檔日志的大小比在線日志的大小小很多
例3)當log buffer的大小是256M,而redo log file的大小是100M的時候,每個strand還是256M/4=64M。
但是redo log file中的空間會按strand的個數平均分配,也就是每塊100M/4=25M。
為什么歸檔日志的大小比在線日志的大小小很多
這樣,當每個strand中的內容寫到25M的時候,就會日志切換,而不是64M。相當于log buffer中的一部分空間被浪費了。

請參考以下文檔:
1.Archive Logs Are Created With Smaller, Uneven Size Than The Original Redo Logs. Why? (Doc ID 388627.1)
With a high CPU_COUNT, a low load and a redo log file size smaller than the redolog buffer, you may small archived log files because of log switches at about 1/8 of the size of the define log file size.
This is because CPU_COUNT defines the number of redo strands (ncpus/16). With a low load only a single strand may be used. With redo log file size smaller than the redolog buffer, the log file space is divided over the available strands. When for instance only a single active strand is used, a log switch can already occur when that strand is filled.

<==高 CPU_COUNT和低workload(實際上數據庫不一定不繁忙,只是在產生redo的進程很少的情況下)會導致 Archive Log比redo log小很多,而且日志頻繁切換。

2.Archived redolog is (significant) smaller than the redologfile. (Doc ID 1356604.1)
The logfile space reservation algorithm
If the logfile is smaller than the log buffer, then the whole logfile space is divided/mapped/reserved equally among all the strands, and there is no unreserved space (ie no log residue).
When any process fills a strand such that all the reserved underlying logfile space for that strand is used, AND there is no log residue, then a log switch is scheduled.

<==log strand 和 log switch的算法在這個note中講的更明白。


出自:甲骨文中國

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

渝北区| 巴东县| 清丰县| 花垣县| 清水县| 大名县| 曲周县| 克什克腾旗| 陇西县| 绵竹市| 建德市| 前郭尔| 富顺县| 平乡县| 绍兴市| 乌恰县| 临江市| 新丰县| 顺义区| 昆山市| 钦州市| 赤水市| 东港市| 东源县| 佛山市| 海丰县| 湘潭县| 金坛市| 鹿泉市| 正宁县| 随州市| 永康市| 祁连县| 阳新县| 万安县| 司法| 台江县| 贵溪市| 襄汾县| 康乐县| 南平市|