当前位置:文档之家› 数据库调优

数据库调优

数据库调优
数据库调优

转-调优的五个基本原理

以下五个基本原理参透着对性能的考虑:

1.全局考虑,局部修整;

2.划分打破瓶颈。

3.启动成本高,运行成本低。

4.服务器和客户端之间合理的任务分配。

5.性能价格比。

下面将简单描述每个原理及其相关应用的例子。

1.1全局考虑,局部修整

只有正确地找出问题,并将对数据库的干涉减到最少,才能有效地进行调优。这就要求进行一些实验以获得正确的结论。以下两个例子描述了常见的错误:

●全局调优常常先检查硬件设备的统计数据,然后得

出处理器的利用率、输入输出活动、页面调度等数据。

如果某项值(如磁盘活动量)过高,初级调优者就会

购买新硬件(买更多的磁盘)。但是在许多情况下,

这样做并不妥当。例如经常执行的查询不使用索引面

直接对表进行扫描,又或者日志文件和常被访问的数

据共用同一磁盘,这些都会导致很多的磁盘活动。这

时,在不同磁盘间创建索引或者移动数据文件,都可

能比购买新硬件更能降低成本且更有效。

数据库管理员没有增加数据库缓冲区的大小而引起许

多不必要的磁盘访问,也是导致磁盘活动过多的常见

原因。

●调优者常常会测量某个查询所有的时间,如果比较

长就尽量缩短。但如果该查询很少执行,则对它进行

调优就有点得不偿失了。例如将仅占运行时间1%的查

询的速度提升两倍,最多可使系统加速0.5%(该例子

同时也说明如果查询是很关键的,就必须尽量提高其

效率)。所以,应该首先将问题定位到一个查询上并

对它进行优化,但必须保证这是个关键查询。

即使是对特定问题进行处理,也必须考虑全局。开发者可能会要求采用他们指定的查询并“找到使执行尽可能快的索引”。通常,理解应用的目的有助于找到更简单的解决方法,从而把工作做得更好,这意味着要和设计者一起详细讨论所有的事情,就像临床医生一样,应尽力解决隐藏在表面现象之后的问题。

1.2划分打破瓶颈

大多数情况下,系统运行缓慢不是由于所有部件都饱和引起的,而是由于系统中的某个部分限制了整体的性能,这些部分称为瓶颈。

可以把瓶颈想像成高速公路上的交通阻塞,常常是因为大

量车辆必须从一个窄道通过,或者因为一条路上的车流要

和另一条路上的车汇流合造成的。无论哪种情况,瓶颈就

是公路交通网中车辆数与车道数的比率最高的那段路。解

决的方法是要先找到瓶颈所在,然后采用下面两个策略之

一:

1.让司机在车道数较少的路段开得快些。

2.多修几个车道以减少每条道上的车辆数,或者鼓励司

机避开车流高峰。

第一个策略是局部调整(例如采用增加索引或者重写查询的方法,以便更好地利用现有索引),应该首先考虑。第二个策略意味着进行划分。

数据库系统中的划分将负载分散到更多的资源上执行,或者在时间上并行分配,从而减少某个部件上的负载量。很多情况下划分的确能解决瓶颈问题。所以,像大多调优一样,划分必须谨慎使用。本文档的主旨很简单,那就是:发现瓶颈时,首先尽量加速它所在的部件,如果没有效果,再进行划分。

1.3启动成本高,运行成本低

许多人造物都会耗费大量的资源用来启动,例如汽车(它的点火系统,应急刹车)、电灯泡(它的寿命主要取决于被打开的次数)和数据库系统。

在磁盘上开始一个读操作是很耗时的,但是一旦开始,磁盘就能高速地传输数据。因此从一个磁道连续

读64KB的数据,很可能比从该磁道两次读取512字节

数据所花费的时间还短。因此,经常被扫描的表应当

连续存放在磁盘上。当某个重要的查询从包含成百上

千列的表中只查取少数几列时,垂直划分是个好策略。

●在分布式系统中,通过网络发送一条消息后的反馈

时间比在一条消息里发送很多字节所赠加的时间开销

高很多。实际上,发送1KB的包,时间开销只比发送

1字节的包大一点。这意味着,发送大块数据比发送

小块数据好。

●即使对简单查询而言,解析、进行语义分析、选择

存取路径的系统也是惊人的(在大多数系统中超过

10000条指令)。这表明,应该事先编译经常执行的

查询。

●在使用标准编程语言(诸如C++,Java,Perl,COBOL)

调用数据库系统时,某些系统(如大多数关系系统)

中,打开链接并进行调用会导致很大的开销。所以,

程序最好是执行简单的SELECT调用,然后循环引用其

结果,而不是循环地多次调用数据库(每次都使用

SELECT)。另外,缓存数据库连续也是个不错的选择。

以上4个例子列举了4种不同的初始成本:获取第一个要读的字节;发送消息的第一个字节;执行前预备一个查询;

有效地利用调用。这些例子所要简明的道理是一样的。用尽可能少的启动次数来获取最好的性能。

1.4要从数据密集型的系统获得最好的性能,不仅需要对系

统的数据库管理部分进行调优,还需要考虑如何在数据库系统(服务器)和应用程序(客户)之间分配工作。特定的任务应该被分配到哪里呢?这取决于以下3个主要因

素:

●客户与服务器的相关计算资源:如果服务器过载,

其他部分都正常工作,部分任务就应该迁移到客户端

去。例如,一些应用程序会将计算密集型的工作分配

给客户端。

●相关信息的获取:当数据库发生变化时(如表插入)

