技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> MySQL --> 读高性能Mysql-操作系统和硬件优化

读高性能Mysql-操作系统和硬件优化

浏览:5490次  出处信息

    这三天看了高性能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:线程库的优良支持.

建议继续学习:

  1. 在线测试不同操作系统不同浏览器网页的显示效果    (阅读:4701)
  2. Windows、RedHat、CentOS和Ubuntu操作系统生命周期    (阅读:3198)
  3. 操作系统-进程管理    (阅读:2333)
  4. 设计者更喜欢什么操作系统    (阅读:1980)
  5. 操作系统基础知识    (阅读:1904)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1