zoukankan      html  css  js  c++  java
  • 可优化的报表库

      在业务中涉及到汇总各项数据,图表数据展示等功能的时候,自然缺少不了report。由于报表库,表的字段长度,数据量都是目前业务中最大的一个模块,所以慢sql的优化是需要一直要去做的,并且在实践中总结经验和教训,尽可能的提出最优方案。
     
     Attention
      报表出现过一个字段长度过长而无法增加某一字段varchar(5000);
      原因:因为在MySQL表设计中,所有字符类型的长度加起来不能超过65535,可以考虑使用blob或者text类型。
     
    ====================================================================================================
     
    慢sql案例:
    1.只针对报表来说,报表可以采取,前一天晚上提前统计好客户(user)所需要的数据,比如顾客的常规性查询
    1 select  column1,column2,column3~  from table_name where user_id =xxx and ~ and ~ limit 100000,500

    2 Attention由于报表的表字段经常达到上百个,只需要将所需要的列名select即可,不推荐使用select * ,而且在维护管理MySQL过程中尽量避免select *。
     原因
      这种类型的sql主要是耗时在分页上,并且将前面查询过的数据抛弃掉。可以根据慢日志发现,这些sql是从limit 0,500开始查询的,也就是说每一次都只取500条。这个是客户的报表导出功能,最终会将这些数据导出成excel
     解决方案
      可以在前一天晚上,将每个租户的每个店铺或者其他级别group by 来将这些数据全部导出到hadoop里面或者直接导出成excel;可以是drds 中trade_daily_report的格式,包括各种汇总信息。
     
    2.统计报表的批量并发性sql,第一列数字表示该类型的sql在同一时刻,通过慢sql页面抓取到的(由于开发反馈insert或者replace时,数据库很慢)
    1 206           replace into table_report1~~(这些都是一条sql,value一组数据)
    2 215           replace into table_report2~~
    3 1737          replace into table_report3~~
    4 79            replace into table_report4~~

     原因
      这种类型的慢sql主要是在commit的时间消耗比较多。(从开发的角度来思考,由于双十一的数据量过大,不能从降低并发的角度优化,否则数据无法完成。而且程序端出现诸多的插入超时,超时时间为10s)
    解决方案:
      优化策略是将多组value值一次性replace,这样就可以减少commit的次数,但是也要注意value的数据条数不要过大,最好根据数据库的性能实际测试一下;另外若数据量过大的情况,可以尽量增加程序端的超时时间。
  • 相关阅读:
    scanf使用尿性
    System : Assembly Programming
    Biology 03: Cardiovascular
    remove the smallest element from a linkedlist
    Relativity 04: CH4CH5
    Relativity 03: Space and Time in Classical Mechanics
    146 __str__和__repr__
    145 __init__和__new__
    144 __call__
    143 __doc__
  • 原文地址:https://www.cnblogs.com/Kid-Zhou/p/8492975.html
Copyright © 2011-2022 走看看