系统应该有些响应(如写到屏幕上去)。设计良好的

系统应该在内部使用触发器,而不是在应用程序中进

行轮询。这是因为轮询法会定期地查看表是否变化,

而触发器仅在发生变化时被激发,因此只需要很小的

开销。

●数据库任务和屏幕是否进行交互:如果存在交互,

那么访问屏幕的那部分应该放在事务之外执行,原因

是屏幕交互会占用大量时间(至少几秒),如果事务

T特有时间片,那么T会阻止其他事务访问它所持有

的数据,所以事务应被分成3步:

(a)一个用来检索数据的短事务。

(b)一个交互会话,它发生在客户端,并且在事

务环境之外(不持锁)。

(c)用来设置交互会话期间变化的另一个短事务。

1.5性能价格比的权衡

为提高应用程序的速度,需要提供一定的内存、磁盘或计算资源,下面将介绍这一点。

●增加RAM可使系统增加缓冲空间,减少磁盘访问的

次数,从而增加系统的速度。当然,RAM并不是免费的。

●增加索引会使关键查询执行起来快很多,但是这需

要更多的磁盘空间和更多的内存,还需要更多的处理器时间和磁盘访问,用来完成不使用索引的插入和更新操作。

●用临时的划分将长查询和在线更新分离后,会发现

分配给这些长查询的时间太少了。这时,可以创建专用的归档数据库供长查询使用。从性能角度看,这是个很好的解决办法,但需要购买并维护一个新的计算机系统。

对以上的问题,一位关系数据库供应商的顾问简单地概括说:“想要速度,那么你愿意出多少钱呢?“

系统性能优化方案

系统性能优化方案 (第一章) 系统在用户使用一段时间后(1年以上),均存在系统性能(操作、查询、分析)逐渐下降趋势,有些用户的系统性能下降的速度非常快。同时随着目前我们对数据库分库技术的不断探讨,在实际用户的生产环境,现有系统在性能上的不断下降已经非常严重的影响了实际的用户使用,对我公司在行业用户内也带来了不利的影响。 通过对现有系统的跟踪分析与调整,我们对现有系统的性能主要总结了以下几个瓶颈: 1、数据库连接方式问题 古典C/S连接方式对数据库连接资源的争夺对DBServer带来了极大的压力。现代B/S连接方式虽然不同程度上缓解了连接资源的压力,但是由于没有进行数据库连接池的管理,在某种程度上,随着应用服务器的不断扩大和用户数量增加,连接的数量也会不断上升而无截止。 此问题在所有系统中存在。 2、系统应用方式(架构)问题(应用程序设计的优化) 在业务系统中,随着业务流程的不断增加,业务控制不断深入,分析统计、决策支持的需求不断提高,我们现有的业务流程处理没有针对现有的应用特点进行合理的应用结构设计,例如在‘订单、提油单’、‘单据、日报、帐务的处理’关系上,单纯的数据关系已经难以承载多元的业务应用需求。 3、数据库设计问题(指定类型SQL语句的优化)

目前在系统开发过程中,数据库设计由开发人员承担,由于缺乏专业的数据库设计角色、单个功能在整个系统中的定位模糊等原因,未对系统的数据库进行整体的分析与性能设计,仅仅实现了简单的数据存储与展示,随着用户数据量的不断增加,系统性能逐渐下降。 4、数据库管理与研究问题(数据存储、物理存储和逻辑存储的优化) 随着系统的不断增大,数据库管理员(DBA)的角色未建立,整个系统的数据库开发存在非常大的随意性,而且在数据库自身技术的研究、硬件配置的研究等方面未开展,导致系统硬件、系统软件两方面在数据库管理维护、研究上无充分认可、成熟的技术支持。 5、网络通信因素的问题 随着VPN应用技术的不断推广,在远程数据库应用技术上,我们在实际设计、开发上未充分的考虑网络因素,在数据传输量上的不断加大,传统的开发技术和设计方法已经无法承载新的业务应用需求。 针对以上问题,我们进行了以下几个方面的尝试: 1、修改应用技术模式 2、建立历史数据库 3、利用数据库索引技术 4、利用数据库分区技术 通过尝试效果明显,仅供参考!

大型ORACLE数据库优化设计方案

大型ORACLE数据库优化设计方案 本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了ORACLE数据库的优化调整方案。 对于ORACLE数据库的数据存取,主要有四个不同的调整级别,第一级调整是操作系统级 包括硬件平台,第二级调整是ORACLE RDBMS级的调整,第三级是数据库设计级的调整,最后一个调整级是SQL级。通常依此四级调整级别对数据库进行调整、优化,数据库的整体性能会得到很大的改善。下面从九个不 同方面介绍ORACLE数据库优化设计方案。 一.数据库优化自由结构OFA(Optimal flexible Architecture) 数据库的逻辑配置对数据库性能有很大的影响,为此,ORACLE公司对表空间设计提出了一种优化结构OFA。使用这种结构进行设计会大大简化物理设计中的数据管理。优化自由结构OFA,简单地讲就是在数据库中可以高效自由地分布逻辑数据对象,因此首先要对数据库中的逻辑对象根据他们的使用方式和物理结构对数据库的影响来进行分类,这种分类包括将系统数据和用户数据分开、一般数据和索引数据分开、低活动表和高活动表分开等等。数据库逻辑设计的结果应当符合下面的准则:(1)把以同样方式使用的段类型存储在一起; (2)按照标准使用来设计系统;(3)存在用于例外的分离区域;(4)最小化表空间冲突;(5)将数 据字典分离。 二、充分利用系统全局区域SGA(SYSTEM GLOBAL AREA) SGA是oracle数据库的心脏。用户的进程对这个内存区发送事务,并且以这里作为高速缓存读取命中的数据,以实现加速的目的。正确的SGA大小对数据库的性能至关重要。SGA 包括以下几个部分: 1、数据块缓冲区(data block buffer cache)是SGA中的一块高速缓存,占整个数据库大小 的1%-2%,用来存储从数据库重读取的数据块(表、索引、簇等),因此采用least recently used (LRU,最近最少使用)的方法进行空间管理。 2、字典缓冲区。该缓冲区内的信息包括用户账号数据、数据文件名、段名、盘区位置、表 说明和权限,它也采用LRU方式管理。 3、重做日志缓冲区。该缓冲区保存为数据库恢复过程中用于前滚操作。 4、SQL共享池。保存执行计划和运行数据库的SQL语句的语法分析树。也采用LRU算法 管理。如果设置过小,语句将被连续不断地再装入到库缓存,影响系统性能。 另外,SGA还包括大池、JAVA池、多缓冲池。但是主要是由上面4种缓冲区构成。对这

