背景:财务有张清单表的逻辑非常简单,在数据库查询工具中查非常快,但是一发布到Cognos,一个月的数据就要取30分钟以上。值得注意的是,这是一张使用很久一直在运维的清单表,由于工作人员缺乏稳定性,几经转手之后没有人知道为什么报表突然慢了下来,要找到问题原因并解决性能问题

记录如下:

假设1:因为cognos内存不够,数据量大导致超负荷,进而影响性能。

解决方案1:尝试了新建视图,把报表上的表关联全部都转移给数据库,所有的数据查询都在视图里处理。此方法不修改报表report里的任何设计,只修改Framework Manager里的模型。

测试结果1:结果不很理想,改成数据改成从视图中获取后,报表查询性能没有任何提升。

结论1:改成视图的方法不可用。

需要另外想办法。或许是假设1不成立。需要梳理新的思路:

假设2:报表Report Studio里有加很多过滤器,考虑过滤器影响性能

解决方案2:删除所有的过滤器

测试结果2:测试结果不理想,性能没有任何提升。

结论2:影响性能的点不在过滤器

结合理论可以直接推翻假设2,但是还是试了一下。

还是需要找问题,在调优过程中有个问题一直得不到很好的解释:为什么在数据库管理工具中5秒的查询,报表上就要30分钟,报表究竟做了什么处理?

假设3:报表的查询中存在影响性能的设置,

解决方案3:尝试调试查询的执行优化改成第一行、修改自动分组和汇总为否、使用SQL WITH 子句、累计处理改成本地、使用本地高速缓存(这个是当时的第一猜想,但是后面证实问题不在这里)改为是、按照与1.x相同的运行方式运行……

测试结果3:性能没有任何提升。

结论3:影响性能的点不在查询的属性。

假设4:查询字段做了类max()的聚合函数等逻辑运算。

解决方案4:考虑到是清单报表,没有加分组和聚合函数的必要,所以一开始排除了这种情况。但是目前所有结论都指向字段。是特定的字段影响了整体性能。这里使用二分法测试问题点。

