《PostgreSQL 9.0性能调校》一一2.1 平衡硬件支出

2.1 平衡硬件支出

在生产环境中使用诸如PostgreSQL等开源数据库的一个原因是,用户本要花在软件授权上的每一分钱,都可以用在更好的硬件上。在用户的预算当中需要权衡的有三个主要部件:CPU、内存和包含相关磁盘控制器及重要部件的磁盘。

2.1.1 CPU

目前,在售的每个CPU内部都集成有至少两个、甚至多达八个核心,核心的数量能反映出大多数的数据库应用程序的一些优势。在决定使用哪一种CPU解决方案能够满足用户的数据库应用需求时,需要考虑两个基本的问题。

1.选哪一种处理器系列?

目前,Intel和AMD都推出了各种类型的64位产品线可供选择,当然也有一些其他市场占有率不太高的产品可供选择(Itanium、SPARC等)。

2.需要更多的核心还是更快的核心?

这些选择在某些时候会比用户所想象得要复杂。目前,Intel在处理器与系统的RAM之间的传输速度更快,因此在单个处理器核心的速度上处于领先地位,但处理器和相关的部件也更加昂贵。AMD作为其竞争对手,提供更廉价的处理器核心,它们的服务器处理器设计能够使每个核心最大程度地利用内存。如果用户要选择更廉价的核心,那么AMD在这方面更适合。当用户要将两个以上的物理CPU安装在同一台服务器中时,AMD在多插槽配置当中也有可用的最快的处理器的辉煌历史。

要指出用户的数据库应用类型更适合于哪种CPU方案(多核还是更快的核心),最好方法是使用类似top的工具监控目前现有服务器。如果每一个CPU所运行的进程数量不多,那么对于这种类型的工作负荷则使用速度更快的核心会更好。这种情况经常在以批处理的方式运行大量查询的情况下发生,例如,在大批量的数据需要进行排序形成报表时。但是相反地,如果所有的CPU都与并发进程处于活动状态,那么用户需要的可能是更多核心的CPU。这些情况在具有大量用户的应用程序中,例如,数据库支持的Web应用程序等很常见。

如果用户没有从对运行中的系统监控中得到好处,那么可以尝试通过记录数据库的局限性来推断用户处于的状况。PostgreSQL不允许将一个查询分配到多个核心,而在其他数据库中,称其为并行查询并予以支持。也就是说,用户要求在执行任意一个查询或较少数量的查询尽可能得快,那唯一的办法就是将其按照次序分配给最快的核心。

另外一种情况是,在用户需要优先装载或导出数据的时候,使用更快的核心是更好的方法。COPY是PostgreSQL最好的数据导入方法,该方法很容易(但不经常)受到CPU性能的限制,这可能会成为操作的瓶颈。虽然它可以将输入文件分割成若干个小片段,并使用并行的方法去装载这些文件,但是必须自行去创建或者获得,而不是那些服务器所了解的能够为用户自动创建的内容。使用pg_dump工具导出一个数据库的副本在某些系统上是另外一个可以受限于CPU的例子。

2.1.2 内存

给应用优先配置多少内存,实际上由工作中需要处理的最常见操作的数据集大小决定。一般的,加大内存能够显著提高性能。在以下情况下,可以不用这个方法来提供更好的服务。

如果用户的数据集大小恰好能容纳于这种较小数量的RAM的时候,那么增加更多的内存并不能提升性能。用户可能需要使用更快的处理器。
当在一些数据仓库的环境下,所运行的程序扫描的表大小大于用户可以给其分配的内存大小时,用户需要更快的硬盘而不是增加更多的内存。
常见的情况下更多内存有助于经常访问那些能够容纳较大数量的数据,而不是较小的那些。这种情况的发生比用户所预想的更为频繁,这是因为需要存储数据库B-树索引,即在内存当中无法适应整个表或甚至仅仅是索引的话,那么尽可能存储更多的一部分索引就意味着基于索引的数据查找会很显著地加速。将位于树结果顶端的那些最常使用的数据块进行缓存也会有助于在不能将所有叶子节点放入内存的情况下的处理。