安卓性能优化方案

随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序。以上理由,足以需要开发人员更加专心去实现和优化你的代码了。选择合适的算法和数据结构永远是开发人员最先应该考虑的事情。同时,我们应该时刻牢记,写出高效代码的两条基本的原则:(1)不要做不必要的事;(2)不要分配不必要的内存。 我从去年开始接触Android开发,以下结合自己的一点项目经验,同时参考了Google的优化文档和网上的诸多技术大牛给出的意见,整理出这份文档。 1. 内存优化 Android系统对每个软件所能使用的RAM空间进行了限制(如:Nexus o ne 对每个软件的内存限制是24M),同时Java语言本身比较消耗内存,d alvik虚拟机也要占用一定的内存空间,所以合理使用内存,彰显出一个程序员的素质和技能。 1) 了解JIT 即时编译(Just-in-time Compilation,JIT),又称动态转译(Dynamic Translation),是一种通过在运行时将字节码翻译为机器码,从而改善字节码编译语言性能的技术。即时编译前期的两个运行时理论是字节码编译和动态编译。Android原来Dalvik虚拟机是作为一种解释器实现,新版

(Android2.2+)将换成JIT编译器实现。性能测试显示,在多项测试中新版本比旧版本提升了大约6倍。 详细请参考https://www.doczj.com/doc/6b16113991.html,/cool_parkour/blog/item/2802b01586e22cd8a6ef3f6b. html 2) 避免创建不必要的对象 就像世界上没有免费的午餐,世界上也没有免费的对象。虽然gc为每个线程都建立了临时对象池,可以使创建对象的代价变得小一些,但是分配内存永远都比不分配内存的代价大。如果你在用户界面循环中分配对象内存,就会引发周期性的垃圾回收,用户就会觉得界面像打嗝一样一顿一顿的。所以,除非必要,应尽量避免尽力对象的实例。下面的例子将帮助你理解这条原则: 当你从用户输入的数据中截取一段字符串时,尽量使用substring函数取得原始数据的一个子串,而不是为子串另外建立一份拷贝。这样你就有一个新的String对象,它与原始数据共享一个char数组。如果你有一个函数返回一个String对象,而你确切的知道这个字符串会被附加到一个Stri ngBuffer,那么,请改变这个函数的参数和实现方式,直接把结果附加到StringBuffer中,而不要再建立一个短命的临时对象。 一个更极端的例子是,把多维数组分成多个一维数组: int数组比Integer数组好,这也概括了一个基本事实,两个平行的int数组比(int,int)对象数组性能要好很多。同理,这试用于所有基本类型的组合。如果你想用一种容器存储(Foo,Bar)元组,尝试使用两个单独的Foo[]

大数据库优化(SQLServer)

SQL SERVER性能优化综述 近期因工作需要,希望比较全面的总结下SQL SERVER数据库性能优化相关的注意事项,在 网上搜索了一下,发现很多文章,有的都列出了上百条,但是仔细看发现,有很多似是而非或 者过时(可能对SQL SERVER6.5以前的版本或者ORACLE是适用的)的信息,只好自己根据以 前的经验和测试结果进行总结了。 我始终认为,一个系统的性能的提高,不单单是试运行或者维护阶段的性能调优的任务,也不单单是开发阶段的事情,而是在整个软件生命周期都需要注意,进行有效工作才能达到的。所以我希望按照软件生命周期的不同阶段来总结数据库性能优化相关的注意事项。 一、分析阶段 一般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性、可用性、可靠性、安全性需求往往吸引了我们大部分的注意力,但是,我们必须注意,性能是很重要的非功能 性需求,必须根据系统的特点确定其实时性需求、响应时间的需求、硬件的配置等。最好能 有各种需求的量化的指标。 另一方面,在分析阶段应该根据各种需求区分出系统的类型,大的方面,区分是OLTP(联机事务处理系统)和OLAP(联机分析处理系统)。 二、设计阶段 设计阶段可以说是以后系统性能的关键阶段,在这个阶段,有一个关系到以后几乎所有性能 调优的过程—数据库设计。 在数据库设计完成后,可以进行初步的索引设计,好的索引设计可以指导编码阶段写出高效 率的代码,为整个系统的性能打下良好的基础。 以下是性能要求设计阶段需要注意的: 1、数据库逻辑设计的规范化 数据库逻辑设计的规范化就是我们一般所说的范式,我们可以这样来简单理解范式: 第1规范:没有重复的组或多值的列,这是数据库设计的最低要求。 第2规范: 每个非关键字段必须依赖于主关键字,不能依赖于一个组合式主关键字的某些组 成部分。消除部分依赖,大部分情况下,数据库设计都应该达到第二范式。 第3规范: 一个非关键字段不能依赖于另一个非关键字段。消除传递依赖,达到第三范式应该是系统中大部分表的要求,除非一些特殊作用的表。 更高的范式要求这里就不再作介绍了,个人认为,如果全部达到第二范式,大部分达到第三

