画一张PG优化的思维导图
参考上面的图,实际上绝大多数数据库系统,包括Oracle在内,其优化都是有迹可循的,随着数据库越来越自动化,其实要让数据库稳定的运行并不难。老白这张图的大多数内容不仅仅适用于PG数据库,也适用于mysql等数据库,甚至Oracle等商用数据库。我们首先把数据库优化分成硬件系统、操作系统、表空间、数据库参数、应用优化这几个方面。第一个优化方向,硬件优化其实很简单,我们要确保自己的数据库系统拥有足够多的资源来确保系统稳定运行。对于绝大多数用户来说,硬件资源是可以得到保证的,现在的X86服务器价格还是比较亲民的,我们的系统出现资源不足往往是我们的容量规划做的不好,而不是没钱去买足够的资源。特别是目前绝大多数PG数据库是跑在云主机里的,为我们的PG数据库的云主机提供足够的硬件资源是确保PG数据库有好性能的最为简单也是最为基础的优化操作。第二个优化方向稍微复杂一点,不过十分关键。对于PG这样的数据库,OS的性能好坏对数据库性能的影响十分大。通过VM参数调整,确保PG数据库的运行内存、脏块刷新、BUFFER/CACHE等都处于较好的运行状态,可以有效的保证PG数据库的性能。特别是大页的配置,对于会话数超过500的PG数据库来说,一定要考虑HUGEPAGE的设置,SHARED BUFFER一定要使用HUGEPAGE,否则内存的页表会占据很大的空间,同时页表过大会引起整个OS的性能下降。PG数据库的脏块回写是基于文件系统缓冲的,因此OS的脏块回写策略一定要做好调整,缺省的LINUX参数都是偏大的,只适合于WEB服务,需要通过调整来减少脏块回写的间隔,从而在大数据量写入时获得较好的性能。当然对于绝大多数小型数据库来说,不做调整,对性能的影响也是较小的。第三个方面我们单独列了出来,就是表空间的优化。实际上这是经常会被人忽略的问题。PG的表空间和Oracle的表空间不同,不过作用却比Oracle数据库更大。表空间确定了某张表存储在某个文件系统/目录下。通过设定不同的表空间存放不同的数据,可以有效的避免热数据冲突,平衡IO负载,同时让某个目录下的文件数量得到有效的控制,这些对于较为大型的数据库系统来说,都是提升总体性能的良方。第四个方面是数据库参数本身的调整,老白以前曾经写过一篇文章介绍PG数据库参数调整的一些常用技巧。这些参数分为会话连接类参数、共享缓冲池类参数、WAL/CHECKPOINT类参数、IO评估类参数等。对于大多数PG数据库来说,这些参数都不要使用缺省值,PG的缺省参数都是偏小的,无法充分利用你的硬件资源,并支撑稍微大一些的负载。对这些参数的调整感兴趣的朋友可以参考老白以前写过的一些关于PG参数优化的帖子,上面所说的几部分参数优化都已经写的很详细了,这里就不再重复了。第五方面归纳为应用优化,实际上包括了应用服务器中数据库连接池的优化、数据库表与索引设计与维护(碎片整理,重建等)与TOP SQL几个方面。实际上,对于任何一个系统来说,如果能从应用上去优化系统,可以避免很多性能问题。应用足够优化,那么数据库系统承受的压力就小,那么数据库运行也就更稳定,性能问题也不容易爆发。实际上,上面的优化思维导图对于绝大多数我们正在运行的数据库系统都是有效的,除了一些特殊应用系统需要专家进行针对性的优化之外,大多数中小型数据库系统甚至较大的数据库系统,上述优化都是十分有效的。对于PG等开源数据库来说,实际上硬件资源优化、OS优化做好了,数据库参数调整的合理一点,大多数性能问题也就迎刃而解了。
《画一张PG优化的思维导图》来自互联网,仅为收藏学习,如侵权请联系删除。本文URL:http://www.bookhoes.com/3237.html