一旦用户有程序在运行,PostgreSQL缓冲区高速缓存当中用户通常可以有更多有关内存是如何使用的信息(在操作系统中也可以查看),并且可以看到哪些数据能保存。本书中关于使用pg_buffercache的章节将会讲述如何监控这种数据。

2.1.3 磁盘

虽然在数据库服务器中用户经常遇见的是CPU成为该系统瓶颈的情况,但是绝对可能会碰到磁盘成为系统瓶颈的时候,特别是在系统中只有一块或两块硬盘的情况下比较明显。几年前,在硬盘上有两个基本的选择,一个是较为便宜的通常在桌面环境使用的ATA(也就是IDE)驱动器,另一个是在服务器上使用的SCSI驱动器。

这两个技术目前已经得到发展,在配置数据库服务器时,目前选择倾向于使用串行ATA(SATA)或者串行连接SCSI(SAS)。在两种接口之下,可能会发现其所使用的几乎是相同的驱动器,甚至磁盘控制器可以附加任意一种磁盘。结合这两个之间的微小性能差距,在它们之间做选择比之前更难。

每种技术当中参数都被进行了简单的比较,当下的一些详细信息如下所示。

SAS磁盘:
更高的每分钟最大转速RPM:10000或15000。
73GB到1TB是较为常见的容量。
更高的每MB成本。
SATA磁盘:
较低的磁盘每分钟最大转速:标准为7200转,在Western Digital VelociRaptor磁盘产品设计为每分钟10000转。
更高的容量:最大2TB。
较低的每MB成本。
一般情况下,用户会发现在相似规格的情况下,单个SAS硬盘的速度会比SATA硬盘要快。特别是由于SAS磁盘更快的机械性能,其随机I/O上的寻道性能会更好,有时磁盘的传输速率也更快。此外,由于SAS驱动器已支持类似更长的命令队列等高级特性,因此更有可能的是操作系统将有匹配支持去充分利用这些特性。

1.RAID
廉价冗余磁盘阵列(RAID,Redundant Array of Inexpensive Disk)方法是解决单个磁盘驱动器在处理性能和可靠性上的局限性问题上的标准方法。一个RAID阵列会将多块磁盘纳入一组磁盘集当中将其视作一个单独的磁盘,这些磁盘通常具有相同的配置。其所产生的效果要么性能提高,要么可靠性提高,或者两者都有提高。在某些情况下,写入阵列的奇偶校验(parity)信息计算能够带来额外的可靠性。奇偶校验是数据校验的一种方式,它能够在信息丢失的情况下进行重组。从空间的角度来看,使用奇偶校验的RAID级别在驱动器故障存在的前提下写入数据方面是有效的,但是奇偶校验计算开销将会显著影响数据库应用程序。

较为常见的RAID阵列的基本形式包括如下的几种类型。