SDE性能调优方案

ArcSDE 9.1性能调优方案 编写:李国勇 日期: 2006-11-27 版本: 1.0 密级:内部公开 北京恒华伟业科技有限公司

第一章概述 影响ArcSDE运行性能的因素比较多,对其性能的优化需要根据具体情况而定。总体上说,对ArcSDE性能影响较大的因素是:服务器硬件配置、Oracle参数配置、ArcSDE 参数配置和图层管理模式。 服务器硬件配置包括:CPU主频、物理内存大小、系统总线速度、硬盘数量、磁盘寻道时间等,硬件配置参数不是本文的重点讨论内容。 Oracle参数配置包括表空间的组织和缓冲参数配置;ArcSDE参数配置包括存储参数配置和缓冲参数配置。 本调整方案主要针对输配电GIS系统,不一定适合其它行业。 本优方案所有参数基于ArcSDE 9.1、Oracle 9.2。 1.1 总论 一.性能调优的重点在Oracle,而不在ArcSDE,一般情况下,调整ArcSDE各种参数对性能提升作用不大,ArcSDE使用安装时的默认参数即可; 二.小数据量(图层数据总量小于1G存储空间)下,优化SDE的存储的优化对性能的提升不大,ArcSDE的四个频繁访问的系统表没有必要分开存储; 三.小数据量(图层数据总量小于1G存储空间)下,用户数据存储于SDE用户下对性能的影响也不大,但是出于数据库管理的考虑,建议尽可能将这两类数据分开 存储; 四.对于输配电GIS系统,数据库db_block_size设置为8KB完全满足使用要求,没有必要调整到16KB; 五.如果图层中单个图形元素覆盖范围差异不大,没有必要建立多级Grid Index,而且一般情况下默认Grid Index设置即可满足多数情况下的性能需求; 六.如果注册了版本,建议定期对数据库进行Compress和Analyse,同时要确保undo 表空间有足够可用空间(如1G); 七.定期对磁盘做碎片整理,以提升磁盘I/0性能。 1.2 参考文献 1.ArcSDE 9.1 Configuration and Tuning Guide for Oracle? -- ESRI 2005; 2.Managing ArcSDE 9.1 Application Servers -- ESRI 2005; 3.Cost Control: Inside the Oracle Optimizer -- Oracle Donald K. Burleson。 https://www.doczj.com/doc/6b16113991.html,/oramag/webcolumns/2003/techarticles/burleson_cbo_pt1.html

Oracle数据库性能优化

1系统问题 XX公司BI系统上线运行以来,客户反映系统目前存在着下面的几个问题,涉及到数据库和ETL. 问题一:表空间增长太快,每个月需增加3—5G空间。 问题二:ETL JOB会经常导致数据库产生表空间不足错误。 2系统优化分析 2.1分析思路 要解决表空间的问题,我们必须搞清楚下面几个问题: 思路一:真正每个月数据仓库增量是多少空间 目的:得出一个正确的月表空间增长量。 思路二:目前的数据仓库表空间是是如何分布的。 目的:找出那些对象是最占空间,分析其合理性。 2.2分析过程 要得到真实的数据分布必须对表进行分析,首先需要对数据仓库的oracle数据库进行表分析,。执行下面脚本可以对数据库进行表分析。

脚本一 analyze table SA_IMS_PRODUCT_GROUP compute statistics; analyze table SA_CONSUMP_ACT_DEL compute statistics; analyze table SA_FINANCE_ACT compute statistics; analyze table SA_CONSUMP_TGT_DEL compute statistics; analyze table SA_FACT_IS compute statistics; analyze table SA_CPA compute statistics; analyze table SA_REF_TERR_ALIGNMENT_DEL compute statistics; analyze table SA_IMS_MTHLC_BK compute statistics; analyze table SA_IMS_CHPA compute statistics; analyze table SA_FINANCE_PNL compute statistics; analyze table SA_CUST_TARG_SEG compute statistics; analyze table SA_CONSUMP_ACT compute statistics; analyze table SA_FINANCE_BS compute statistics; analyze table SA_FINANCE_BGT_QTY compute statistics; analyze table SA_CONSUMP_ACT0423 compute statistics; analyze table SA_CALLS compute statistics; analyze table SA_COMPANY_DAILY_SALES_ALL compute statistics; analyze table SA_IMS_MTHLC compute statistics; analyze table SA_IMS_MTHUS compute statistics; analyze table SA_CONSUMP_TGT compute statistics; analyze table TEST_TABLE compute statistics; analyze table SA_DOCTOR_CYCLE_EXTRACT compute statistics; analyze table SA_EXCHANGE_ACT compute statistics;

大型数据库的优化方法及实例

