|
先声明一下, 本人非oracle专业人员,不是开发, 更不是dba, 因为在其他领域比较专业, 临时被抓夫处理这个问题. 数据库是oracle11g 11.0.2. 系统是一个会计的分账应用. 一张大表在线一年, 现有1112813014条数据. (如果我没数错, 应该是11亿多.) 平均每个工作日350万条记录.(一共295个工作日.) 表结构很简单, 单字段主键. 自增形, 值是从sequence来的. 表上没有任何其他索引. 查询基本上是某一时间段(from_date, to_date)的数据(基本是5天范围内), 外加一下其他的条件. 运行效率差可以想像. 好在查询基本是夜间产生报表. sql 加上 hint parallel 跑2,3个小时也没太大关系. 中间出过一二次大问题, 6,7个小时都运行不完. 最后通过手动减少数据量解决问题. 表的设计和开发者, 已经跳槽到其他公司,很欣慰,不在这祸害了. 随着数据量继续增加, 现在基本的想法就是通过分区(按时间 range) 提高效率. 按天分区,不太可行. 因为周末和节假日根本没有记录进来. 月分区觉得数据太大了. 下面是简单的统计数字 COUNT(*) TRUNC(BAL ---------- --------- 88375062 01/OCT/12 163326657 01/MAY/13 145804267 01/APR/13 90561567 01/JUN/13 106122906 01/JAN/13 98885441 01/DEC/12 110900877 01/FEB/13 89378244 01/SEP/12 135309877 01/MAR/13 81850952 01/NOV/12 12 rows selected. 个人感觉按星期分区比较理想. 想在这里请教各位专家. 1) 我的想法是否实际. 2) 如果可行? 有什么注意事项. 重建表, 导入数据,在线修改. 3) 分区后, 从硬件, 维护, 备份的角度, 需要做什么? 4) 如果不可行, 有无其他建议. 如果答案是问dba的话. 可能要失望了. 我们那理dba要是管用, 也就不用哥们我来这里玩票了. 先谢谢大家. |