如何快速又准确地获取数据量(或增量)

jinchenfly 2014-11-13 03:48:49
目前在做一个数据库监控系统,需要每天统计每张表的数据量,然后呈现每天的数据增量。数据库数据量为上亿级,因为是每天统计一次,所以本来想在晚上用count(*)来统计。但是对方说晚上他们还要跑很多其他任务,不能为了统计占用大量性能,而且count甚至可能跑不完,所以不让用count,现在改成在dba_tables里取num_rows的方法来获取数据量。跑了几天后,他们又嫌数据量不准确,大多数表统计出来的增量都是0,他们要我找出又快又准确(相对)的解决方案,求解这该怎么做?
...全文
645 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2014-11-14
  • 打赏
  • 举报
回复
增量当然是只算新增的记录数。
如果只算剩余记录数差值,出负数都是可能的,“大多数表统计出来的增量都是0”为什么一定是错误的?
bw555 2014-11-14
  • 打赏
  • 举报
回复
这些表是不是每天只是插入操作? 给这些表增加插入时间的字段,时间列的赋值可以使用触发器实现,不需修改前台程序 然后时间列加上索引,利用时间条件查找当天的增量 注意时间列上不要使用函数,否则不走索引 where col>=trunc(p_date) and col<trunc(p_date)+1
jinchenfly 2014-11-14
  • 打赏
  • 举报
回复
引用 2 楼 Tiger_Zhao 的回复:
数据表有没有用到自增序列号,晚上取对应 sequence 的 CURRVAL。
会删数据啊
jinchenfly 2014-11-14
  • 打赏
  • 举报
回复
引用 1 楼 bw555 的回复:
执行命令 analyze table t1 compute statistics for table; -->user_tables (只对表的总体信息进行统计,比如行数多少等,不涉及到表字段) 执行之后获取num_rows 没测试过执行效率,我这手边也没有海量数据的表 你可以找个表先试试,看看速度怎么样
本地试了下,速度比count(*)还慢,分析应该包含了count(*)的功能了吧。
Tiger_Zhao 2014-11-13
  • 打赏
  • 举报
回复
数据表有没有用到自增序列号,晚上取对应 sequence 的 CURRVAL。
bw555 2014-11-13
  • 打赏
  • 举报
回复
执行命令 analyze table t1 compute statistics for table; -->user_tables (只对表的总体信息进行统计,比如行数多少等,不涉及到表字段) 执行之后获取num_rows 没测试过执行效率,我这手边也没有海量数据的表 你可以找个表先试试,看看速度怎么样

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