RAID 0:也称为条带化(Striping),即同时使用多块硬盘,并行地将数据分散到每个硬盘中进行读写。其性能几乎能够得到线性的提升(两块硬盘读取的速度是单块硬盘的两倍),但磁盘组中任意一块硬盘出现故障则会丢失所有数据。
RAID 1:也称为镜像(Mirroring)。相同的数据具有多个副本存储在多块硬盘当中。这样有时候可以提高性能——横跨两块硬盘的良好RAID 1镜像,在处理两个读取操作时可能会通过向每个磁盘发送一个读取操作来完成。并行读取两块硬盘时,每秒的效率可以增加一倍,但通常情况下,使用RAID 1的原因通常是为了进行冗余:即如果其中一块硬盘失效,那么系统会使用其他的磁盘来继续相应操作。
RAID 10或RAID 1+0:首先使用成对的磁盘,然后使用RAID 1进行镜像。随后使用RAID 0对结果集进行分组。这样既能提供较高的性能,并且还可以允许其中的任意一块硬盘失效,不像RAID5/6那样需要用很多方法来保证在最糟糕以及平常情况下的速度。RAID 10特别适合在那些写操作比较繁重的环境下,此时RAID5/6的奇偶校验计算会降低磁盘性能。因此,在高性能数据库系统中,这是会优先采用的RAID级别。
RAID5:也称为带奇偶校验的条带化(Striped with Parity)。这是介于RAID 0和RAID 1之间的一种折衷方法。数据类似RAID 0分片存储在磁盘中,可以提高读取性能。但冗余数据存储在校验盘中。如果阵列的其中一块磁盘失效,丢失的数据可以使用其他磁盘的校验信息计算得出。能够用较小的空间浪费来解决硬盘失效的问题,在RAID 5当中的写入操作的性能还是可以承受的。
RAID 6:RAID 6与RAID 5类似,除了更多的校验信息外,允许两块硬盘失效。这是它的优点,同时也是缺点所在。RAID 6是目前处理在RAID 5阵列中,一块硬盘失效后可以提供更长的时间进行数据修复的普遍方法,具有较大容量。在此期间,阵列没有额外的容错机制,同时当花费几个小时的激烈磁盘活动进行重建时也无暇顾及在重建数据完成之前第二个驱动器的故障。同一批次制造的磁盘很可能会发生令人惊讶的整组失效。
为了公平公正地去比较磁盘的性能,需要考虑大多数系统都将会有个来自多个磁盘(如RAID阵列)的裸性能(net performance)。由于SATA磁盘相对便宜一些,因此同样预算情况下所采购到的SATA磁盘会比SAS多一些。如果确信应用程序在负载分散于更多磁盘之上会得到更快的响应速度,那么单位成本内购买的更多东西必将会导致系统整体速度的加快。需要注意的是,这里的上限通常是服务器的物理硬件所决定的。因此在环境当中只有这么多的存储机架或者控制器端口可用的情况下,扩大机箱可能会花费更多的成本。在那些更小数量、更为快速的驱动器的情况下很容易发现使用SAS是一种更好的方法。这也就是为什么如下的做法很重要:不断对硬件及数据库进行基准评测,以得到在磁盘数量增加情况下的改进状况。

2.驱动器错误处理
购买廉价的SATA硬盘,并从它们那得到比较好的性能,也不一定意味着用户会将其使用在数据库服务器中。因为不论用户的系统运行速度多快,硬盘驱动器一旦发生故障后服务器会都不可用。

确保硬盘驱动器操作可靠性的第一步是能够准确地报告磁盘所面对的错误情况。这可以通过两种机制进行错误报告:在读和写操作期间所报告的错误代码,以及使用SMART协议来报告磁盘状态。SMART提供磁盘的各类信息,例如温度和其他自测结果。

当发现错误数据的时候,消费级的SATA驱动器配置成积极的自动重试并尝试去修复该错误。这样做是有一定道理的,因为通常围绕该数据的只有一个副本存在,而且是需要花费相当长的一段时间去重试,而不是去报告数据丢失。不过经常会发现在某个数据库环境的RAID配置中,用户可能不需要这样操作。如果这样,可能会引起超时,而在一般情况下RAID控制器很难进行处理。与其相反的是,用户会希望磁盘能够及时报告错误,这样才能使用一个或者多个磁盘备份替换。这种形式错误处理的变通通常是SATA驱动器标识为“enterprise”或“RAID edition”与常规形式驱动的主要区别。以某种形式标记的驱动器将会迅速报告错误,这在其他非RAID的版本当中则不会如此处理。购买企业版的SATA硬盘驱动器以获得可靠的服务器错误处理操作弥补了它们与SAS型号之间的价格差距。这也可能在驱动器固件当中被调整。可以从http://en.wikipedia.org/wiki/TLER查看关于此方面驱动器功能的更多详细信息。

一般来说,所有的SAS磁盘将有助于返回错误信息而不是尝试去自行修复,以使数据得以重建。下一节中关于Metwork Appliance可靠性研究的部分会对这一主题给出更多的额外信息,相关链接请参见:http://storagemojo.com/2007/02/26/netapp-weighs-in-on-disks/。

图标 

为数据库使用外部存储

因为USB和火线桥接芯片用于进行连接和相关联的驱动程序的限制,使用USB或者火线连接的外部设备很难报告其SMART和其他错误信息。它们也由于相似的原因不能处理写缓存的问题。用户在数据库中应该避免使用这些连接方法的外部磁盘。在这点上,使用新的外部SATA接口(eSATA)的外部存储技术要好一些,因为它们与直接连接到SATA设备的方式不同。
3.硬盘驱动器可靠性研究
一般来说,预期的可靠性也是要优先考虑的重要事情。在过去几年,共发布三个关于大规模磁盘驱动器的研究成果。

