Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1399112
  • 博文数量: 277
  • 博客积分: 2551
  • 博客等级: 少校
  • 技术积分: 3918
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-21 22:46
文章分类

全部博文(277)

文章存档

2017年(3)

2016年(9)

2015年(65)

2014年(27)

2013年(85)

2012年(61)

2011年(27)

分类: 数据库开发技术

2011-08-07 20:39:19

  越来越多的企业都转向选择linux作为其DB Server的平台。
  对于商用DB的实现方式:进程、线程、混合机制。从这个角度看linux进程管理。
   企业DB服务器可能拥有数千个并发访问DB的用户,某些用户可能执行只需少量处理的简单事务,而其他用户可能涉及更多系统资源的复杂事务。DB性能通常都是基于诸如每小时事务数 或 X个并发连接的最小响应时间等度量来讨论。这些性能约束由企业施加,以便确保客户的质量保证等级,由于高并发的处理需求,企业DB服务器需要运行于大型SMP服务器上。
  早期的linux内核并不很合适充当高并发的DB Server,即没有随cpu数量的增加而提供良好的扩展性。迁移至多处理器平台时,需要许多的全局内核锁的支持,否则会导致串行化问题。其中最大的锁就是保护单个没有排序的运行队列的spin lock。在单cpu环境中,一个队列足以调度所有的可运行的任务,然而在SMP环境中,这个问题就会成为瓶颈。随着cpu的数量的增加,这个运行队列的竞争问题就更加突出了,并且,这个队列没有排序,当锁被持有时,调度器还要去计算这个任务的良好度(nice值),增加了锁的持有时间,间接的加剧了锁的竞争条件。
   在linux 2.5的内核中,每个cpu都维护一个可运行的队列,并且排好序了。
  
   管理企业大型DB Server需要用SMP服务器,这种Server配置了海量内存,系统的大部分内存分配给了DB缓冲区,它主要缓存磁盘读至内存的表和索引数据页,适当地调优DB会占用大量内存,而为其他正在运行的应用和OS只保留够用的内存。
   linux如何管理内存对于DB Server的性能也很重要,如IA-32体系中,内核基于4k页面管理内存,小页面将数据的换入和换出时会产生更小的开销,并确保使用的虚存驻留于物理内存中。
   大部分DB Server对于其DB Buffer都用大型共享内存段,其结果是需要很多PTE来维护开销,linux 2.6中提供了对更大页面的支持,进程可以从内存池中显示请求大内存,减少了PTE数,大页面的另一个好处就是增加了TLB的覆盖范围,降低了TLB的不命中率,与页表访问相比,TLB更快(TLB是CPU内的)。
 
  DB Server严重依赖高效快速的IO操作,由于有可能处理TB量级的数据,任何IO瓶颈都会导致DB Server很难满足商业需求,DBA通常花费大量的时间和金钱对IO子系统进行优化,以便减少IO延迟并最大化IO吞吐率。
  linux I/O管理通过提供原始IO、向量 IO、异步IO、直接IO等特性和消除回弹缓冲的问题,极大的改善了linux作为DB Server的性能。
阅读(1383) | 评论(0) | 转发(0) |
0

上一篇:概述

下一篇:IP包进入主机后的处理过程

给主人留下些什么吧!~~