系统瓶颈分析web
1、系统瓶颈分析示例算法
例1:sql
交易的响应时间若是很长,远远超过系统性能需求,表示消耗CPU的数据库操做,例如排序、执行aggregate functions(例如sam、min、max、count)等较多,能够考虑是否有索引以及索引创建的是否合理;尽可能使用简单的表联接;水平分割大表格等方法来下降该值。数据库
例2:数组
分段排除错误。测试工具能够模拟不一样的虚拟用户来单独访问web服务器、应用服务器和数据库服务器,这样就能够在web端测出的响应时间减去以上各个分段测出的时间就能够知道瓶颈在哪并着手调优。缓存
例3:服务器
unix资源监控(NT操做系统同理)中指标内存页交换速率(Paging rate),若是该值偶尔走高,代表当时有线程竞争内存。若是持续走高,则内存多是瓶颈。也多是内存访问命中率低。“swap in rate”和“swap out rate”也有相似的解释。网络
例4:多线程
unix资源监控(NT操做系统同理)中指标CPU占用率(cpu utilization),若是该值持续超过95%,代表cpu是瓶颈,能够考虑增长一个处理器或换一个更快的处理器。合理使用范围在60%至70%。并发
例5:
unix资源监控(NT操做系统同理)中指标磁盘交换率(Disk rate),若果该值参数值一直很高,代表I/O有问题。可考虑更换更快的硬盘系统、从新部署业务逻辑等,另外设置Tempdb in RAM,减低“max async IO”,“max lazy writer IO”等措施都会下降该值。
例6:
tuxedo资源监控中指标列队中的字节数(Bytes on queue),队列长度应不超过磁盘数的1.5~2倍。要提升性能,可增长磁盘。注意:一个raid disk实际有多个磁盘。
例7:
sqlserver资源监控中指标缓存点击率(cache hit ratio),该值越高越好。若是持续低于80%,应考虑增长内存。注意该参数值是从sql server启动后,就一直累加记数,因此运行一段时间后,该值不能反映系统当前值。
2、系统优化调整设置
一、CPU问题:
考虑使用更高级的CPU代替当前的CPU。
对于多CPU,考虑CPU之间的负载分配。
考虑在其余体系上设计系统,例如增长前置机,设置并行服务器等。
二、内存和高速缓存:
内存的优化包括操做系统、数据库、应用程序的内存优化。
过多的分页与交换可能下降系统的性能。
内存分配也是影响系统性能的主要缘由。
保证保留列表具备较大的邻接内存块。
调整数据块缓冲区大小(用数据块的个数表示)是一个重要内容。
将最频繁使用的数据保存在存储区中。
三、磁盘(I/O)资源问题
磁盘读写进度对数据库系统是相当重要的,数据库对象在物理设备上的合理分布能改善性能。
磁盘镜像会减慢磁盘写的速度。
经过把日志和数据库对象分布在独立的设备上能够提升系统的性能。
把不一样的数据库放在不一样的硬盘上,能够提升读写速度。常常把数据库、回滚段、日志放在不一样的设备上。
把表放在一块硬盘上,把飞簇的索引放在另外一块硬盘上,保证物理读写更快。
四、调整配置参数
包括操做系统和数据库的参数配置。
并行操做资源限制的参数(并发用户的数目、会话数)。
影响资源开销的参数。
与I/O有关的参数。
五、优化应用系统网络设置
能够经过数组接口来减小网络呼叫。不是一次提取一行,而是在单个往来往返中提取10行,这样作效率较高。
调整会话数据单元的缓冲区大小。
共享服务器进程比专用服务进程提供较好的性能。
3、数据库服务器性能问题及缘由分析
一、单一类型事务响应时间过长
数据库服务器负载、糟糕的数据设计、事务粒度过大、批任务对普通用户性能的影响。
二、并发处理能力差
三、锁冲突严重
资源锁定形成的数据库事务超时、数据库死锁。
4、数据库相关
一、数据库性能问题的通常解决办法
监视性能相关数据。
定位资源占用较大的事务并作出必要的优化或调整。
定位锁冲突,修改锁冲突发生严重的应用逻辑。
对规模较大的数据或者没法经过通常优化解决的锁冲突进行分布。
二、oracle与提升性能有关的特性
索引、并行执行、簇与散列簇、分区、多线程服务器、同时读取多块数据。
三、oracle配置的关键参数
MAX_DSPATCHERS:这个参数指定了系统容许同时进行的调度进程的最大数量。
MAX_SHARED_SERVERS:这个参数指定了系统容许同时进行的共享服务器进程的最大数量。若是系统中出现的人为死锁过于频繁,那么管理员应该增大这个参数的值。
PARALLEL_ADAPTIVE_MULTI_USER:当这个参数的值为TRUE时,系统将启动一个能提升使用并行执行的多用户系统性能的自适应算法。这个算法将根据查询开始时的系统负载自动下降查询请求的并行度。
PARLLEL_MIN_SERVERS:这个参数指定了实例并行执行进程的最小数量。其值就是实例启动时Oracle建立的并行执行进行数。
PARLLEL_THREADS_PER_CPU:这个参数指定了实例默认的并行度和并行自适应以及负载平很算法。它指明了并行执行过程当中一个CPU能处理的进程或线程数。
PARTITION_VIEW_ENABLED:这个参数指定了优化器是否使用分区视图。oracle推荐用户使用分区表(这个在oracle8以后引入的)而不是分区视图。分区视图只是为了提供oracle的后向兼容性。
REVOVERY_PARALLELISM:这个参数指定了恢复数据库系统时使用的进程数。
四、oracle的并行执行特性
RDBMS的绝大多数操做均可以分为如下3类:
被CPU限制的操做:这类操做的速度和单CPU运行的速度同样。经过并行化操做,多个CPU可并行处理系统负载,由于能够更快完成该操做。
被I/O限制的操做:这类操做花了绝大部分时间等待系统完成I/O操做。当系统中同时出现多个I/O请求时,绝大多数RAID控制器将很好工做。另外,当一个线程须要等待完成I/O操做时,可充分利用CPU来处理另外一个线程的CPU部分。
被竞争限制的操做:并行处理不能改善由资源竞争所限制的操做。
五、应当首先根据以下一些因素考虑并行度:
计算机的CPU能力:CPU的数量和能力将影响系统能运行的查询进程数量。
系统处理大量进程的能力:一些操做系统能处理不少并发线程,而另外一些操做系统则没有这方面的能力。
系统负载:若是系统如今的运行已经达到了极限,那么对并行度的调整不会有太大的效果。若是系统运行已达其能力极限的90%,那么大多的查询进程将使系统不堪重负。
系统处理的查询数量:若是系统的大部分操做是更新操做,但仍有少许的重要查询存在,那么开发人员可能但愿系统运行多个查询进程。
系统的I/O能力:若是磁盘上的数据是分片或是使用磁盘阵列存储的,那么系统可以处理多个并行查询。
操做类型:系统是否须要处理不少的全表扫描或排序:并行查询服务器很是有助于这类操做。
六、关于并行度的一些建议:
诸如排序之类的须要大量CPU资源的操做应当使用较低的并行度。其缘由是这类受限于CPU的操做已经充分利用的CPU,而不须要等待系统的I/O操做。
诸如全表扫描之类的须要大量磁盘I/O的操做应当采用较高的并行度。须要等待磁盘I/O的操做越多,系统就越能受益于并行操做。
若是系统中有大量的并发进程,那么应当采用较低的并行度。由于太多的进程将使系统不堪重负。
七、Oracle同时读取多块数据
当系统执行表扫描时,oracle具有同时读取多个数据块的能力,这种能力提升了系统的I/O速度。经过同时读取多块数据,oracle可以从磁盘上读取更大的数据块,从而避免了对磁盘上数据进行搜索的操做。经过下降磁盘搜索和读取更大的数据块,能够下降系统的I/O开销和CPU开销。
八、oracle 的分区
分区方案:
Range Partitioning:这种方案根据数据的范围,好比月、年等对表中的数据进行分区。
List Partitioning:这种方案和Range Partitioning分区方案很相似,但这种方案是按照数据的值而不是数据的范围来进行分区划分的。
Hash Partitioning:这种分区方案使用散列函数来实现对数据的自动分区。
Sub-Partitioning:这种方法就是开发人员熟悉的复合分区方法。这种方法容许开发人员同时使用多种分区方案。
分区有如下几方面的好处:
对能被分区的大尺寸表进行扫描时,分区可下降I/O操做和CPU的使用率。
可在分区的层次上而不是表的层次上加载数据。
能以删除分区的方式删除数据,而没必要使用select语句来删除大量数据。
对用户和应用程序而言,分区是彻底透明的。
可在分区层次上而不是在表层次上维护数据。
九、oracle的多线程服务器
用户能够经过专用服务器进程链接到oracle实例,也能够经过多线程服务器进程链接到oracle实例。由于每个专用的服务器进程都将占用大量的内存资源和系统资源,因此有必要对多用户链接采用多线程服务器进程。
多线程服务器进程容许多个用户使用必定数量的共享服务器进程。共享服务器进程使用共享缓冲池对用户请求进行排队并返回数据,从而大大减小CPU和内存的使用。
十、oracle故障诊断
数据库故障诊断经过得到系统sql语句执行性能数据,例如每一条sql语句在oracle数据库中执行的平均时间,来识别问题发生位置。
为了分析故障位置,将故障诊断数据(oracle Diagnostics)与交易执行响应时间(Transaction Response Time)数据关联起来。例如:某交易“enter”的平均响应时间高,使用故障诊断(Oracle diagnostics),就能够查找到是什么缘由致使了这个问题。