Google:大型磁盘驱动器群体的故障趋势(Failure Trends in a Large Disk Drive Population)。
http://research.google.com/archive/disk_failures.pdf

卡内基梅隆大学:现实世界的磁盘故障(Disk failures in the real world)。
http://www.cs.cmu.edu/~bianca/fast07.pdf

威斯康辛大学麦迪逊分校和Network Appliance公司:存储堆栈的数据损坏分析(An Analysis of Data Corruption in the Storage Stack)。
http://www.usenix.org/event/fast08/tech/full_papers/bairavasundaram/bairavasundaram.pdf (详细版本)或 http://www.usenix.org/publications/login/2008-06/openpdfs/ bairavasundaram.pdf(简短版本)。

在Google和卡内基梅隆的研究成果中没有偏向于描述SCSI/SAS系列磁盘更为可靠。但威斯康辛大学麦迪逊分校和Network Appliance公司的研究则暗示“SATA磁盘相对于光纤通道磁盘具有更高数量级的校验和不匹配概率”。综合以上观点,在SAS下的错误处理要强于类似的SATA磁盘。因为它们都比较昂贵,不论其中哪一种提高错误处理的方法,要付出的费用都会根据用户的商业环境对可靠性的需求而变化。对用户正在运行的数据库,这种情况则不尽相同。具有单一主数据库和多个从数据库的系统显然会倾向于使用主数据库中表现更好的组件。

用户会发现任意一种连接类型都有可靠和不可靠的的磁盘驱动器。最佳的做法是只部署在市场上发售的时间够长,并且实际客户对其故障率满意的磁盘驱动器。使用更新技术的新型驱动器通常会比经过实践证明的稍微旧的产品要容易失效,因此用户找不到任何可靠的调查结果,这就成了需要进行质疑的原因。

4.驱动器固件与RAID
在一些磁盘阵列配置当中,所有的磁盘需要有相同版本的固件,以保证其可靠性。SATA磁盘面向用户定期进行驱动器固件的大幅更新,有时产品型号并不变更。在一些情况下,一旦用户更新了驱动器固件,那么很可能不能恢复到早期的版本,而新更换的驱动器可能不能运行较老的固件。即使相同型号的硬盘还在市面上销售,用户也不能通过更换损坏的硬盘来解决问题。

如果用户购买的是SAS驱动器,或者是面向企业的SATA驱动器的RAID,这些驱动器具有较为稳定的固件版本。这也是制约其最大存储容量落后于用户需求的原因之一。一旦用户在市场上购买了最新最大容量的驱动器后,就会知道新的驱动器技术的不可靠是多么危险。但公平地说,市场上出现的新技术都是经过了彻底检验的。面向商业的版本例如SAS版本,硬件和与其相关的固件稳定,价格也更贵。对于厂商来说,在新型驱动器版本发布时保持固件的修订版本的稳定相对容易一些,因为用户所使用的beta版本已经修正了很多可能的缺陷。

5.SSD
目前市场上出现的最新的驱动器技术是固态硬盘(SSD),也称为闪存磁盘。它们不需要任何移动部件就可以提供对数据的永久性存储。其性能可以大大超过需要移动部件的磁盘,特别是对磁盘寻址有要求的应用程序——通常是数据库并且要更高可靠性的情况。

目前有三个主要因素制约数据库对SSD技术的使用。

其最大容量较小,数据库的大小通常较大。
单位容量成本较高。
大多数SSD产品没有对写缓存做更好的设计。
鉴于 SSD 的擦除机制,用户必须要为那些将会持续很长时间的操作配备写入缓存(通常几个KB大小的,匹配闪存单元块大小)。写入操作将会被缓存,直到整个数据块处于排队状态,然后会在写入新数据时擦除闪存。

虽然容量比较小,但这些对于回写高速缓存,以及针对数据库使用的所有潜在数据损坏问题的设计仍然是有效的(具体详细信息将会在本章随后内容当中进行讨论)。某些SSD当中包含一个电容或者是类似电池后备机制来处理这些问题,这些问题很少会出现但仍然会实际存在。

