<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>数据库调优 on FXIO 技术博客</title><link>https://fxio.site/tags/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%B0%83%E4%BC%98/</link><description>Recent content in 数据库调优 on FXIO 技术博客</description><generator>Hugo -- 0.157.0</generator><language>zh-cn</language><lastBuildDate>Fri, 24 Jul 2026 12:29:00 +0800</lastBuildDate><atom:link href="https://fxio.site/tags/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%B0%83%E4%BC%98/index.xml" rel="self" type="application/rss+xml"/><item><title>家用 PostgreSQL 调优实战：从默认配置到性能翻倍</title><link>https://fxio.site/posts/sql/postgresql-home-tuning/</link><pubDate>Fri, 24 Jul 2026 12:29:00 +0800</pubDate><guid>https://fxio.site/posts/sql/postgresql-home-tuning/</guid><description>&lt;blockquote&gt;
&lt;p&gt;一台 16GB 内存的家用服务器，PostgreSQL 跑起来总觉得慢，改配置又怕改坏——这篇文章用真实的配置文件逐项拆解，告诉你哪些参数值得动，动多少合适。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- more --&gt;
&lt;h2 id="开场一次改坏的调优经历"&gt;开场：一次&amp;quot;改坏&amp;quot;的调优经历&lt;/h2&gt;
&lt;p&gt;上周帮朋友调一台家用服务器上的 PostgreSQL，他信誓旦旦说&amp;quot;我照着网上的教程改了 shared_buffers 到 8GB，结果数据库直接起不来了&amp;quot;。我一看配置——16GB 的机器，shared_buffers 给了 8GB，再加上操作系统缓存、其他服务，内存直接 OOM。&lt;/p&gt;
&lt;p&gt;这种故事在家庭服务器圈子里太常见了。PostgreSQL 的 &lt;code&gt;postgresql.conf&lt;/code&gt; 有几百个参数，但真正需要动的也就十来个。今天我们用一台真实的家用机器配置，逐项拆解。&lt;/p&gt;
&lt;h2 id="硬件家底你的机器够干多大的活"&gt;硬件家底：你的机器够干多大的活&lt;/h2&gt;
&lt;p&gt;先看看今天的实验对象：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;项目&lt;/th&gt;
&lt;th&gt;配置&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CPU&lt;/td&gt;
&lt;td&gt;12th Gen Intel i5-1240P（12核16线程）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;内存&lt;/td&gt;
&lt;td&gt;16GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;磁盘&lt;/td&gt;
&lt;td&gt;SSD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;系统&lt;/td&gt;
&lt;td&gt;Ubuntu 24.04 LTS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PG 版本&lt;/td&gt;
&lt;td&gt;PostgreSQL 16&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;16GB 内存、SSD、12 代酷睿——这是典型的家用 NAS 或者小型工作站配置。够用，但没有太多余量可以挥霍。&lt;/p&gt;
&lt;h2 id="第一梯队内存分配三兄弟"&gt;第一梯队：内存分配三兄弟&lt;/h2&gt;
&lt;p&gt;PostgreSQL 的性能调优，80% 就是调内存分配。搞明白三个参数，基本就入门了。&lt;/p&gt;
&lt;h3 id="shared_buffers--数据库的工作台"&gt;shared_buffers — 数据库的&amp;quot;工作台&amp;quot;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;shared_buffers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;2GB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这是 PostgreSQL 自己用来缓存数据页的内存。你可以把它想象成厨师的工作台——台面越大，能同时摊开的食材越多，不用反复跑冰箱拿东西。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;经验法则：物理内存的 25%&lt;/strong&gt;。16GB 的机器给 2GB 是合理的。给太大（比如 8GB），操作系统缓存会被挤掉，反而变慢；给太小，频繁读磁盘，性能拉胯。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;验证方法：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pg_size_pretty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pg_database_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current_database&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;db_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pg_size_pretty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pg_total_relation_size&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;projects&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;table_size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果你的数据库总量小于 shared_buffers，那说明数据全在缓存里，调大没意义。&lt;/p&gt;</description></item><item><title>PostgreSQL 百万级数据实战：查询计划与索引策略全解析</title><link>https://fxio.site/posts/sql/postgresql-million-rows-index/</link><pubDate>Fri, 24 Jul 2026 00:00:00 +0000</pubDate><guid>https://fxio.site/posts/sql/postgresql-million-rows-index/</guid><description>从 30 条到 100 万条，PostgreSQL 的查询计划怎么变？索引该怎么建？用真实基准测试数据说话。</description></item></channel></rss>