免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3990 | 回复: 14
打印 上一主题 下一主题

PostgreSQL Hardware Performance Tuning -- 学习笔记 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-12 23:55 |只看该作者 |倒序浏览
PostgreSQL Hardware Performance Tuning
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

1: Postgresql Shared Buffer Cache

        postgresql.conf -->; shared_buffers

pg默认配置申请 1000 个 shared buffers, 每个 8k .
postgresql 并不直接修改硬盘上的数据,需要的数据被读到 shared buffer cache
中,后台程序修改这些块,最后刷新到硬盘上。
后台程序刷新数据到硬盘的操作其实是请求系统内核来完成对硬盘的修改操作,而
内核对于硬盘的操作其实是先到 kernel disk buffer cache 中的。

2: 多大是太大

        将所有的内存都给 shared_buffers 将导致没有内存来运行程序。
        unix 管理内存使用 swap, 当没有内存可用的时候,内核会将长时间不用的内存
        挪到 swap 去,这个叫:swap pageout,当你再次使用它的时候内核又会将其挪
        回来,这个叫:swap pagein,这个操作有很大的不好,因为它会导致你的程序
        挂起直到操作完成。

3: cache size 的影响

4: 正确的 Shared Buffer Cache 大小

        (1) 它应该足够大来应付通常的表访问操作。
        (2) 它应该足够小来避免 swap pagein 的发生。

5:Sort Memory Batch Size

        postgresql.conf  -->; sort_mem

        当对一个大表或记录集进行排序时,pg将对它们进行部分排序,中间数据结果会
        被放在临时文件中。当所有的行都被排序完了后,这些临时文件会被合起来进行
        再次排序。增加 batch 的大小可以减少临时文件并且加快排序的速度。如果
        sort batch 太大将导致 pagein 。这种情况下,较少的 sort batch 和更多的临
        时文件将会使排序更快。这个主要是对 order by, create index, merge join.
       
6: Cache Size and Sort Size

        cache size 和 sort size 都影响内存的使用。 记住, cache size 是在
        postmaster 启动的时候就申请好的,sort size 的改变是依赖于执行多少个排序。
        通常,cache size 比 sort size 更有效果。
        一开始调整, 如果你只有一些大的session而有更多的小session:
                10% of RAM for cache size
                2-4% of RAM for sort size
        还有一个很有价值的参数: effective_cache_size。 优化器用这个参数来预估
        内核的硬盘 buffer cache. 当内核有 unified buffer cache (统一缓冲), 这个
        值将是没被使用的内存的平均值,因为这种内核会使用所有没有使用的内存来作
        最近硬盘访问的缓存的;当内核用 fixed-sized disk buffer cache 时,这个参
        数应该设成一样的,通常是内存的 10%.

7: Disk Locality (硬盘分区的物理分布位置)
        分布在头上的数据的读取很快,连续分布的块的读取比不连贯的快。

8:多个硬盘
        设计你的数据库文件如何在硬盘上分布。有点复杂........
       
9: 硬盘的缓存
       
        关掉的好,要不突然停电就惨了。当然,你的硬盘有备用电源就不用关了。
       
        hdparm -W0, sysctl hw.ata.wc = 0

10:SCSI vs. IDE

        当然是 scsi 好了。

11: 文件系统格式

        推荐 BSD 的 UFS/FFS, Linux 就比较惨了,虽然有很多中文件系统,但没有一个
        适合的。

12: 多个 CPU

        当然好了。但如果只有一个连接,则有点浪费。

13:Ceckpoints

        postgresql.conf -->; checkpoint_segments = 3

        如果发现太频繁了,加大。

14: 结论

        幸运的是,postgresql不需要太多的调整。很多参数都会被优化器自动调整的。
        Cache size 和 sort size 是管理员需要调整的以便更好的使用内存。硬盘访问
        可以同交叉分布数据到不同的硬盘上来改善性能,当然,还有scsi 。

论坛徽章:
0
2 [报告]
发表于 2005-04-13 08:24 |只看该作者

PostgreSQL Hardware Performance Tuning -- 学习笔记

妙!
我看过英文版的,楼主的汉化真是经典啊!
简直是一针见血!
好!

论坛徽章:
0
3 [报告]
发表于 2005-04-16 16:17 |只看该作者

PostgreSQL Hardware Performance Tuning -- 学习笔记

呵呵,写作此文的一定是BSD的粉丝。事实上,我自己的经验(包括BSD)
来看,我觉得BSD最差的部分就是文件系统,比起linux来。linux里的文件
系统不是每种都好,至少我不推荐使用ext3(MD,现在有两台手下装的在线,
很郁闷。) xfs 是最好的,相比之下,BSD的FFS未必在稳定性,性能,扩展性,
快速灾难恢复上强多少。而最要命的是,我到现在还不知道FREEBSD有没有很好
的日志文件系统和逻辑卷管理器。这个对数据库应用还是很重要的,要不管理员
还是比较累的。