直到SSD制造商能够获得更好的描述什么样条件下设备当中的写缓存会被丢失之前,该技术对于数据库使用来说仍然是一种未知的风险,并应该谨慎对待。数据丢失的窗口期以及由此所造成的数据库损坏的可能性都很小,但是往往都会存在。通常也不能通过使用具有其自身电源后备支持的控制器卡来解决此问题。在许多情况下,当前的这一代存储卡根本谈不上是SSD。即使它们能够如此,SSD可能也不会接受并且使用与正常驱动器所使用的同样的命令来禁用其写入高速缓存。这是因为一个正常运行的写入高速缓存对于驱动器长久使用方面是非常重要的。

2.1.4 磁盘控制器

这是PostgreSQL性能最重要的一个方面也是最容易受忽视的方面。现在很多硬件都不那么重视磁盘控制器。

提高CPU速度和改进直接内存访问(DMA,Direct Memory Access)方法使得将磁盘操作分担在一个控制器板卡上显得不再那么重要。与用户主要的系统处理器相比,控制器在前述诸如RAID奇偶校验计算等耗费成本的工作任务处理速度上很难胜于前者。
诸如Linux软件RAID和ZFS之类的硬件RAID技术,目前的操作系统文件系统技术通常都是系统专有的存储,这看起来似乎不甚理想。
虚拟机及云部署使得基础磁盘硬件几乎完全与操作系统的所见界面脱离。
诸如SSD之类速度更快的驱动器看起来似乎是削弱了对中间智能控制器的需求。
因此不要被现状所迷惑。当涉及到向一个数据库中提交信息的时候,循环使用的磁盘介质(即使是诸如SSD之类的闪存介质)都有些任何软件所无法克服的限制。

1.硬件RAID和软件RAID
在部署一个RAID阵列时,用户需要用一些专用的硬件才能完成。现在,包括Windows和Linux等在内操作系统都包含有软件RAID工具,使用户可以不需要使用主板上的额外磁盘控制器来完成操作。

硬件RAID有几个好处。在一些软件RAID安装中,例如Linux环境下,用户需要小心系统在任意一种磁盘失效情况下,都有可能导致无法启动。硬件RAID卡的BIOS通常已经考虑到这种情况。当更换故障硬盘后,硬件RAID卡也可以自动进行重建。

磁盘失效后,如果它们开始将损坏的数据发送到主板,那么在处理过程中可以卸下整个系统。硬件RAID控制器倾向于测试这种方法,而主板的驱动器控制器则不一定。

除了成本过高以外,硬件RAID的缺点就是当控制器失效时,用户使用其他的控制器也不能访问到该驱动器。在这种情况下,SNIA所提供的RAID磁盘数据格式(DDF, Raid Disk Data Format)就是一种新兴的存储RAID元数据标准,但目前尚未获得控制卡厂商的良好支持。

在众多系统中,硬件RAID最大优点是其对可靠写缓存支持。有关这部分内容将会在本章后续内容详细描述。

2.一些推荐的磁盘控制器
市面上有很多种磁盘驱动器都不能很好地应用于数据库。下面列出几个众所周知的在PostgreSQL部署时能够较好运行的产品。

多年来,LSI的MegaRAID系列产品一直是可靠的,SCSI性能适中的,近年来也用作SAS/SATA控制器的硬件提供来源。它们使用较小的缓存,虽然其较老的产品不是最好的选择,但它们的技术相对更为成熟,用户所使用的驱动器也很稳定。目前,其SAS产品在数据库首选的RAID 10级别中表现良好。不过在RAID 5中的性能则不是很高。
DELL使用LSI的MegaRAID卡定制了自己的PowerEdge RAID控制器(PERC)。PERC6是根据之前描述的LSI SAS技术的基础进行设计,用于替换PERC H700和H800产品(H200没有写缓存)。PERC5及其早期的型号速度较慢,而且DELL定制的固件性能表现不如LSI原厂型号。这些情况在PERC6及后续型号中得到解决,在经过了正确配置的24块磁盘的阵列环境当中,可以很容易达到1GB/s的读取速度。
3ware是最早提供SATA RAID解决方案的厂商之一,特别是其提供的Linux驱动众所周知。3ware早期的产品性能不高,目前的9690SA如果配置正确,也能有很好的表现。3ware公司经过了几次变更,先是被AMCC收购,后者又被LSI收购。用户可以认定3ware是LSI的另一个产品线。
HP在Smart Array系列产品中推出了几款RAID卡,包括P400、P600和P800。这些卡最大的不同在于性能表现。P800的性能最高,P400和P600的性能表现则中规中矩。
Emulex和QLogic生产的高性能卡用于将光纤通道磁盘阵列附加至服务器之上。
Areca的知名度要低于上面列出的所有其他厂商,但其高性能SATA卡为其赢得了不少的用户,部分型号还支持SAS。Areca卡在经销商提供的部分“白盒”产品中起着重要的作用,而上面提到的大供应商并不愿意进行处理。另一个要注意的是Areca为用户提供了不同操作系统下的管理工具。被称为是“带外管理器(Out-of-Band Manager)”的包含内置的网络管理接口的一些较为高端的型号,很容易能够在网络中通过Web控制台访问阵列卡。
图标