大型数据库的优化方法及实例 尹德明杨富玉杨莹时鹏泉 中国金融电子化公司 E_mail: dm_mis@https://www.doczj.com/doc/6b16113991.html, 1.引言 随着银行业数据集中,作为整个系统核心的数据库,其存放、管理的数据越来越庞大,已经超越GB而到达TB数据量层次,数据库的性能成为整个系统性能的关键。 国库会计核算系统是国库部门用以进行国库业务的会计核算,并通过支付系统、国库内部往来、同城票据交换系统进行资金清算的计算机网络系统。国家金库会计核算系统每天处理的税票数据多达10万笔,税收高峰可能会到100万笔,这样一年累计下来其中历史登记簿中的数据达到2000万条以上,给检索和数据处理带来非常大的困难。 如何对于一个已经上线运行的重要业务系统,通过对数据库的优化和简单的系统流程调整,实现系统性能的大幅提升具有现实、迫切、重要的意义。 2.优化策略 根据Sybase的数据存储机制,在进行一段时期的数据删除、插入和更新等操作后,数据库往往会产生大量的碎片。大量碎片的存在,会严重影响数据库的I/O性能,如果在使用数据库一段时间后,整理碎片,可以提高数据库的性能。由于国家金库会计核算系统在预处理、日间报解、日初始化等步骤,会大批量进行数据删除、插入和更新等操作,因此会产生大量的数据碎片。碎片整理对于国家金库会计核算系统性能优化将会有重要效果。 Sybase Adaptive Server对于按顺序存储和访问的页,在单个I/O中最多读取八个数据页。由于大部分I/O时间都花在磁盘上的物理定位和搜寻上,因此大I/O可极大地减少磁盘访问时间。在大多数情况下,希望在缺省数据高速缓存中配置一个16K缓冲池。为事务日志创建4K缓冲池可极大地减少数据库系统日志写操作的数量。 好的性能同优良的数据库设计及优秀的程序写法关系极大,可以这样说,如果一个数据库没有好的设计及对程序未进行优化的话即使对参数进行调整也不可能有好的性能。 3.数据库碎片整理 由于Sybase是通过OAM页、分配单元和扩展页来管理数据的,所以对OLTP应用的Database Server会十分频繁地进行数据删除、插入和更新等操作,时间一长就会出现以下几种情况: (1)页碎片 即本来可以存放在一个页上的数据却分散地存储在多个页上。如果这些页存储在不同的扩展单元上,Database Server就要访问多个扩展单元,因此降低了系统性能。 (2)扩展单元碎片 在堆表中,当删除数据链中间的记录行时,会出现空页。随着空页的累积,扩展单元的利用率也会下降,从而出现扩展单元碎片。带cluster index的table也有可能出现扩展单元碎片。当有扩展单元碎片存在,会出现以下问题: 对表进行处理时,常常出现死锁;利用较大的I/O操作或增加I/O缓冲区的大小也无法改变较慢的I/O速度;行操作的争用。 (3)扩展单元遍历 带有cluster index的table会由于插入记录而导致页分裂,但当删除记录后,页会获得释放,从而形成跨几个扩展单元和分配单元的数据,而要访问该数据就必须遍历几个扩展单元和分配单元。这将导致访问/查询记录的时间大大延长,开始时数据库的性能虽然较高,

22提供性能优化方案---Google-Code

Linux系统性能测试与分析 1、前言 通过对系统中和性能相关的各个环节的介绍,使大家知道出现性能问题时可以从那些方面入手去查,而分析典型应用对系统资源使用的特点,让大家对应用和系统资源的依赖有了更直观的认识。大多数的硬件性能问题主要和CPU、磁盘、内存相关,还没有遇到因为开发语言的运行效率对整个应用的性能造成影响,而应用程序设计的缺陷和数据库查询的滥用反倒是最最常见的性能问题。需要注意的是,大多数情况下,虽然性能瓶颈的起因是程序性能差或者是内存不足或者是磁盘瓶颈等各种原因,但最终表现出的结果就是CPU耗尽,系统负载极高,响应迟缓,甚至暂时失去响应,因此我们观察服务器状况时,最先看的就是系统负载和CPU空闲度。当你阅读完了这遍文档以后就会有一个对系统分析的思路。 2、性能分析的目的 2.1找出系统性能瓶颈 1.硬件瓶颈 2.软件瓶颈 2.2提供性能优化方案 1.升级硬件 2.改进系统结构 达到合理的硬件和软件配置,使系统资源使用达到平衡。但遗憾的是解决一个性能瓶颈,往往又会出现另外的瓶颈或者其他问题,所以性能优化更加切实的目标是做到在一定范围内使系统的各项资源使用趋向合理和保持一定的平衡。系统运行良好的时候恰恰也是各项资源达到了一个平衡体,任何一项资源的过渡使用都会造成平衡体系破坏,从而造成系统负载极高或者响应迟缓。比如CPU过渡使用会造成大量进程等待 CPU资源,系统响应变慢,等待会造成进程数增加,进程增加又会造成内存使用增加,内存耗尽又会造成虚拟内存使用,使用虚拟内存又会造成磁盘IO增加和CPU开销增加(用于进程切换、缺页处理的CPU开销) 3、性能相关的各个环节 3.1 硬件资源 3.1.1、CPU ⒈ 是否使用SMP。 ⒉ 单颗CPU的性能对依赖CPU的某些应用的影响很严重,比如数据库的查询处理。 3.1.2、内存

MySQL数据库性能(SQL)优化方案-期末论文

高级数据库技术——期末论文 基于SQL查询的MySQL数据库性能优化研究 :XX 学号:2014XXXXX 学院:计算机学院