论坛徽章:
0
4 [报告]
发表于 2005-04-18 21:43 |只看该作者

PostgreSQL Hardware Performance Tuning -- 学习笔记

首先,我到目前为止就装过一次FreeBSD,还没有正式用过,更谈不上是是fans了。
其次,本文其实只是一个简单的学习笔记,差不多是个不完全的翻译,关于文中提到
的BSD文件系统更适合postgresql一说也只是根据原文作者的说法,并不代表本人的意见,而且,本人也没有认真测试和实验过,所以没有什么建设性的说法可以发表,真是深表抱歉。
偶一直以来都是用linux,对于文件系统,个人感觉其实一般桌面用户用reiserfs比较合适(我的加参数notail,noatime),而服务器我一般用ext3,因为它有足够的理由让我相信它的稳定性,服务器的数据丢失可不好玩,而且速度一般也没什么问题。
但是,对于数据库,尤其是像postgresql这样的数据库,要求用户对其的性能进行完全的自主修订,文件系统的选择还是很关键的。这不想你用DB2/Oracle,厂商会告诉你根据你的需求你应该修改什么参数和用什么样的硬件,它需要你自己来选择(当然,这个是因为目前关于postgresql的商业技术支持的有一定规模的公司实在太少所造成的)。其实这里说选FreeBSD的文件系统好并不代表这个文件系统如何好,只是比较适合pg而已,相应的,如果pg对裸设备支持的足够好的话,我想,手册中不会在说选什么样的文件系统了,一定是建议你为了性能请使用裸设备了,呵呵。毕竟,如果专门开发针对于pg进行优化的裸设备的操作驱动的话,当然用其比用系统的IO要好很多了。
说到这里,希望有志之士能够尽快为我们提供pg对于裸设备的支持,当然也非常的希望您能为此而贡献自己的力量,如果你也不是很讨厌postgresql的话。

论坛徽章:
0
5 [报告]
发表于 2005-04-19 08:09 |只看该作者

PostgreSQL Hardware Performance Tuning -- 学习笔记

裸设备就一定好吗?我看不一定
我们公司就使用了ORACLE+裸设备,真他妈的不好管理
我发誓以后都不要用这个破玩意了。
虽然文件系统比他稍微慢一点,但我觉得从可管理性来说,我还是会选择文件系统。

论坛徽章:
0
6 [报告]
发表于 2005-04-19 15:14 |只看该作者

PostgreSQL Hardware Performance Tuning -- 学习笔记

对,裸设备在管理上来说的确不是很方便,只是在有些环境下如果要性能最大化和数据稳定安全化的时候还是需要选择裸设备,而且有些应用是一定要基于裸设备才能实现的很好的。当然,只是我个人的观点。最近在作一个应用,就是一些表一般都有200万的记录数,统计一下很让人受不了,内存的 page out/in 太恐怖了,难道我要将机器的内存加到2G才行吗?兄弟给点建议。谢谢了先。

论坛徽章:
0
7 [报告]
发表于 2005-04-19 15:27 |只看该作者

PostgreSQL Hardware Performance Tuning -- 学习笔记

我认为,数据的稳定性,文件系统可能比裸设备更可靠。
裸设备有的只是性能,而如果使用专业的存储,我们就算使用文件系统,专业的CACHE功能也并不会使我们的数据库慢多少。

你一个表200万条记录并不大啊,我这边有上亿条记录。
适当增大你的shared_buffers,另外,建立合适的index,会让你的数据库性提高起来。

当然,内存2G并没有什么奇怪的,做为一个数据库Server,内存在几十个G都很正常。我这边就有12个G的memory。

当然,增加硬件投资是性能优化的下下策,首先,还是要考虑从软件和应用本身来进行性能的优化。

论坛徽章:
0
8 [报告]
发表于 2005-04-20 12:40 |只看该作者

PostgreSQL Hardware Performance Tuning -- 学习笔记

获益匪浅!!多谢回复。

论坛徽章:
0
9 [报告]
发表于 2005-04-20 15:14 |只看该作者

PostgreSQL Hardware Performance Tuning -- 学习笔记

[quote]原帖由 "he_xiaoyuan" 发表:
首先,我到目前为止就装过一次FreeBSD,还没有正式用过,更谈不上是是fans了。
其次,本文其实只是一个简单的学习笔记,差不多是个不完全的翻译,关于文中提到
的BSD文件系统更适合postgresql一说也只是根据原文作

论坛徽章:
0
10 [报告]
发表于 2005-04-20 15:39 |只看该作者

PostgreSQL Hardware Performance Tuning -- 学习笔记

bitbird:
我应该叫linux_prog,不是linux_frog

呵呵。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP