不严谨的说:对数据库的使用就是I/O操作!
因此,如果有效的提升了数据库系统对磁盘的I/O,那么可以说整体性能就会得到有效地提升。
本文尝试给出一些最常被使用到的提升系统吞吐量的策略,希望起到抛砖引玉的效果。
1.尽量保证在内存中完成数据库操作
众所周知,内存的读写效率远远高于磁盘的读写效率。因此,如果能够保证尽量多的操作都在内存中完成,就是提高了系统的整体性能。
如果硬件条件允许的话,应该尽量为数据库服务器配置尽量多的内存。不过这不是根本的方法,根本的方法应该在应用程序设计上充分考虑。
2.利用磁盘缓存进一步提升吞吐量
即便是内存够大,应用程序设计的足够优化,在中大型应用系统中一样避免不了直接读写磁盘的情况。在此基础上我们可以考虑使用存储设备本身提供的缓存功能。这样,出现物理内存和缓存都无能为力的情况就大大地减少了。
提升数据库系统的吞吐量是一个系统工程,不应仅局限在数据库层面上想问题。
3.分散磁盘I/O
在使用磁盘时,我们应该选用多块磁盘代替一块超大容量的磁盘。这样可以有效的提升磁盘并行读写性能,因此可以提升系统的整体吞吐量。
4.使用比较大的数据库Block Size
这是一条需要权衡的经验。如果选择了很大的数据库块大小,会降低对单个块上数据的读写效率,存在较大的争用。与此同时,对某些数据迁移方法上也存在一些限制。除此之外,应该说增加数据库块大小都有利于提高数据库性能。例如,较大的数据块可以保证内存中存放更多常用的数据;防止索引的level过高等。
在能够控制弊端的前提下,建议使用较大的数据库块来进一步提升系统的吞吐量。
5.控制临时表空间的使用
如果系统中存在大量的排序操作,如大量的order by字句、group by字句、索引维护及数据分析。这些都会用到大量的排序空间。当PGA中无法完成排序时就会使用到临时表空间。结果无疑是性能和吞吐量上的降低。因此,我们应该在应用设计上充分考虑到这些影响性能的因素,将排序操作控制在尽量少的范围内。
6.提升系统CPU性能
提升CPU的处理性能在某种程度上就是提升系统的吞吐量,因为单位时间内处理的有效数据增加了。
这里需要注意的是,我们不应该盲目的增加CPU个数,我们应该力图提升每颗CPU的处理能力。因为过多的CPU会给操作系统带来管理上的额外消耗。
7.小结
以上六条是提高系统吞吐量较常用的方法。最最根本的还是应该根据业务特点给出最优的应用设计,在充分考虑到所有影响吞吐量的因素的基础上才能给出最好的设计方案。
欢迎大家就该问题给出实际经验上补充。