摘要: 查询是数据库系统中最基本也是最常用的一种操作,是否具有较快的执行速度,已成为数据库用户和设计者极其关心的问题。在研究开源数据库管理系统MySQL 查询优化技术的基础上,主要结合传统SQL操作优化、深度分析 MySQL 源代码、现代数据库发展几方面进行诸如参数调优,MySQL关联查询,重写相关规则等容展开优化分析研究。 关键词:查询优化,查询重用,查询重写,计划优化

一、传统SQL查询优化操作 1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。 对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。 2.使用连接(JOIN)来代替子查询(Sub-Queries) MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示: DELETE FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,

数据库性能优化基础步骤

1性能优化基本步骤 1.1定位跟踪耗费资源较多的SQL语句步骤 1.1.1 通过SQL查询 (1): 查询出最耗费资源的SQL语句 select t1.SID, t1.SERIAL#, tt.HASH_VALUE, tt.ADDRESS, tt.BUFFER_GETS, --读内存次数 tt.DISK_READS, --磁盘物理读次数 tt.EXECUTIONS, --语句的执行次数 tt.BUFFER_GETS / tt.EXECUTIONS, --平均读内存次数 tt.SQL_FULLTEXT from v$sqlareatt, v$session t1 where (tt.BUFFER_GETS>100000 or tt.DISK_READS>100000) and tt.HASH_VALUE = t1.SQL_HASH_VALUE and tt.ADDRESS = t1.SQL_ADDRESS and t1.STATUS = 'ACTIVE' orderby tt.BUFFER_GETS desc (2):根据客户端程序发出的SQL来定位需要跟踪的session select s.sid sid, s.SERIAL# "serial#", https://www.doczj.com/doc/6b16113991.html,ername, s.machine, s.program, s.server, s.LOGON_TIME from v$session s 1.1.2 通过Oracle提供的SQL TRACE进行SQL跟踪 (1):跟踪前设定相应参数 1.查询得到需要跟踪的session 2.打开时间开关

Show parameter timed_statistics alter session set timed_statistics=true; execsys.dbms_system.set_bool_param_in_session(sid => 8,serial# => 3,parnam => 'timed_statistics',bval => true); 3.设置跟踪文件存放位置 Show parameter user_dump_dest alter system set user_dump_dest='c:\temp'; (2):启动跟踪功能并让系统运行一段时间 alter session set sql_trace=true; execsys.dbms_system.set_sql_trace_in_session(8, 3, true); (3):关闭跟踪功能 alter session set sql_trace=false; execsys.dbms_system.set_sql_trace_in_session(8, 3, false); (4):格式化跟踪数据文件,并分析跟踪结果文件 tkprof dsdb2_ora_18468.trc dsdb2_trace.txt EXPLAIN=SCOTT/TIGER tkprof各参数含义: ' traced_file ' 指定输入文件,即oracle产生的trace文件 'formatted_file'指定输出文件,即我们想得到的易于理解的格式化文件 'EXPLAIN' 利用哪个用户对trace文件中的sql进行分析得到该sql语句的执行计划1.2查看分析执行计划 1.2.1查看执行计划 (1):Sqlplus中可按F5查看执行计划 (2):使用执行计划表进行查看 使用语句将SQL语句的执行计划装入plan_table表,然后进行分析查看explainplansetstatement_id = 'dd'into plan_table for select t.type_name,t.source_value,t.standard_value from ODS_STD_COMP t,ODS_STD_COMP_BAK t1 where t.system_id = t1.system_id and t.type = t1.type and t.source_value = t1.source_value (3):示例演示 1.让ORALCE自动选择最优的执行计划,不人为干预 explainplansetstatement_id = 'dd'into plan_table for select t.type_name,t.source_value,t.standard_value from ODS_STD_COMP t,ODS_STD_COMP_BAK t1 where t.system_id = t1.system_id and t.type = t1.type and t.source_value = t1.source_value

MySQL5.1性能优化方案

MySQL5.1性能优化方案 1.平台数据库 1.1.操作系统 Red Hat Enterprise Linux Server release 5.4 (Tikanga) ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped 32位Linux服务器,单独作为MySQL服务器使用。 1.2.M ySQL 系统使用的是MySQL5.1,最新的MySQL5.5较之老版本有了大幅改进。主要体现在以下几个方面: 1)默认存储引擎更改为InnoDB InnoDB作为成熟、高效的事务引擎,目前已经广泛使用,但MySQL5.1之前的版本默认引擎均为MyISAM,此次MySQL5.5终于将默认数据库存储引擎改为InnoDB,并且引进了Innodb plugin 1.0.7。此次更新对数据库的好处是显而易见的:InnoDB的数据恢复时间从过去的一个甚至几个小时,缩短到几分钟(InnoDB plugin 1.0.7,InnoDB plugin 1.1,恢复时采用红-黑树)。InnoDB Plugin 支持数据压缩存储,节约存储,提高内存命中率,并且支持adaptive flush checkpoint, 可以在某些场合避免数据库出现突发性能瓶颈。 Multi Rollback Segments:原来InnoDB只有一个Segment,同时只支持1023的并发。现已扩充到128个Segments,从而解决了高并发的限制。 2)多核性能提升

SQL数据库优化方法

SQL数据库优化方法

