- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅议数据库性能优化
浅议数据库性能优化
摘要:本文主要讨论在系统分析设计及开发阶段,如何进行数据库优化,以充分发挥数据库的性能。
关键词:数据库;性能;优化
随着计算机技术在各个领域的广泛应用,以及计算机硬件性能的不断提升,软件系统由最初满足业务的单一需求与功能,向着全面支撑企业生产管理各个环节,导致系统朝着复杂化、大型化的方向发展。大部分的系统运行离不开数据库的支撑,数据库系统的性能是信息系统高效运转的前提和保证。影响数据库应用性能的因素很多,既有软件方面的因素,也包括数据库运行的硬件环境、网络环境、数据库管理和维护方面的因素等。
一、在设计阶段进行数据库性能优化的意义
信息系统需要经历需求分析设计、开发测试、上线维护与下线三个阶段。在软件生命周期的系统分析设计与开发阶段是数据库应用优化的最佳阶段,能以最小代价收获最大的性能效益,而在系统上线后的维护阶段来进行调优则要花费更多的精力和代价,往往需要修改代码甚至暂停系统来进行优化,且性能的优化效果也不十分明显,这个阶段的优化不仅存在时间成本也容易造成其他业务问题,影响用户的体验。因此数据库性能优化通常在设计阶段进行。
二、数据库性能优化的策略
为了充分利用数据库的功能特性,在系统分析与设计阶段,数据库设计人员需要根据系统特点,确认哪些数据表频繁查询、频繁修改或只写入而偶尔进行查询的表,同时评估每个表数据量大小、周期增加量、访问量等信息作为数据库建库输入信息,作为初始参数、表空间及建表策略。设计规划阶段常采用以下几个策略:
(一)表数据和索引数据分开存储,各自使用独立的表空间:由于表数据与索引数据存放在相同表空间时,当应用程序对表进行读写操作时数据与索引的I/O操作将产生资源竞争,将降低了数据库的性能。故需要将表数据与索引数据分别存放在不同的表空间,并在物理层面将不同类型表空间的数据文件存在不同的物理磁盘上,以避免资源竞争。
(二)表分区的使用:系统中经常存在一些特别大的表且在日常业务处理过程增长量非常大,当表增长到一定程度后,查询数据的速度将会非常慢,这时需要对表进行分区管理,表分区后,逻辑上还是一张完整的表,只是将表中的数据在物理上存在多个表空间,这样查询数据不需要进行全表扫描。且分区还能增强表的可用性、方便维护,如果某个分区出现故障时,其他分区的数据还能使用,且可以针对单个分区数据修复迁移。
(三)内存表的表使用:计算机系统的性能瓶颈在硬盘的读写速度,数据库系统进行表数据操作时均是先将硬盘中的数据先读入内存然后在进行操作,故数据库的性能验证依赖于硬盘的读写速度。目前很多数据库均提供将表数据常驻内存的功能,故如果系统中存在一些频繁操作的表,在系统的内存空间允许的情况下可以将表建成内存,以提升数据访问速度。如:oracle数据库可以通过ALTER TABLE tablename CACHE。
三、优化SQL语句在数据库系统性能优化中的重要作用
SQL语句优化对数据库系统的性能起着决定性的作用,因此在开发过程中如果不注意SQL语句在程序中混入执行效率比较低脚本,将会对数据库性能造成较大影响,效率低下的脚本可能造成整个数据库系统宕机。故系统开发时需要每个开发成员对数据库SQL脚本编写规范进行宣灌并在测试过程中对所有的SQL进行检查,所有脚本均需要严格按照以下几个原则:
(一)每个数据库连接均有与之对应的断开:数据库为了保存良好性能都对数据库连接数进行了限制,如果大量数据库连接长时间连接未释放,当数据库的连接数接近或达到数据库最大连接数时,新数据请求将会长时间排队造成访问失败且存在数据库宕机的风险。故程序中数据库建立连接与断开连接需一一对应,并且程序中尽量使用较少的数据库连接或者数据库连接池以节省数据库的连接。
(二)避免长事务:应用系统进行大批量数据插入或删除操作时容易产生长事务,长事务会消耗大量的数据库资源,并造成数据库访问速度缓慢。为了避免长事务,可以对事务进行分割处理。对于一个由一组小事务顺序操作组成的大事务(如:银行交易系统的日终处理、电信运营商的每月计费处理),可以由一系列的事务完成整个事务,但其缺点是有可能因整个事务太大而使不能完成。为了避免由单个事务处理异常导致整个事务回滚,在系统开发设计需要对事务进行流程控制,每个小事务进行单独提交事务并记录断点,这样单个事务失败时只需要根据断点开始执行后续的事务的,不需要对整个任务进行重新执行。这样可以避免长事务,也可以节省执行时间并便于问题跟踪。
(三)使用相同的数据库编写规则:为了不重复解析相同的SQL语句,在第一次解析后,数据库会将SQL语句存放在内存中,当有新脚本需要执行时,数据将脚本跟与内存中已存在的脚本进行比较,如果存在相同的脚本,则根据解析过的脚
文档评论(0)