写点什么

如何实现高效运维?来谈谈性能优化那些事(含直播回顾 Q&A)

用户头像
墨天轮
关注
发布于: 16 分钟前

数据库性能问题,常常是困扰 DBA 高效运维的难题之一。如何多角度地帮助 DBA,找到“数据库慢”的原因,保证系统高效、稳定、安全地运行?


2021 年 10 月 14 日,云和恩墨技术顾问,拥有八年 Oracle DBA 工作经验的段徐斌老师,在墨天轮社区带来了一场《性能优化那些事》的精彩直播分享。



本场直播吸引了 800 余人观看,朋友们的提问互动也十分积极热情。小编整理了其中的代表性问题,请段老师为大家作答。同时还在文中附上了本次直播课的视频回放、PPT 课件下载供大家查看下载。

🔗直播资源

📖回答汇总

Q1.数据库文件增长到 100G,前端业务系统运行慢,从数据库角度如何优化?


答:数据库慢主要看等待事件,Bad SQL 由于初期数据量少,不凸显。随着海量数据灌注逐步显现甚至拖垮系统。


Q2.如何确定在哪些列创建索引,使得 sql 语句能高效执行?


答 where 条件使用频繁切离散性高的列,对于两表连接的字段,应该建立索引,如果经常在某表的一个字段进行 Order By 则也可考虑建立索引,where 条件后跟多个联合条件离散高的可以建立联合索引。


Q3.您好段老师,请问 html 版执行计划怎么取?


set long 888888set longchunk 8888set pages 0set lines 8888set trimout onspo XXX.htmlselect dbms_sqltune.report_sql_monitor('SQL_ID',type=>'HTML') from dual;spo off  
复制代码


Q4.有一个大表,数据量大概有 1 亿行,已经做过表分区,会定期收集统计表信息,感觉过一段时间之后,相关联该表的查询就会逐渐变慢,像这种问题有什么好的分析和优化方法吗?


答:主要结合这个表关联的 SQL 的执行计划去优化,要合理设计索引,多表关联看下关联条件及列。


Q5.同一个 sql 并相同的 sql_id 有多个执行计划,这个怎么判断走哪个好?


答:这个涉及 SQL 的绑定执行计划,要结合执行计划来看,首先查看到最优执行计划之后绑定。


Q6. ORACLE 大表到另外一个库,大约 1 亿数据,用什么方法比较好呀?


答:单表的处理可使用数据泵的方式在非生产期间导入,可以 data_only 单独处理数据之后再并行建立索引这样更快,之后记得关闭并行就可,也可以整表数据泵导入导出。


Q7. 数据库命令行执行挺快,应用挺慢,是怎么回事?


答:这种比较常见是要结合其他 SQL,有存储过程不能单独看一个 SQL,应用是多个 SQL 组成的要结合上下文来看。


Q8.统计信息多久收集一次比较合适?尤其是针对大表,该表属于日常业务表,每日业务期间都会有大量的数据更新(insert 和 update)。


答:建议可调用窗口,设置非生产或低生产期间进行自动统计,窗口期系统就会自动找数据量变换大的表进行统计信息。也可以找系统维护窗口期手动统计。


Q9. 如何避免回表?


答:如果有可能的话,尽量只在索引上查询,不用回表或者只少量回表,有效的利用索引,减少回表次数,例如 count 也不要 count(*),依据需求 count 列或者(1)。


Q10. 一台服务器上跑多套数据库时,如何避免一套数据库出现性能问题时影响其他数据库?


答:CPU_COUNT 指定了 Oracle 实例可以同时使用的 CPU 的数量,数据库本身按需求调优 SGA 和 PGA,对于 data 盘来说要按实例区分数据文件更为安全。


Q11. initrans 等值怎么根据业务进行调整,建议原则是什么。


答:对于跑批 update 多并行多的表,要调整 pct_free 和 ini_trans,也不是越大越好,这个主要要看等待事件是否有:enq: TX - allocate ITL entry