目录 1 系统优化介绍 (1) 2 外围优化 (1) 3 SQL优化 (2) 3.1 注释使用 (2) 3.2 对于事务的使用 (2) 3.3 对于与数据库的交互 (2) 3.4 对于SELECT *这样的语句, (2) 3.5 尽量避免使用游标 (2) 3.6 尽量使用count(1) (3) 3.7 IN和EXISTS (3) 3.8 注意表之间连接的数据类型 (3) 3.9 尽量少用视图 (3) 3.10 没有必要时不要用DISTINCT和ORDER BY (3) 3.11 避免相关子查询 (3) 3.12 代码离数据越近越好 (3) 3.13 插入大的二进制值到Image列 (4) 3.14 Between在某些时候比IN 速度更快 (4) 3.15 对Where条件字段修饰字段移到右边 (4) 3.16 在海量查询时尽量少用格式转换。 (4) 3.17 IS NULL 与IS NOT NULL (4) 3.18 建立临时表, (4) 3.19 Where中索引的使用 (5) 3.20 外键关联的列应该建立索引 (5) 3.21 注意UNion和`UNion all 的区别 (5) 3.22 Insert (5) 3.23 order by语句 (5) 3.24 技巧用例 (6) 3.24.1 Sql语句执行时间测试 (6)

1系统优化介绍 在我们的项目中,由于客户的使用时间较长或客户的数据量大,造成系统运行速度慢,系统性能下降就容易造成数据库阻塞。这是个非常痛苦的事情,用户的查询、新增、修改等需要花很多时间,甚至造成系统死机的现象。速度慢的原因主要是来自于资源不足。 数据库的优化通常可以通过对网络、硬件、操作系统、数据库参数和应用程序的优化来进行。最常见的优化手段就是对硬件的升级。根据统计,对网络、硬件、操作系统、数据库参数进行优化所获得的性能提升,全部加起来最多只占数据库系统性能提升的40%左右(我将此暂时称之为外围优化);其余大部分系统性能提升来自对应用程序的优化,对于应用程序的优化可以分为对源代码的优化及数据库SQL语句的优化。在本文档只介绍外围优化及SQL语句的优化,对于源代码的优化需要相关方面的专家,形成统一的规范。 一个数据库系统的生命周期可以分成:设计、开发和成品三个阶段。在设计阶段进行数据库性能优化的成本最低,收益最大。在成品阶段进行数据库性能优化的成本最高,收益最小。规范的代码和高性能的语句,功在平时,利在千秋。 2外围优化 1、将操作系统与SQL数据库的补丁打到最高版本,WIN2003最高补丁是SP4, SQL SERVER2000最高补丁是SP4(版本号:2039)。 2、在服务器上不要安装与VA程序任何无相关的软件,甚至一些与VA运行 无关的服务都可以停掉。一般只安装SQL数据库、VA服务端服务及杀毒 软件。 3、杀毒软件避免对大文件进行扫描,特别是数据库(MDF和LDF)文件,一 定要从杀毒软件的范围内排除掉。 4、在进行服务器分区时,分区不要太多,两三个分区就可以了。分区最好 都使用NTFS格式。

Java程序性能优化方案

Java程序性能优化方案 StringTokenizer比String.split()方法效率高 更优化的方式 Java代码 while(true){ String splitStr=null; int j=temp.indexOf(';'); if(j<0)break; SplitStr=tmp.substring(0,j); tmp=tmp.substring(j+1); } while(true){ String splitStr=null; int j=temp.indexOf(';'); if(j<0)break; SplitStr=tmp.substring(0,j); tmp=tmp.substring(j+1); } 比String.startsWith和endsWith性能更优的方式:Java代码 int len=orgStr.length(); if(orgStr.charAt(0)=='a' &&orgStr.charAt(1)=='b' &&orgStr.charAt(2)=='b'); if(orgStr.charAt(len-1)=='a' &&orgStr.charAt(len-2)=='b' &&orgStr.charAt(len-3)=='c');

int len=orgStr.length(); if(orgStr.charAt(0)=='a' &&orgStr.charAt(1)=='b' &&orgStr.charAt(2)=='b'); if(orgStr.charAt(len-1)=='a' &&orgStr.charAt(len-2)=='b' &&orgStr.charAt(len-3)=='c'); StringBuffer(int capacity)指定初始容量可以减少扩容的操作

oracle数据库性能调优

Centos6.5操作系统下,oracle数据库性能调优 1.在liunx下对数据库性能调优,首先要考虑操作系统级别的问题如:如CPU、内存、IO的瓶颈,再考虑oracle本身参数的设置。 1. 可通过top 命令判断是否为CPU瓶颈,如果oracle进程占用CPU过多,可考虑为CPU的问题。 目前我们针对的主要是内存和磁盘的问题。 2.Oracle数据库内存参数的优化 ?与oracle相关的系统内核参数 ?SGA、PGA参数设置 (1)系统内核参数 修改/etc/sysctl.conf 这个文件,加入以下的语句: kernel.shmmax = 2147483648 kernel.shmmni = 4096 kernel.shmall = 2097152 kernel.sem = 250 32000 100 128 fs.file-max = 65536 参数依次为: Kernel.shmmax:共享内存段的最大尺寸(以字节为单位)。 Kernel.shmmni:系统中共享内存段的最大数量。 Kernel.shmall:共享内存总量,以页为单位。 fs.file-max:文件句柄数,表示在Linux系统中可以打开的文件数量。 net.ipv4.ip_local_port_range:应用程序可使用的IPv4端口范围。 可通过sysctl -p 查看内核参数的值,请确认各个内核参数只有一个,避免出现一个内核参数出现好几次的情况,导致正确的参数别覆盖。

需要注意的几个问题 关于Kernel.shmmax Oracle SGA 由共享内存组成,如果错误设置SHMMAX可能会限制SGA 的大小,SHMMAX设置不足可能会导致以下问题:ORA-27123:unable to attach to shared memory segment,如果该参数设置小于Oracle SGA设置,那么SGA就会被分配多个共享内存段。这在繁忙的系统中可能成为性能负担,带来系统问题。 Oracle建议Kernel.shmmax最好大于sga,以让oracle共享内存区SGA在一个共享内存段中,从而提高性能。 Oracle 11g实现了数据库所有内存块的全自动化管理,使得动态管理SGA和PGA成为现实。 日志文件及表空间文件的大小及位置也是影响性能的一个因素,排查过程如下。 应用 iotop -ao 命令查看oracle对磁盘读写对资源的占用情况, ora_lgwr_first进行对磁盘的访问较多。 使用

服务器性能调优

服务器性能优化 1、Apache+tomcat集群方式 服务器基本设置:1个apache集成二个tomcat。 安装apache http server省略,访问地址为http://127.0.0.1:8081 安装tomcat,解压apache-tomcat-6.0.20.zip,测试时我是把两个tomcat分开放在不同的虚拟机,其中一个是和apache同一台虚拟机。 两个tomcat分别命名为worker2和worker3 先说tomcat.worker2的配置: server.xml 第一步:配置http监听端口,这里端口设为8079,该步骤非必要,只要不冲突就行了。 第二步:配置AJP监听端口,这里端口设为8077,该步骤非必要,只要不冲突就行了。 第三步:配置服务器标识,这里标识名配置为:worker2,添加jvmRoute="worker2",该步骤必须。 在Engine节点启用集群配置,只需去掉Cluster节点前的注释就行了,该步骤必须,配置了集群才能实现Session复制,如果只有一个集群,只按我下边的配置就行了,如果多个集群,则不能按此配置,tomcat服务器内的帮助文档/docs/cluster-howto.html,/docs/config/cluster.html有介绍,需要的可以参考下。 要实现session复制,还需要在context.xml添加属性distributable="true",如下: 如果不想在context.xml中添加distributable="true",还有另一方法是在应用程序的web.xml中添加,不过这方法我没有测试。 配置完成,访问地址为:http://127.0.0.1:8079 另一个tomcat.worker3的配置 server.xml

数据库优化

关于数据库优化方面的文章很多,但是有的写的似是而非,有的不切实际,对一个数据库来说,只能做到更优,不可能最优,并且由于实际需求不同,优化方案还是有所差异,根据实际需要关心的方面(速度、存储空间、可维护性、可拓展性)来优化数据库,而这些方面往往又是相互矛盾的,下面结合网上的一些看法和自己的一些观点做个总结。 一个系统的性能的提高,不单单是试运行或者维护阶段的性能调优,也不单单是开发阶段的事情,而是在整个软件生命周期都需要注意。所以我希望按照软件生命周期的不同阶段来总结数据库性能优化相关的注意事项。 一、分析阶段 一般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性、可用性、可靠性、安全性需求往往吸引了我们大部分的注意力,但是,我们必须注意,性能是很重要的非功能性需求,必须根据系统的特点确定其实时性需求、响应时间的需求、硬件的配置等。最好能有各种需求的量化的指标。 另一方面,在分析阶段应该根据各种需求区分出系统的类型,大的方面,区分是OLTP(联机事务处理系统)和OLAP(联机分析处理系统)。 二、设计阶段 设计阶段可以说是以后系统性能的关键阶段,在这个阶段,有一个关系到以后几乎所有性能调优的过程—数据库设计。 在数据库设计完成后,可以进行初步的索引设计,好的索引设计可以指导编码阶段写出高效率的代码,为整个系统的性能打下良好的基础。 以下是性能要求设计阶段需要注意的: 1、数据库逻辑设计的规范化 数据库逻辑设计的规范化就是我们一般所说的范式,我们可以这样来简单理解范式:第1规范:没有重复的组或多值的列,这是数据库设计的最低要求。 第2规范: 每个非关键字段必须依赖于主关键字,不能依赖于一个组合式主关键字的某些组成部分。消除部分依赖,大部分情况下,数据库设计都应该达到第二范式。 第3规范: 一个非关键字段不能依赖于另一个非关键字段。消除传递依赖,达到第三范式应该是系统中大部分表的要求,除非一些特殊作用的表。 更高的范式要求这里就不再作介绍了,个人认为,如果全部达到第二范式,大部分达到第三范式,系统会产生较少的列和较多的表,因而减少了数据冗余,也利于性能的提高。 2、合理的冗余 完全按照规范化设计的系统几乎是不可能的,除非系统特别的小,在规范化设计后,有计划地加入冗余是必要的。 冗余可以是冗余数据库、冗余表或者冗余字段,不同粒度的冗余可以起到不同的作用。 冗余可以是为了编程方便而增加,也可以是为了性能的提高而增加。从性能角度来说,冗余数据库可以分散数据库压力,冗余表可以分散数据量大的表的并发压力,也可以加快特殊查询的速度,冗余字段可以有效减少数据库表的连接,提高效率。 3、主键的设计 主键是必要的,SQL SERVER的主键同时是一个唯一索引,而且在实际应用中,我们往往选择最小的键组合作为主键,所以主键往往适合作为表的聚集索引。聚集索引对查询的影响是比较大的,这个在下面索引的叙述。 在有多个键的表,主键的选择也比较重要,一般选择总的长度小的键,小的键的比较速度快,同时小的键可以使主键的B树结构的层次更少。 主键的选择还要注意组合主键的字段次序,对于组合主键来说,不同的字段次序的主键的性能差别可能会很大,一般应该选择重复率低、单独或者组合查询可能性大的字段放在前

相关主题
文本预览
相关文档 最新文档