大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 数据库 -> Oracle如何精确计算row的大小

Oracle如何精确计算row的大小

时间: 2021-07-31 作者:daque

第一步:计划所有block header的巨细         数据块头部所须要的空间巨细由以次公式计划:         space after headers (hsize) = db_block_size - kcbh - ub4 - ktbbh - ((initrans - 1) * ktbit) - kdbh         个中的少许参数证明如次:          db_block_size:数据库的block巨细,不妨查问v$parameter视图中赢得。          kcbh、ub4、ktbbh、ktbit、kdbh都是恒量,那些设置的巨细不妨从v$type_size视图中赢得。         initrans是调配给表的初始化工作的数目,不妨从user_tables表中的ini_trans字段中赢得。         第二步:计划每个数据块可用的数据空间        每个数据块为数据保持的空间是由pctfree参数所指定的,所以计划公式如次:         available data space (availspace) = ceil(hsize * (1 - pctfree/100))         – kdbt         个中的少许参数证明如次:         ceil是取大于大概即是n的最小平头。         pctfree是在表中预留出来用来update操纵的空间,不妨从user_tables表中的pct_free字段中赢得。         kdbt是恒量,设置的巨细不妨从v$type_size视图中赢得。即使你找不到kdbt的设置巨细,用ub4设置的巨细包办也不妨。         第三步:计划每行所用的空间巨细        计划每行所运用的空间巨细是须要多步计划实行的。         开始计划列的巨细,囊括字节的长度:         column size including byte length = column size + (1, if column size < 250, else 3)         对于列的巨细,既不妨运用体味来确定其巨细,也不妨运用语句来计划每列的巨细:         select avg(vsize(colname)) from table_name;         接着,计划行的巨细:        rowsize = row header (3 * ub1) + sum of column sizes including length bytes         结果,计划每行所用的空间巨细:        space used per row (rowspace) = max(ub1 * 3 + ub4 + sb2, rowsize) + sb2         ub1、ub4、sb2都是恒量,设置的巨细不妨从v$type_size视图中赢得。        当每行所占用的空间胜过了一个数据块可用的空间的巨细,然而仍旧小于每个数据块保持给update操纵的空间巨细(比方,pctfree=0),每行记载将仍旧被保存在它们本人的block块中。        当每行的空间巨细胜过了每个数据块可用的空间,而且没有任何保持给update操纵的空间可用了,此时,这行记载将被链接到其余一个block大概更多,所以,这个功夫的保存的负载会比拟高。        第四步:计划在一个block中不妨包含最多的记载数目         不妨运用底下的公式来计划一个数据block中不妨包含的记载的数目:

number of rows in block = floor(availspace / rowspace)         floor是取小于n的最大平头。         这个进程不过供给一个大概的预算一个表的巨细,而不是透彻的去计划的。在大概的预算出一个表的巨细之后,咱们不妨运用这个消息来判决在创造表的功夫毕竟运用多大的initial这个保存参数。当表被创造后发端运用了,空间的需要常常是大于咱们经过计划得出的估量值。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.