zoukankan      html  css  js  c++  java
  • 对表的pctfree和pctused两个参数进行估算的方法

    对于不同的应用系统,表的pctfree 和pctused两个参数有不同的设计原则,以下是根据特定的应用系统进行估算的例子,从中可以掌握基本的估算方法。
     
    表的存储参数调整,一般情况,设置为pctfree 5 pctused 85即可(缺省为pctfree 10 pctused 40)
    1.对于Pctfree参数
    除了可以按字段及字段长度估算平均行长外,下面的方面可以根据已有数据分析出平均行长和每块行数
    例:
    analyze table 病人信息 compute statistics for table for all indexes for all indexed columns;
    Select Num_Rows,Blocks,Round(Num_Rows / Blocks) Avg_Rows_Block, Avg_Row_Len From User_Tables Where Table_Name = '病人信息'

        NUM_ROWS BLOCKS AVG_ROWS_BLOCK AVG_ROW_LEN    
     857291 14161 61 117 

    对于一般8192的块,实际可用空间为8100左右.
    假设以前该表的pctfree为15,改为5后,pctfree减少10,就可以再存入约7行.

    相同的1万4千块就可以多存放约10万行数据,
    这10万行数据,如果按每块60行算,就可以少占用约1700块(约13M的空间)
    如果全表扫描该表的话,少读1700块数据,少106次IO操作(按缺省db_file_multiblock_read_count=16计算)
    少占13M的内存

    另外,需要考虑的两个因素
    1。更新操作时,数据增长量大不大,例如:主要是把状态字段由1改为3,还是把摘要由空改为一段文字
    2。并发事务的多少,因为一个事务信息在块中要占用约24Byte,如果有10个并发事务的话,至少额外考虑240Byte的空闲空间。

    2.对于Pctused参数
    主要考虑删除后插入数据的情况多不多,以及平均行长大小
    例如:
    病人费用记录,医保如果存在校对操作的话,是先产生预交结算数据,正式结算时,删除这些数据再重新生成
    所以,病人预交记录,Pctused不能设置太高,否则重用那些低于Pctused的块,只能插入少量数据行,增加了IO操作
    analyze table 病人预交记录 compute statistics for table for all indexes for all indexed columns;
    Select Num_Rows,Blocks,Round(Num_Rows / Blocks) Avg_Rows_Block, Avg_Row_Len From User_Tables Where Table_Name = '病人预交记录'

        NUM_ROWS BLOCKS AVG_ROWS_BLOCK AVG_ROW_LEN    
     181758 2147 85 83 

    如果设置pctfree 5 pctused 85,那么当删除一些行使块的已用空间低于85%时,块会被重用,但是因为要预留5%的空闲空间,
    所以,对于已用空间刚刚低于85%的块,重用空间就只有10%,对于8K的块,可用810Byte,平均行长83,可以再放入9行,所以这个参数也是可以的。

    但是,如果是病人费用记录,平均行长229,这样设置,只能放下3行,这个参数就不太合适了
     
        NUM_ROWS BLOCKS AVG_ROWS_BLOCK AVG_ROW_LEN    
     925133 38278 24 229 

    根据分析,病人费用记录的数据更新量不大,但是并发操作比较大,最好把Pctfree设置高一点
    所以,可以设置为pctfree 10 pctused 75(重用的块至少可以放5行,约1-2张单据),甚至pctused 70也是可以的。

    如果一个块的数据行数太多,可能造成热块争用,但是相对于减少存储,减少IO,减少内存占用带来的好处来说,热块不是特别突出的情况下可以不考虑。

  • 相关阅读:
    Python自动化开发学习的第十周----Redis
    Python自动化开发学习的第九周----线程、进程、协程
    Python自动化开发学习的第八周----socket网络编程
    Python自动化开发学习的第七周---面向对象编程进阶
    Python自动化开发学习的第六周------面向对象学习
    Python自动化开发学习的第五周------模块介绍
    java保留两位有效数字
    java中对象的初始化顺序
    &和&&的区别
    关于Java中遍历map的四种方式
  • 原文地址:https://www.cnblogs.com/zyk/p/570058.html
Copyright © 2011-2022 走看看