项目基本情况
最近系统碰到一个非常头疼的问题,数据库采用oracle10G,主备机模式,采用shareplex做数据同步,一个表销售数据近2亿数据,提供16万企业做服务;
问题描述
原始设计时候,给企业查询小孩搜明细的时候,并没有考虑时间段条件,而是按照企业id号进行查询,在一开始,数据量不大时候,没有任何,当数据接近1亿的时候,就出现大问题了,因为有一部分企业的数据量非常大,导致此单独按照此企业查询明细数据时候,数据量比较大,大概会有接近50万数据,因为没有默认时间段查询,查询结果集非常大,结果导致此明细查询的IO消耗非常大,因为默认只有企业ID条件,不管怎么做索引,都无法解决此sql的io性能问题,最终解决方法就是,默认增加时间段条件,默认只查询该企业最新一月时间明细数据,然后企业id和时间段的联合索引才解决此问题,真是一个sql,消耗死一台数据库;
结论
在做类似过亿数据量表的应用时候,如果涉及到明细数据查询时候,必须增加默认查询时间(一个月或者按照淘宝的三个月),以减少数据库的IO消耗
没有评论:
发表评论