读高性能Mysql-操作系统和硬件优化
这三天看了高性能Mysql这本书的第七章-操作系统和硬件优化.
至于为什么看这章节,主要是因为最近一直在看操作系统原理这本书,是想通过了解具体的软件设计(比如Mysql)来进行思路的整理.
这章节不仅仅是优化,本身Mysql的设计也是借鉴了很多操作系统原理的知识,可以说假如了解了Mysql,那么学习其他的就可能融会贯通.
其实以前也看过这章节,但是到目前为止,基本上全忘了,所以说这有二方面原因:
1:不要假学习.
2:基础理论知识理解深刻了,才能更好的学习其他的,这也不是一个实践就能解决的问题.
其实任何系统最终的瓶颈可能都是I/O(包括网络I/O),内存,Cpu.所以我们考虑问题的时候应该更有序.因为任何的问题最终都反映在这三个问题上面.
我们很难发现系统瓶颈的原因在于各个子系统之间都相互有关系,一个系统的问题会导致另外个子系统的瓶颈,这也是架构存在的理由(分层解决问题).一般来说Mysql基本上都是I/O瓶颈,因为内存总是会不够的.
回想下我们做Msn Space项目的时候,申请数据库资源的时候从没考虑我们的业务特性是什么,是Cpu密集型的还是I/O密集型的.另外不能单纯检查Cpu的负载,一定要平衡Cpu利用率和I/O负载.
选择快的Cpu还是多的Cpu,文章如此解释:
低延迟:这是针对个体而言的,比如我们链接某个网站,对我们个体来说当然是越快越好.
高吞吐量:针对系统来说,吞吐量越高,说明做的事情越多.
一般来说,总有系统瓶颈点,一旦到了临界值,达到特定的吞吐量必然导致延迟过高.
目前的Mysql架构导致的问题:
1:不能充分利用多Cpu,因为对于单个请求不能并发运行多个查询
2:复制由于是单进程的,所以利用不上其他Cpu.所以有的时候从服务器反而会遇到瓶颈
3:考虑到Mysql最大的问题是锁(需要继续学习),所以更快的Cpu更好,因为这时候有多个Cpu也没用
对于CPU架构来说,不管是系统还是应用程序尽量都是64位的.都是为了更好的使用内存.
对于本章说的多Cpu和核心来说:
虽然多个Cpu不能并行运行单个查询,但是对于数据库这样的业务来说,多个Cpu能处理不同的链接,所以多Cpu还是好的
对于并发问题有二种:
1:逻辑并发问题:应用程序对资源的竞争.可以通过调配存储引擎或者不同的事务隔离级别
2:内部并发问题: 对信号量,页面访问的竞争,这其实属于系统层面或者软件层面的问题
系统的瓶颈只有经过评测才能真正知道,未来Cpu的发展是在多核而非Cpu的速度.
对于资源的金字塔模型以及局部性问题,很多计算机原理中都说了.基本上都是建议使用越底层的缓存.但是对于数据库业务来说却有区别:自己的内存管理比操作系统的缓存更有效,因为它了解应用.
接下来说说磁盘,包括计算机原理,操作系统都描述过,而对于互联网应用来说基本都是讨论随机I/O和顺序I/O.
几个基本的观点:
1:顺序I/O比随机I/O快,并且顺序I/O不建议使用系统文件缓存(比如数据库业务).
但是对于视频这样的业务,大部分都是大文件的顺序访问,用系统本身的缓存比较合适.
2:存储引擎对于不同磁盘访问的读取,需要理解下BTREE
3:内存对于写入操作的优化
(1)多次内存写,一次合并Sync磁盘
(2)I/O合并操作
预写的作用就是I/O操作顺序化和异步化
本章节解释working set的例子非常形象,原则上工作集尽量保持和内存匹配.
InnodDB的工作集包括索引和数据,其本身的设计是将更多可能有关联的数据存储在一个缓存单元中,所以优秀的聚集索引设计很重要.缓存单元是基于页的.
内存磁盘比的使用要合适,主要有二点:
1:不要为了追求极致的Cpu利用率而浪费其它资源.
2:需要考虑系统中最脆弱的部分.
假如一个I/O密集型操作,应该如何选择硬盘呢.
1:寻道时间和访问时间:一般就是转速大小.
2:吞吐量:一般指传输速度
容量一般不是大问题.对于传输速度来说,目前单个硬盘都能达到50MB/S,总线反而更重要.尽量选择小盘.
对于RAID和SAN,NAS了解不够.
对于网络配置的优化好像不多:DNS问题.
数据库应用应该很少是带宽问题更多是延迟问题.比如丢包.
交换机的检查,包括各个中间设备的使用,就是减少跨区域数据操作.TCP链接数和缓存区.
选择操作系统:看了以后没啥感觉.避免64位硬件而不是64位操作系统.
对于文件系统来说,其实从磁盘驱动器本身的性能问题,包括自身的缓存区域,已经总线,操作系统对于磁盘读取的优化(比如系统调用read).最后应该是应用级别的文件读取优化(操作系统).对于文件系统了解不够.
最后二个核心问题
1:Mysql应该禁止系统交换,因为Mysql是自己管理内存和硬盘访问的,所以假如使用操作系统的交换可能会存在很多问题.
2:线程库的优良支持.
建议继续学习:
- 在线测试不同操作系统不同浏览器网页的显示效果 (阅读:4692)
- Windows、RedHat、CentOS和Ubuntu操作系统生命周期 (阅读:3080)
- 操作系统-进程管理 (阅读:2249)
- 设计者更喜欢什么操作系统 (阅读:1913)
- 操作系统基础知识 (阅读:1783)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:ywdblog 来源: 技术 总结 记录 生活 工作
- 标签: 操作系统 硬件优化
- 发布时间:2011-05-17 08:54:48
- [55] IOS安全–浅谈关于IOS加固的几种方法
- [53] 如何拿下简短的域名
- [52] 图书馆的世界纪录
- [52] android 开发入门
- [50] Go Reflect 性能
- [50] Oracle MTS模式下 进程地址与会话信
- [48] 【社会化设计】自我(self)部分――欢迎区
- [47] 读书笔记-壹百度:百度十年千倍的29条法则
- [36] 程序员技术练级攻略
- [29] 视觉调整-设计师 vs. 逻辑