存档
本文记录的是本人近期阅读的Method R相关文章的一个汇总总结。
top关于Method R
Method R最早由Cary Millsap以及Jeff Holt在他们2003年出版的书《Optimizing Oracle Performance》中提出,这种方法提出之初是“To create a performance optimization method that works and that can be taught effectively to the typical Oracle database administrator. (OOP序言)”,就是说这方法是为Oracle性能优化而建,但在从最近Cary Millsap的访谈和他的最新文章Thinking Clearly about Performance中可以看到他已经将Method R的应用从Oracle数据库扩展到了电脑软件甚至是一切流程的优化上,当然他的公司Method R Corporation也是为此而建的。
topThinking Clearly About Performance
Thinking Clearly about Performance可以认为是《Optimizing Oracle Performance》中关于Method R的一个简化版,如果没有看过OOP的话,仔细的阅读这篇文章也能对Method R有深刻的理解。
文章的大概总结:
- 什么是性能:性能就是完成一个指定任务的时间,性能就是时间
- 性能的衡量与描述: 响应时间和吞吐率,这两个是相关的,但却不似线性相关
- 分析性能问题:序列图能直观的表现一个任务的响应时间,但是却仅限于简单的任务。Profile才是分析响应时间的好工具。
- 解决性能问题:阿姆达尔定律、风险管理、效率这几个都是在考虑解决性能问题方案时候必须要注意的问题。
- 负载的衡量:负载可以说的系统资源的利用率,由排队论知道负载对于响应时间有着巨大的影响。排队延时和资源拐点论是在进行容量规划时必须考虑的问题,容量规划最重要的一点就是保证系统在运营高峰期时的资源消耗不会越过拐点。
- 竞争延时:并行处理的系统中除了排队延时之外还有个影响很大的就是竞争延时,M/M/m理论中的多个通道是相互独立的,而实际系统中却不是这样,并行的进行总会在一些公共资源上发生竞争,而且最严重的就是这种竞争根本无可预测性,因为其中会有人为的因素在里边。
- 性能的测试和测量:测试需要根据实际系统的情况来进行,要求高的测试多,要求低的测试少。性能测量是要注意必须要测量那些应该测量的,而不是只捡简单事情做,代理测量是很多错误判断的来源。
- 性能应该作为软件的特性:考虑性能问题不能在软件成型之后,而是在软件设计之初就要考虑到的,在代码编写的过程中就将插桩代码作为软件的一部分,这样系统成型之后就能很方便的查找性能问题。将性能测量代码写入软件中最终能使你的系统永远的都能以最快的速度跑起来,而不至于因为性能不好而抓瞎。
作者:马齿苋 | 链接:http://www.dbabeta.com/2010/readings-on-method-r.html
topdd命令
dd其实是工作于比较低层的一个数据拷贝和转换的*nix平台的工具,但是因为dd命令支持*nix平台的一些特殊设备,因此我们可以利用dd命令的这个特性来简单的测试磁盘的性能。
先说一下两个相关的特殊设备
- /dev/null
- 空设备,通常用作输出设备,这个是*nix系统上面的黑洞,所有送到这个空设备上的内容都会凭空消失。
- /dev/zero
- 空字符,通常用作输入,从/dev/zero中读取时,它能源源不断的提供空字符(ASCII NUL, 0×00)出来,要多少有多少。
于是就有了下面的用法:
- 测试磁盘的写入
这个命令时往磁盘的文件/tmp/foo中写入一个4G大小的文件,当然文件的内容全部是空字符了,同时用/usr/bin/time来对命令的执行进行计时,命令中的bs指的是写入文件时的块大小,其实就相当于Oracle中的block大小了,count是写入的块数。采取这种方法来写入数据时只是测试的连续读磁盘的性能,而不是随机读的性能,不能采取这种方法检查一个机器的IOPS的,只能检查磁盘的吞吐率。
阅读全文…
作者:马齿苋 | 链接:http://www.dbabeta.com/2009/io-performence-03_check-performence-in-linux.html
从上一篇文章的计算中我们可以看到一个15k转速的磁盘在随机读写访问的情况下IOPS竟然只有140左右,但在实际应用中我们却能看到很多标有5000IOPS甚至更高的存储系统,有这么大IOPS的存储系统怎么来的呢?这就要归结于各种存储技术的使用了,在这些存储技术中使用最广的就是高速缓存(Cache)和磁盘冗余阵列(RAID)了,本文就将探讨缓存和磁盘阵列提高存储IO性能的方法。
top高速缓存(Cache)
在当下的各种存储产品中,按照速度从快到慢应该就是内存>闪存>磁盘>磁带了,然而速度越快也就意味着价格越高,闪存虽然说是发展势头很好,但目前来说却还是因为价格问题无法普及,因此现在还是一个磁盘作霸王的时代。与CPU和内存速度相比,磁盘的速度无疑是计算机系统中最大的瓶颈了,所以在必须使用磁盘而又想提高性能的情况下,人们想出了在磁盘中嵌入一块高速的内存用来保存经常访问的数据从而提高读写效率的方法来折中的解决,这块嵌入的内存就被称为高速缓存。
说到缓存,这东西应用现在已经是无处不在,从处于上层的应用,到操作系统层,再到磁盘控制器,还有CPU内部,单个磁盘的内部也都存在缓存,所有这些缓存存在的目的都是相同的,就是提高系统执行的效率。当然在这里我们只关心跟IO性能相关的缓存,与IO性能直接相关的几个缓存分别是文件系统缓存(File System Cache)、磁盘控制器缓存(Disk Controller Cache)和磁盘缓存(Disk Cache,也称为Disk Buffer),不过当在计算一个磁盘系统性能的时候文件系统缓存也是不会考虑在内的,因此我们重点考察的就是磁盘控制器缓存和磁盘缓存。
不管是控制器缓存还是磁盘缓存,他们所起的作用主要是分为三部分:缓存数据、预读(Read-ahead)和回写(Write-back)。
作者:马齿苋 | 链接:http://www.dbabeta.com/2009/io-performence-02_cache-and-raid.html
top前言
作为一个数据库管理员,关注系统的性能是日常最重要的工作之一,而在所关注的各方面的性能只能IO性能却是最令人头痛的一块,面对着各种生涩的参数和令人眼花缭乱的新奇的术语,再加上存储厂商的忽悠,总是让我们有种云里雾里的感觉。本系列文章试图从基本概念开始对磁盘存储相关的各种概念进行综合归纳,让大家能够对IO性能相关的基本概念,IO性能的监控和调整有个比较全面的了解。
在这一部分里我们先舍弃各种结构复杂的存储系统,直接研究一个单独的磁盘的性能问题,藉此了解各个衡量IO系统系能的各个指标以及之间的关系。
top几个基本的概念
在研究磁盘性能之前我们必须先了解磁盘的结构,以及工作原理。不过在这里就不再重复说明了,关系硬盘结构和工作原理的信息可以参考维基百科上面的相关词条——Hard disk drive(英文)和硬盘驱动器(中文)。
- 读写IO(Read/Write IO)操作
- 磁盘是用来给我们存取数据用的,因此当说到IO操作的时候,就会存在两种相对应的操作,存数据时候对应的是写IO操作,取数据的时候对应的是是读IO操作。
- 单个IO操作
- 当控制磁盘的控制器接到操作系统的读IO操作指令的时候,控制器就会给磁盘发出一个读数据的指令,并同时将要读取的数据块的地址传递给磁盘,然后磁盘会将读取到的数据传给控制器,并由控制器返回给操作系统,完成一个写IO的操作;同样的,一个写IO的操作也类似,控制器接到写的IO操作的指令和要写入的数据,并将其传递给磁盘,磁盘在数据写入完成之后将操作结果传递回控制器,再由控制器返回给操作系统,完成一个写IO的操作。单个IO操作指的就是完成一个写IO或者是读IO的操作。
- 随机访问(Random Access)与连续访问(Sequential Access)
- 随机访问指的是本次IO所给出的扇区地址和上次IO给出扇区地址相差比较大,这样的话磁头在两次IO操作之间需要作比较大的移动动作才能重新开始读/写数据。相反的,如果当次IO给出的扇区地址与上次IO结束的扇区地址一致或者是接近的话,那磁头就能很快的开始这次IO操作,这样的多个IO操作称为连续访问。因此尽管相邻的两次IO操作在同一时刻发出,但如果它们的请求的扇区地址相差很大的话也只能称为随机访问,而非连续访问。
- 顺序IO模式(Queue Mode)/并发IO模式(Burst Mode)
- 磁盘控制器可能会一次对磁盘组发出一连串的IO命令,如果磁盘组一次只能执行一个IO命令时称为顺序IO;当磁盘组能同时执行多个IO命令时,称为并发IO。并发IO只能发生在由多个磁盘组成的磁盘组上,单块磁盘只能一次处理一个IO命令。
作者:马齿苋 | 链接:http://www.dbabeta.com/2009/io-performence-01_several-concepts.html
近期评论