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

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

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

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

🔗直播资源

📖回答汇总

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

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

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

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

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

set long 888888
set longchunk 8888
set pages 0
set lines 8888
set trimout on
spo XXX.html
select 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性能优化和诊断案例》实体书籍。


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

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

posted @ 2021-11-05 12:18  墨天轮  阅读(317)  评论(0编辑  收藏  举报