国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
oracle數(shù)據(jù)庫空間估算
如何計算存儲空間,整理了一下

我們在設(shè)計一個數(shù)據(jù)庫的時候除了考慮數(shù)據(jù)塊的大小,可能還要和開發(fā)溝通,這個數(shù)據(jù)庫要存儲多少數(shù)據(jù),那么這個數(shù)據(jù)庫應該具備多大的容量來滿足一個應用的存儲吶?DBA就需要計算一下這個應用占用多大的存儲空間

首先我們來看一下幾個換算的單位:
1K=1024Bytes;
1M=1024K
1G=1024M
1T=1024G

而我們的表里一個字段能占用多大的空間吶?我們先看一下字段的類型:
1.        變成:number(),varchar2 (),long ,blob等都是變成 (單位都是Bytes)
2.        定長:date (7bytes) ,char()

根據(jù)經(jīng)驗:
1.對于變長字段的處理:
我們在估算一行所占用空間的時候只能是取最大值,比如x number(20),這個字段,我們不管插入x列里的內(nèi)容是否真正的滿足20個bytes,我們都按照20來計算;
2.對于定長字段的處理:
  這個就直接取實際長度就ok了;

具個例子來計算一下平均行占用的存儲空間:

Create table test (x number(20),y varchar2(20),z date ,char(20));

那么這個表平均每行最大使用的空間為:
(20+20+7+20)=67 (Bytes)
  假設(shè)這個表里有20000000條數(shù)據(jù),那么這個表所使用的凈空間(pur_stroage)為:
(20+20+7+20)*20000000 (Bytes)=1278M


但是ORACLE在組織存儲的時候是有空間結(jié)構(gòu)的,oracle要把一部分空間分配給數(shù)據(jù)庫作為結(jié)構(gòu)存儲(str_storage),不會把所有的空間都分配給我們用來數(shù)據(jù)存儲,這么大的數(shù)據(jù)量我們要給多少真正的存儲空間(real_stroage)?

我們可以用下邊這個簡單的公式來計算:
   real_stroage= str_storage+ pur_stroage


上邊這個公式中,我們已知了pur_stroage 要求出real_stroage就需要知道str_storage,ok現(xiàn)在我們來了解一下每個塊的存儲形式下圖是個block的結(jié)構(gòu)圖

_______________________________________________________________________
|                     |                                                                                                                     |
|  1fixed          |                                                                                                                     |
|   header        |                                                                                                                    |
|___________|                                                                                                                    |
|                       |                                                                                                                   |
| 2. variable      |                                                                                                                  |
| trans_header |             5- available_block                                                                         |
|___________ |                                                                                                                   |
|                       |                                                                                                                   |
|  3.table dir     |                                                                                                                   |
|                      |                                                                                                                    |
|___________|                                                                                                                     |
|                      |                                                                                                                     |
|  4.row dir      |                                                                                                                     |
|                      |                                                                                                                     |
|___________|___________________________________________________________|

    
1-4部分組成了一個數(shù)據(jù)塊的塊頭(block_header)
5 是數(shù)據(jù)塊的塊身(block_body)

一個一個說吧:

1.        定長的數(shù)據(jù)塊頭 57bytes
2.        塊中事務并發(fā)使用空間,這個值是有可能變化的,如果多個事務并發(fā),那么這個塊的大小會發(fā)生改變,一個事務是23*1 bytes,2個事務是23*2 bytes,依次類推,一般我們計算的似乎后按照23*1來計算
3.        使用塊的表 4 bytes
4.        使用塊的行 2 *n bytes 這個塊的列使用情況在于有多少行如果有4行數(shù)據(jù)存儲在這個塊里那么n=4
5.        才是表和索引能使用的存儲空間


那么是不是5里的空間我們能夠完全使用吶?
非也,拿上邊的例子來說吧,假設(shè)有一行數(shù)據(jù)里test.x里存儲的數(shù)值是1,這個時候有一個語句來執(zhí)行:
  Update test set x=100000000,而恰好這個時候此行數(shù)據(jù)所在的block滿了怎么辦?
Oracle為了避免這種情況的發(fā)生,引入了兩個概念:
  PCTUSED和PCTFREE,這兩個值相當于2個水位線,我們拿一個杯子來比喻數(shù)據(jù)塊,那么PCTUSED控制這個杯子什么時候可以繼續(xù)倒水;而PCTUSED表示什么時候這個杯子不能再倒水了

   假設(shè)PCTUSED設(shè)置成了6,PCTFREE設(shè)置成了2 ,那么它就表示,當一個杯子達到了60%空的時候可以再繼續(xù)使用,當杯子的水達到80%的時候就不能再倒水了,而這個值全部都記錄在數(shù)據(jù)塊的freelist列表里;


    所以可見,5里的初次使用率最高也不會超過available_block*PCTFREE



    str_storage=(fix_header+trans_header+table_dir+row_dir*N)*pctfree/10
             
   real_stroage= str_storage+ pur_stroage
                                =(fix_header+trans_header+table_dir+row_dir*N)*pctfree/10+(20+20+7+20)* N
               N=該表里的數(shù)據(jù)量


    當然這個值所求出來的也是個近似的值;
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
[Laskey99] Section 11.2. Oracle Tablespaces
一個完整的Oracle建表的例子 ? 半瓶
oracle新手入門指導之一——數(shù)據(jù)庫表空間知識[天源迪科論壇]
Oracle如何精確計算row的大小
【循序漸進Oracle】Oracle段空間管理技術(shù)
PCTFREE和pctused參數(shù)的作用
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服