测试结果4:经过n轮二分法,问题最终定位在统计时间这个字段上。当控制查询区间在一月份时,不加统计时间这个字段,查询5秒即可完成。显然问题在统计时间。但是统计时间没有加聚合函数,究竟是怎么影响的性能呢?经过检查统计时间的属性,发现统计时间的预排序属性设置为“降序”,尝试把这里设置为:“不排序”……不到5秒。(完美

/*

为了解决这个困惑,尝试新建了一个空白表,重新拖所有表字段。从0-1的过程可控性高,这里希望可以通过正向的操作对比现在的报表中存在的影响性能的设置或者属性。

很幸运。第一次尝试就发现,直接拖进来的字段构成的新清单没有性能问题。

那么现在至少方向是对的,而且逐渐接近真相,就在字段里,极可能是哪个字段的设置影响了性能。

通过多次二分法定位到问题字段是统计时间,设置了排序。

这段草稿里的内容,以注释的形式保留在本记录中。

*/

结论4:字段预排序会扫描全表,非常影响性能。

关于cognos底层实现预排序的机制,暂时没有找到权威的解释,但是通过此次优化,有如下猜想:当字段进行预排序时,会先把结果集全部查询出来放到cognos工具临时表空间里,随后并做全表扫描完成排序动作。此报表6月截至目前有至少12万条记录,显然这个数据量对于报表工具而言是超负荷的。

至此报表优化的思路总结如下:

1.检查并优化取数逻辑;

2.清单表查询的自动分组和汇总属性选择否;

3.排查是否在报表层加max和排序;--排序时,底层会将数据全部载入后一一排序,最后才展示出来,非常耗时;

以上。

2021.06.22

中国上海 Esther 苏

Cognos report studio 清单表优化实录相关推荐

  1. MySQL 大表优化方案

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:manong sf.gg/a/119000000615818 ...

  2. 大数据开发实战:Hive优化实战2-大表join小表优化

    4.大表join小表优化 和join相关的优化主要分为mapjoin可以解决的优化(即大表join小表)和mapjoin无法解决的优化(即大表join大表),前者相对容易解决,后者较难,比较麻烦. 首 ...

  3. 一入职!就遇到MySQL亿级大表优化....

    作者丨jia-xin 出处: https://www.cnblogs.com/YangJiaXin/p/10828244.html "前段时间刚入职一家公司,就遇到了 MySQL 亿级大表优 ...

  4. 干货!!!MySQL 大表优化方案(1)

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

  5. MySQL通过两表避免回表_mysql利用覆盖索引避免回表优化查询

    前言 说到覆盖索引之前,先要了解它的数据结构:B+树. 先建个表演示(为了简单,id按顺序建): id name 1 aa 3 kl 5 op 8 aa 10 kk 11 kl 14 jk 16 ml ...

  6. mysql+索引优化+查询优化+存储优化_mysql利用覆盖索引避免回表优化查询

    前言 说到覆盖索引之前,先要了解它的数据结构:B+树. 先建个表演示(为了简单,id按顺序建): id name 1 aa 3 kl 5 op 8 aa 10 kk 11 kl 14 jk 16 ml ...

  7. 如何更改计算机性能,如何修改注册表优化电脑性能 修改注册表优化电脑性能方法...

    注册表相信电脑爱好者都不会陌生,通过 修改注册表可以实现优化各种电脑技能 ,在电脑安全设置,系统稳定性方面起着很重要的作用,但由于注册均为表值,因此很多电脑爱好者对于注册表都不赶去触及,害怕因此而影响 ...

  8. MySQL大表优化技术要点科普

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"获取公众号专属群聊入口 来源:kks.me/b3fJk 当MySQL单表记录数过 ...

  9. 来个硬货——长文解读:基于业务场景的MySQL千万级大表优化

    千万级大表如何优化,这是一个很有技术含量的问题,通常我们的直觉思维都会跳转到拆分或者数据分区,在此我想做一些补充和梳理,想和大家做一些这方面的经验总结,也欢迎大家提出建议. 从一开始脑海里开始也是火光 ...

  10. 史上最全MySQL 大表优化方案(长文)

    转载自  史上最全MySQL 大表优化方案(长文) 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 一.单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑 ...

最新文章

  1. python怎么把程序封装成函数_PYTHON中如何把固定格式代码,封装成一个函数?
  2. 懂AI值百万年薪?你不知道的开发者薪资榜单大盘点
  3. 一根火柴可以将一瓶大可乐吊起来吗?
  4. 薅羊毛 Colab使用外部数据的7种方法!
  5. imgkit分辨率_pythonhtml2image: imgkit 和 wkhtmltoimage的坑
  6. 从mysql到大数据(二)--数据库的认识
  7. 加速你的Hibernate引擎(下)
  8. VS2017安装或卸载错误1303
  9. NOIP2015DAY2T2子串
  10. 装饰器python的通俗理解_Python装饰器的通俗理解
  11. 想学PHP来兄弟连是正确的选择 初识兄弟连三周
  12. java 工作流 详解
  13. 简述Linux下三种引号的用法,Linux Shell中有三种引号的用法
  14. 旧笔记本改linux桌面,在老旧笔记本电脑上成功安装xubuntu
  15. win10添加计算机语言,win10输入法,详细教您怎么在win10里添加输入法
  16. javascript检测5到10位数的QQ号
  17. Anaconda安装完python文件.py不显示黄蓝图标
  18. 程序员是怎样的一群人
  19. 《高质量C/C++编程指南》第1期
  20. 【cs224n学习作业】Assignment 1 - Exploring Word Vectors

热门文章

  1. c语言及程序设计基础 pdf,c语言程序设计基础.pdf
  2. dva开发一个cnode网站(1)
  3. Notepad++的SQL格式化插件
  4. 廖雪峰python教程杨辉三角_打印杨辉三角(廖雪峰python教程)
  5. ROST情感分析的语法规则_从词法分析角度聊 Go 代码组成
  6. 校园网编写linux网络认证,个人心得:校园网linux锐捷认证ruijie(xrgsu)使用及xrgsu下载...
  7. DSP28335 CAN模块详解
  8. 基于python的-使用正则表达式验证手机号
  9. 华硕笔记本电脑<举例:华硕玩家国度G752VS>启动时/重装系统后开机会自动进入BIOS界面?
  10. c语言关键用法大全,c语言关键字的用法详解