暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

云和恩墨钟浪峰:安全生产系列之SQL优化安全操作

原创 墨天轮编辑部 3天前
159

在当今数字化飞速发展的时代,数据库作为企业核心数据的存储和管理中枢,其性能与稳定性直接关系到业务能否顺畅开展。在数据库运维与优化工作中,SQL优化是一项关键任务,旨在提升数据库性能和响应速度,同时确保数据的准确性和完整性。然而,优化过程若操作不当,可能会引发诸多风险,如业务中断、数据异常等。

近期,云和恩墨技术顾问 钟浪峰 带来了《SQL优化安全操作(安全生产系列)》的技术分享,以下是对此次分享内容的详细整理。

我们也将持续分享【安全生产系列】的技术演讲,欢迎关注。
👉点击获取技术文档:https://www.modb.pro/doc/143662
点击查看视频回放:https://www.modb.pro/video/10273

SQL优化(或故障)常用处理及操作方法

在日常工作中,我们经常会遇到SQL性能问题,这些问题可能会影响系统的响应速度,甚至导致系统崩溃。为了应对这些问题,我们通常会采用以下几种常见的处理方法:

image.png

以下是进行SQL优化时以下需要遵循的安全操作规范:

image.png

索引:提升数据检索速度的关键

索引是数据库中用于加快数据检索速度的一种数据结构。在创建和管理索引时,我们需要注意以下几点:

1、索引创建的基本要点

  • 命名规范:为了便于管理和维护,索引的命名应遵循一定的规范。普通索引可以命名为“表名称_字段名_IND”,函数索引可以命名为“表名称_字段名_FIND”。
  • 风险评估:在创建索引时,可能会面临一些风险,如登录到错误的schema下、没有指定索引表空间、并行创建索引后未将并行度改回1等。这些风险可能会导致索引创建失败、空间不足或性能问题。
  • 操作过程:在项目SQL审核阶段,应与设计人员一起明确新索引的设计方案。在准备发布脚本时,要检查表空间定义和剩余空间,为新建的索引选择合适的表空间。在已有表上新建索引操作可能会对数据库造成一定的风险,因此应尽量安排在业务低峰期进行,并在ITIL中提交相应的变更申请。

image.png
image.png

2、索引创建失败导致数据库崩溃案例

某客户对一张上亿数据的表进行加索引操作,由于业务没有停,晚上操作时命令执行了几个小时,索引还没加上。担心影响第二天的业务,操作人员尝试取消操作,但没有返回,于是直接关闭了窗口。之后,查询dba_objects试图发现索引记录存在,但尝试用drop index删除时,返回找不到索引。最终,操作人员执行了delete from obj$ where object_id=’xxxx’命令,导致数据库crash,无法启动。

这个案例告诉我们,在进行索引操作时,必须谨慎对待,避免盲目取消操作或直接删除对象,以免造成不可挽回的后果。

image.png

统计信息:优化器生成执行计划的重要依据

1、统计信息的基本要点
统计信息是数据库优化器生成执行计划的重要依据。在收集和更新统计信息时,我们需要注意以下几点:

  • 影响范围评估:统计信息的改变会影响表上所有SQL的执行计划,因此在操作时需要确认影响的范围,避免因优化一个SQL而导致更多的SQL执行计划出错。
  • no_invalidate参数设置:no_invalidate参数决定了表上依赖的SQL是否会在统计信息更新后立即失效。通常情况下,我们建议将该参数设置为false,让表上依赖的游标立刻失效,以便在下一次解析时能够使用新的统计信息。但在某些情况下,如果表上依赖的SQL很多,设置为false可能会导致硬解析风暴,影响系统性能。
  • RAC集群操作注意事项:在RAC集群中进行统计信息收集时,需要特别注意节点之间的争用情况,避免在高负载节点进行操作,以免影响整个集群的性能。

image.png

2、更新导致RAC集群争用案例

在RAC集群中,某个节点CPU告警,发现某个SQL执行计划异常,判断是某个表统计信息没有更新造成的。DBA决定在第二个节点负载低的节点收集统计信息,结果造成了大量的GC等待,两个节点同时CPU很高,业务无法受理。这个案例说明,在RAC集群中进行统计信息更新时,需要特别注意节点之间的争用情况,避免在高负载节点进行操作,以免影响整个集群的性能。

image.png

MOVE表和shrink表

MOVE表和shrink表是优化表空间和降低高水位的常用方法。在进行这些操作时,我们需要注意以下几点:

1、MOVE表

MOVE表操作是数据库管理中的一个重要工具,它可以帮助优化数据库性能、管理存储空间、简化备份和恢复操作,并且可以在不影响业务的情况下进行。然而,执行此操作时需要谨慎,确保数据安全,并在测试环境中充分验证操作的可行性。

image.png

2、shrink表

在数据库管理中,shrink表是一种操作,用于收缩表所占用的空间,降低表的高水位线(High Water Mark, HWM),从而减少表的存储空间占用并优化性能。shrink表操作通过重新组织表中的数据,将空闲空间释放出来,同时调整高水位线的位置。

image.png

SQLPROFILE

在数据库性能优化中,SQL执行计划的稳定性至关重要。当SQL语句的执行计划出现波动时,可能会导致系统性能下降甚至崩溃。为了应对这一挑战,SQLPROFILE应运而生。

SQLPROFILE是一种用于固化SQL执行计划的技术,通过为SQL语句添加优化提示(Hints),可以确保其始终采用最优的执行路径。这种技术尤其适用于那些执行频率高且对性能要求严格的SQL语句。在使用SQLPROFILE时,我们需要注意以下几点:

image.png
image.png

通过以上内容的介绍,我们可以看到,SQL优化不仅需要技术知识,更需要谨慎的操作和严格的安全规范。希望这些内容能帮助大家在实际工作中更好地进行SQL优化,提升数据库性能,确保业务的稳定运行。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论