<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>开源小站 &#187; postgresql</title>
	<atom:link href="http://www.litrin.net/tag/postgresql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.litrin.net</link>
	<description>It is Cool to OpenSource</description>
	<lastBuildDate>Fri, 03 Feb 2012 04:33:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>优化你的PgSQl（FreeBSD）</title>
		<link>http://www.litrin.net/2006/03/08/%e4%bc%98%e5%8c%96%e4%bd%a0%e7%9a%84pgsql%ef%bc%88freebsd%ef%bc%89/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e4%25bc%2598%25e5%258c%2596%25e4%25bd%25a0%25e7%259a%2584pgsql%25ef%25bc%2588freebsd%25ef%25bc%2589</link>
		<comments>http://www.litrin.net/2006/03/08/%e4%bc%98%e5%8c%96%e4%bd%a0%e7%9a%84pgsql%ef%bc%88freebsd%ef%bc%89/#comments</comments>
		<pubDate>Wed, 08 Mar 2006 03:17:22 +0000</pubDate>
		<dc:creator>Litrin</dc:creator>
				<category><![CDATA[数据库应用]]></category>
		<category><![CDATA[网络和安全]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.litrin.net/?p=269</guid>
		<description><![CDATA[本文根据Pgsql手册的内容整理而来。一直在用Pgsql，这些天有种想要将其优化到底的想法，对其做了如下改动： FreeBSD内核的修改 首先，察看几个内核数值 ：#sysctl -a &#124; grep shmall #sysctl -a &#124; grep shmmax#sysctl -a &#124; grep semmni# sysctl -a &#124; grep semmns shmall 为可用共享内存大小，以 4KB 页为单位计算，即最终的结果*4才是你共享内存的大小数。系统默认为8192，32M。怎么也要128以上吧？如果你收到来自shmget的类似Invalid argument这样的错误信息，那么很有可能是你已经超过这个限制了。shmmax为最大共享内存大小，这个值至少应该大于 250kB + 8.2 kB * shared buffers + 14.2 kB *max connections semmni知该怎么翻译好，应该是&#8220;信号灯标示符的最小值&#8221;之类的意思。由于pgsql每16个连接占据一个&#8220;信号灯&#8221;且每16个连接之后还会有一个备用的连接，故理论上这个值应该且必须大于max_connections / 16 ，系统默认非常保守，只有10。 semmns，原理同上，这个值应该设置为大于(max_connections / 16) *17+10，经过测试，这个值减去15，基本上就是max_connctions能设置的最大数值。 我的设置为(注：服务器内存256M) kern.ipc.shmall=32768kern.ipc.shmmax=134217728kern.ipc.semmap=256kern.ipc.semmni=256kern.ipc.semmns=512kern.ipc.semmnu=256 需要注意的是，semmni和semmns两个参数不可通过sysctl设置，只能选择编进内核或者修改/boot/loader.conf。对于其他参数可以直接修改/etc/sysctl.conf文件或者内核配置文件中添加options的方法，考虑到日后调整方便，建议采用前一方法。修改成功后重启机器（不嫌麻烦可以手动添加）。#reboot 以上几个数值解决了很多BSD用户碰到的修改了Pg配置而无法启动pg的尴尬 修改postgresql.conf 这里修改起来就比较直观了。一般情况下设置maintenance_work_mem和checkpoint_segments会有不错的性能提升，但对于高负荷情况下主要就是shared buffers和max connections。这里默认的配置文件中也有比较详细的介绍。 [...]]]></description>
			<content:encoded><![CDATA[<p>本文根据Pgsql手册的内容整理而来。<br />一直在用Pgsql，这些天有种想要将其优化到底的想法，对其做了如下改动：<br />   <!--break--> <span style="font-weight: bold;"><br />FreeBSD内核的修改</span></p>
<p>首先，察看几个内核数值 ：<br />#sysctl -a | grep shmall <br />#sysctl -a | grep shmmax<br />#sysctl -a | grep semmni<br /># sysctl -a | grep semmns</p>
<p>shmall 为可用共享内存大小，以 4KB 页为单位计算，即最终的结果*4才是你共享内存的大小数。系统默认为8192，32M。怎么也要128以上吧？如果你收到来自shmget的类似Invalid  argument这样的错误信息，那么很有可能是你已经超过这个限制了。<br />shmmax为最大共享内存大小，这个值至少应该大于 250kB + 8.2 kB * shared buffers + 14.2 kB *max connections </p>
<p>semmni知该怎么翻译好，应该是&ldquo;信号灯标示符的最小值&rdquo;之类的意思。由于pgsql每16个连接占据一个&ldquo;信号灯&rdquo;且每16个连接之后还会有一个备用的连接，故理论上这个值应该且必须大于max_connections / 16 ，系统默认非常保守，只有10。</p>
<p>semmns，原理同上，这个值应该设置为大于(max_connections / 16) *17+10，经过测试，这个值减去15，基本上就是max_connctions能设置的最大数值。</p>
<p>我的设置为(注：服务器内存256M)</p>
<pre style="margin-left: 40px;">

<font size="2"><strong>kern.ipc.shmall=32768</strong><strong>kern.ipc.shmmax=134217728</strong><strong>kern.ipc.semmap=256</strong><strong>kern.ipc.semmni=256</strong><strong>kern.ipc.semmns=512</strong><strong>kern.ipc.semmnu=256</strong> </font>
</pre>
<p>需要注意的是，semmni和semmns两个参数不可通过sysctl设置，只能选择编进内核或者修改/boot/loader.conf。对于其他参数可以直接修改/etc/sysctl.conf文件或者内核配置文件中添加options的方法，考虑到日后调整方便，建议采用前一方法。修改成功后重启机器（不嫌麻烦可以手动添加）。<br />#reboot</p>
<p>以上几个数值解决了很多BSD用户碰到的修改了Pg配置而无法启动pg的尴尬</p>
<p><span style="font-weight: bold;">修改postgresql.conf</span></p>
<p>这里修改起来就比较直观了。<br />一般情况下设置<tt class="VARNAME">maintenance_work_mem和</tt><tt class="VARNAME">checkpoint_segments会有不错的性能提升，</tt>但对于高负荷情况下主要就是shared buffers和max connections。这里默认的配置文件中也有比较详细的介绍。</p>
<p>重启pgsql: <br />#/usr/local/etc/rc.d/010.pgsql.sh restart</p>
<p><span style="font-weight: bold;">如果你还有足够的勇气时间以及金钱<br /></span></p>
<ol>
<li>使用64位的操作系统、更大的内存、更快的硬盘&mdash;&mdash;废话！</li>
<li>将数据文件和系统文件放置在两个卷上（可以使用ln作连接）。</li>
<li>开启内核的MD，将一部分内存模拟成磁盘存放数据文件。这在少量数据的情况下可以尝试，但可靠性下降，适合只读不写的数据库。</li>
<li>适当调高WAL预写缓冲，但这意味着系统可靠性下降。</li>
<li>修改make.conf ，添加-O3编译参数，重新编译PGSQL和kernel，当然这是在连使用-O2和所有优化参数之后仍无济于事之后。效率提升&lt;1%<img alt="" src="/modules/fckeditor/lib/editor/images/smiley/msn/sad_smile.gif" /></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.litrin.net/2006/03/08/%e4%bc%98%e5%8c%96%e4%bd%a0%e7%9a%84pgsql%ef%bc%88freebsd%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