Q12. 分区表空间的分区索引如何实现和表所在的表空间进行分离?


答:表空间和索引空间要设置分开。建表的时候表的 TABLESPACE 参数和索引的 TABLESPACE 参数可以手动设置。表空间使用权限要赋给相应 owner


Q13. 老师,刚才讲的是 sqlplus 中使用绑定变量,实际使用中比如在 PL/SQL 中该如何使用绑定变量?


答:Variable 列名 列参数 Exec :列 :=需要的赋值 ,对于使用频率高的 SQL,查询列一样的 SQL 就要绑定变量减少系统压力。


Q14. filesystemio_options 值为 none 有何影响,在 RAC 下需要设置为 setall 吗?


答:RAC 也需要设置,none 是默认的,要启用异步 IO,SETALL 就是在文件系统文件上启用异步和直接 I/O


Q15. 请问统计信息自动收集不开的话有影响吗?


建议依据生产时间开启自动统计信息窗口,手动统计有大表数据变更大的,不好实时更新统计信息,确保统计信息的准确性将直接影响 CBO 优化器对于 SQL 最佳执行计划的判断,影响 SQL 的执行效率。


Q16. ora-600 异常如何分析?


答:这个错误是 oracle 数据库的内部错误代码,他会因不同的问题触发,有些是致命的例如坏块引发的宕机,有些是需要打新的升级包升级的问题不致命例如[15214],分析的话通过结合 600 的异常参数日志 mos 制定处理方法。


Q17. 两张表关联,如何确定驱动表?


答:确定驱动表要结合多个环境,比如大表和小表的连接。比如一张表长度远远大于另一张表,建议从较大的表上驱动。一个表有索引,另一表无索引,无索引的表通常作为驱动表。对于 NESTED LOOPS、HASH JOIN、SORT MERGE JOIN 方式,驱动表选择较小的表放置右端 ,速度会更快


Q18. 一个数据量在 20t 左右的数据库,查询表空间使用率时执行非常慢,需要 1 个小时才能执行出结果,请问老师有没有什么优化的思路?


答:一般是回收站对象太多导致的,清理下回收站 purge dba_recyclebin,或者查看 dba_extents 看慢么?如果查询这个视图慢则和统计信息有关


Q19. 遇到过一个问题,分区表已经分区交换转储过数据,之后表索引和主键也都重建并收集统计信息了,为啥数据量少了反而查询性能上没有太大的提升?


答:查询的性能主要结合执行计划看,数据量不是主要参考条件,设置合适的索引,条件选择,通过执行计划参考回表等参数来看。


Q20. sql 监控工具有推荐的嘛?


可以试用恩墨白求恩,专业的数据库监控监控工具,监控数据库各项指标,对于 SQL 的监控各项都很细致专业。

🎁直播福利

当晚直播间为积极参与互动和问答的朋友送出了精美奖品。👏恭喜:张怀亮、博、张海 三名用户获得墨天轮周边套装(笔记本+鼠标垫),Billy 获得《Oracle 性能优化和诊断案例》实体书籍。




墨天轮,围绕数据人的学习成长提供一站式的全面服务,打造集新闻资讯、在线问答、活动直播、在线课程、文档阅览、资源下载、知识分享及在线运维为一体的统一平台,持续促进数据领域的知识传播和技术创新。


关注官方公众号: 墨天轮、 墨天轮平台、墨天轮成长营、数据库国产化 、数据库资讯

发布于: 16 分钟前阅读数: 3
用户头像

墨天轮

关注

数据库技术爱好者 2019.11.22 加入

墨天轮社区围绕数据人的学习成长提供一站式的全面服务。我们的愿景是共同建设一个有温度的技术社区和全新的数据社群聚合体,以乐知乐享之志,成同心共济之果。

评论

发布
暂无评论
如何实现高效运维?来谈谈性能优化那些事(含直播回顾 Q&A)