Areca阵列卡的驱动深度依赖用户所使用的操作系统,因此用户需要仔细检查。例如,在Linux系统下,用户要针对系统内核做一些测试才能确保驱动正确,因为这个驱动并没有经过大量的内核测试。不过在2.6.22内核下,PostgreSQL负载较重的用户可以较好地使用这块卡。
通常情况下,上述列表当中目前售价最便宜的一块控制卡大约需要300美元。如果找到一块比该售价更为便宜的控制卡的话,那么它不大可能运行得很好。这些卡当中的大多数都被成为假RAID(Fake RAID)。这些卡实际上并不会包含一个专门的存储处理器,这是价格大幅度上升的影响因素之一。

与其他上述控制卡不同的是,假RAID卡是使用系统当中的CPU来处理这些任务。从性能的角度来看,这并不一定是什么坏事情,但是最好是直接使用一个简单的操作系统RAID(如Linux甚至是Windows所提供的)。假RAID往往是漏洞百出的,包含低质量的驱动程序以及不能被移植到另一种类型RAID控制器的担忧。同时,这些控制器也没有电池后备的高速缓存。在许多情况下,这是另外一个值得付出的重要组成部件。

假RAID卡的著名提供商包括Promise以及HighPoint。此外,用户会在大多数主板上找到对RAID的支持,如Intel的RAID,这也是属于假RAID的范畴。虽然Intel也提供了一些真正的RAID卡设备,同时也制造用于以上提到的那些控制卡的I/O处理器芯片。

即使有硬件RAID可以考虑使用,但也不可能会去直接推荐某一块具体的卡,因为在企业的采购预算里可能会减少对这些的选择。如果用户喜欢购买HP的产品,而实际上Areca的阵列卡可能更适合;那么用户最好要知道P800是一块很不错的卡,而E200因为太慢,连前面列出的列表里都没有它,这就足够了。同样地,用户如果与DELL有个大的采购合同,那最后可能惟一现实的选择是采用PERC6或者H700/800产品。有许多面向商业需求已经决定了哪些硬件产品可以使用,因此,比上述所列的产品可选择面就更小。

3.附加存储——SAN和NAS
用户通过主板或功能卡将服务器直接连接硬盘,硬盘与机箱不分离,这样的方式成为直接附加存储(DAS,Direct-Attached Storage)。另一种方法是使用外部接口,通常是光纤通道或者以太网,使用存储区域网络(SAN,Storage Area Network)或者网络附加存储(NAS,Network Attached Storage)来容纳数据库的磁盘。SAN和NAS的硬件比DAS要贵得多,并且在复杂方式下更容易管理。除此之外,两者之间的比较有些争议。

图标

还有一些外部驱动器阵列可以通过使用SAS或eSATA线缆进行附加,因此尽管在技术上,它们处于服务器机箱的外部,它们仍然还是直连存储方式。DELL公司的PowerVault是较为常用和廉价的产品,已知可以扩展连接192块DAS驱动器。
SAN或者NAS相比直接存储有如下一些很明显的优势。

更轻松地使用多个驱动器。很难在不移动超过24个驱动器到多个外部存储单元的情况下获得直接存储。但对于SAN来讲却是一个相对中等的规模,它可以作为单个组件进行管理。
读取/写入高速缓存通常会更大。16GB大小的高速缓存在一个SAN当中是很少见的,而直接存储通常最高不会超过1GB。此外,SAN设计当中可以包含转储的方法,即使是在系统电源故障的情况下也可以轻而易举将较大的缓存转储至磁盘之上,在这个过程当中无论停顿多长时间都会很努力地去排除这个故障的数据库。
SAN可以很容易在多个服务器之间做冗余。通常情况下,用户在SAN中至少有两个光纤通道接口,可以很容易按照用户需求连接到两个系统中。只要用户对分区间存储做正确的配置,任意一台服务器都可以访问到该数据。
SAN的管理接口通常包含重建的可能性,同时类似快照的功能可以更容易进行备份和镜像操作。
不过,这里也会有些潜在的缺陷存在。

性能与直接存储相比可能会受到影响。当其他条件均等的情况下,通过SAN/NAS接口(光纤通道、以太网等等)连接的设备都有延迟,并可能会成为写入瓶颈。这种情况可能会降低系统的速度。例如,如果用户使用的是千兆以太网连接有多个磁盘的阵列,用户在获得这种情况下磁盘的最大速度之前,网络的容量就已经被占用满了。
SAN比较复杂。在部署系统以达到用户的负载需求时需要与专业人员进行咨询。
与直连存储相比,SAN的性能单位成本要高很多。如果用户真正需要使用SAN提供的冗余和管理功能,那将会做出明智的选择。这特别是在那种当SAN的规模足够大,并且需要同时为多个系统服务的情况下,整个系统的成本开销就会相当可观。
如果用户要以合理的价位达到性能要求,那么最好选择直连存储。如果用户需要SAN或NAS,需要考虑的因素更多的是价格而不是性能表现。

图标

如果用户采用了本书推荐的磁盘基准评测方法的话,那么就能够很快确定结果为SAN销售周期的一个必要组件取得良好的性能。考虑到它们的价格,如果在系统完全交付之前进行一些基准评测的话,就可以使那些提供商的SAN产品去执行一部分操作作为销售当中的一部分内容。在标准方式下其结果是不可能会有争议的。这可以避开需要聘请外部顾问的需求,取而代之的是使用提供商内部的资源。

时间: 2024-10-28 17:14:39

《PostgreSQL 9.0性能调校》一一2.1 平衡硬件支出的相关文章

《PostgreSQL 9.0性能调校》一一第1章 PostgreSQL版本

第1章 PostgreSQL版本 PostgreSQL 9.0性能调校众所周知,PostgreSQL具有丰富的功能集和非常稳定的软件版本.其默认的安全配置既被安全人员称赞又因其复杂的学习过程而被诟病.SQL规范的一致性和数据完整性只允许通过严格的方式与数据库进行交互,这会使那些时常使用相对宽松的桌面数据库软件的用户感觉到非常不适应.但是所有的一切都有其自身一定的道理. 运行速度慢是另外一个让PostgreSQL出名的原因.时至今日,仍然有一些事实能证明这一点.往往有很多使用"正确的方法"

《PostgreSQL 9.0性能调校》一一1.1 PostgreSQL历史版本的性能

1.1 PostgreSQL历史版本的性能 2005年11月,PostgreSQL发布了其8.1版本.该版本中包含了众多内部结构的改进,其中一些期望能够提高多个活动客户端在多处理器系统下的数据库性能.其结果是在处理沉重工作负荷时,数据库能力得到成比例的提高.在如今的硬件设备上进行的基准评测,突出地显示了其对先前版本的跨越.可以在http://suckit.blog.hu/2009/09/29/postgresql_history看到György Vilmos 对8.0版至8.4版的性能横向比较.

《PostgreSQL 9.0性能调校》一一1.6 小结

1.6 小结 PostgreSQL在近5年中取得了长足的发展.在建立了坚实的数据库基础后,众多开发人员向其添加了很多附加功能,在最近发布的版本中,所添加的功能和性能改进得到了很大提高.最新的PostgreSQL 9.0版本所添加的功能,使得复制和读取扩展比之前的版本变得更容易,人们期望能进一步加速这种适用于数据库的应用程序类型. PostgreSQL 8.1版本上的大量性能改进,尤其是在8.3版本中打破了一些关于与其竞争对手数据库服务器相对较慢的早期概念.还有一些情况,PostgreSQL的功能

《PostgreSQL 9.0性能调校》一一2.2 可靠的控制器及磁盘安装

2.2 可靠的控制器及磁盘安装 PostgreSQL使用预写式日志(WAL,Write-Ahead Log)来写入数据以使数据库或硬件失效时能保存数据.这与其他数据库的日志缓存和REDO日志类似.数据库文档包含WAL的实施方法详见:http://www.postgresql.org/docs/current/static/wal.html. 以下内容引用自该文档. WAL主要的概念是改变数据文件(表和索引所在的)只能在这些变更被记录后才能进行的情况,也就是说,日志记录描述的是那些被刷新至永久存储

《PostgreSQL 9.0性能调校》一一1.2 使用PostgreSQL还是其他数据库

1.2 使用PostgreSQL还是其他数据库 当然也有其他的数据库解决方案会执行得好一些.例如,PostgreSQL缺失了一些在TPC-H测试套件当中较为复杂的查询能够得到较好执行的功能(具体内容详见第8章).因此,与一部分商业数据库相比较而言它不适用于运行在较大规模的数据仓库应用程序当中.如果用户需要进行类似TPC-H①包含的高负载查询时,就可能会发现诸如Oracle.DB2.SQL Server等数据库仍然有值得付出的性能上的优势.目前也有一些由PostgreSQL衍生出来的版本,包含了能

《PostgreSQL 9.0性能调校》一一1.4 PostgreSQL应用程序扩展生命周期

1.4 PostgreSQL应用程序扩展生命周期 虽然每一个应用程序都有其独特的发展方向,但是我们也会发现有必要作为使用PostgreSQL数据库的应用程序的一些共同技术变得更为频繁.本书中的章节分别关注这一过程的常见方面.运行数据库服务器的步骤一般如下. (1)决定服务器运行的硬件条件.理想情况下,用户将测试能够满足预期条件的硬件. (2)建立数据库磁盘的布局:RAID级别.文件系统以及硬盘上可能的表/索引的布局. (3)优化服务器配置. (4)监控服务器性能和查询执行的情况. (5)提高查询

《PostgreSQL 9.0性能调校》一一1.3 PostgreSQL工具

1.3 PostgreSQL工具 如果用户习惯于数据库厂商提供的那些针对数据库本身的完整工具集,这些工具集所涵盖的范围从服务器管理到应用程序开发,那么PostgreSQL可能无法满足这部分用户的需求.与很多成功的开源项目一样,PostgreSQL视图持续专注于一些它所擅长的功能.这也就是开发社区所指的PostgreSQL核心:主要的数据库服务器,相关的工具可以作为数据库本身的一个部分进行开发.当有新的功能提出时,如果它们可能被建立和发布在"核心外",这是首选的方式.这种方式尽可能地保持

《PostgreSQL 9.0性能调校》一一2.3 小结

2.3 小结 架设一台高性能的数据库服务器是项艰苦的工作.在众多的质量等级和相应的成本开销下有许多独立的部件可用.也有许多的小细节需要用户做出正确决定,否则将有数据损坏的风险.幸运的是,用户不需要从零开始.一般的,知名的产品都有较好的性能表现,并且可靠性也较高,用户可以对数据库服务器做一个合理的预算.但也要对结果进行用户自身的基准评测.在运行中的数据库中,错误的配置也可以很容易破坏好的设备. CPU.内存和硬盘等硬件预算的分配,非常依赖于应用程序.仔细选择和配置控制器,同时,磁盘缓存是可靠数据库

PostgreSQL 10.0 preview 性能增强 - mergesort(Gather merge)

标签 PostgreSQL , 10.0 , merge sort , gather merge 背景 在数据库中,经常会有多个节点append,然后sort的情况. 例如一张表有10个分区,查询所有分区,并按某列排序输出,常规的做法是所有的记录append,然后sort. PostgreSQL 10.0 将支持append node的并行计算,也就是说所有的分区表可以并行的sort,然后返回,此时就可以使用merge sort来提高排序的速度. 另外,像单表的并行计算,如果需要排序输出的话,每