add auto fetch ssl certs

This commit is contained in:
2021-08-26 12:11:25 +08:00
parent 11ca254bed
commit 509ac048fc
237 changed files with 4968 additions and 7406 deletions

View File

@@ -13,7 +13,7 @@
"articleSection" : "post",
"name" : "[筆記] 測試 postgresql 的pg_prewarm 對效能的影響 \/ test pg_prewarm in postgresql 11",
"headline" : "[筆記] 測試 postgresql 的pg_prewarm 對效能的影響 \/ test pg_prewarm in postgresql 11",
"description" : "\x3cp\x3e老闆提到想要把新系統的 postgresql 資料庫都撈到記憶體裡面\x3c\/p\x3e\n\n\x3cp\x3e但是否決了我提出的ramdisk 作法(因為當機的話,資料就沒了)\x3c\/p\x3e\n\n\x3cp\x3e在找資料的時候發現了這個postgresql 的 pg_prewarm extension\x3c\/p\x3e\n\n\x3cp\x3e好像有點意思就來測試看看吧\x3c\/p\x3e\n\n\x3cp\x3e只是目前還不知道該怎麼解讀測試的數據就是了\x26hellip;\x3c\/p\x3e\n\n\x3cp\x3e幹林北真的不是 DBA 啦 =.=\x3c\/p\x3e",
"description" : "\x3cp\x3e老闆提到想要把新系統的 postgresql 資料庫都撈到記憶體裡面\x3c\/p\x3e\n\x3cp\x3e但是否決了我提出的ramdisk 作法(因為當機的話,資料就沒了)\x3c\/p\x3e\n\x3cp\x3e在找資料的時候發現了這個postgresql 的 pg_prewarm extension\x3c\/p\x3e\n\x3cp\x3e好像有點意思就來測試看看吧\x3c\/p\x3e\n\x3cp\x3e只是目前還不知道該怎麼解讀測試的數據就是了\x26hellip;\x3c\/p\x3e\n\x3cp\x3e幹林北真的不是 DBA 啦 =.=\x3c\/p\x3e",
"inLanguage" : "en",
"author" : "Eric Chang",
"creator" : "Eric Chang",
@@ -45,9 +45,9 @@
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
<link href="https://h.cowbay.org/css/style.css?v=1626744134" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/style.css?v=1629951055" rel="stylesheet" id="theme-stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1626744134" rel="stylesheet" type='text/css' media='all'>
<link href="https://h.cowbay.org/css/custom.css?v=1629951055" rel="stylesheet" type='text/css' media='all'>
<link rel="shortcut icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="https://h.cowbay.org/img/favicon.ico" type="image/x-icon">
@@ -81,10 +81,6 @@ if (!doNotTrack) {
<ul id="menu-secondary-items" class="menu-secondary-items">
<li class="menu-item menu-item-type-taxonomy menu-item-object-category">
<a href="/categories/"></a>
</li>
<li class="menu-item menu-item-type-taxonomy menu-item-object-category">
<a href="/categories/ansible">ansible</a>
</li>
@@ -309,25 +305,15 @@ if (!doNotTrack) {
<div class="entry-content">
<article>
<p>老闆提到想要把新系統的 postgresql 資料庫都撈到記憶體裡面</p>
<p>但是否決了我提出的ramdisk 作法(因為當機的話,資料就沒了)</p>
<p>在找資料的時候發現了這個postgresql 的 pg_prewarm extension</p>
<p>好像有點意思?就來測試看看吧!</p>
<p>只是目前還不知道該怎麼解讀測試的數據就是了&hellip;</p>
<p>幹!林北真的不是 DBA 啦 =.=</p>
<p>安裝系統、postgresql 資料庫什麼的就不提了,那不是這次的重點</p>
<h4 id="修改-postgresql-conf">修改 postgresql.conf</h4>
<h4 id="修改-postgresqlconf">修改 postgresql.conf</h4>
<p>編輯postgresql.conf開啟平行處理以及設定可用記憶體容量</p>
<p>這台測試機的環境是一台三代i7 , 24G RAM , 240G SSD安裝debian 10(buster)</p>
<pre><code># load libiriaes
# 其實這次不會用到pg_stat_statements ,不過出於習慣,還是加入開機自動載入吧
shared_preload_libraries = 'pg_stat_statements'
@@ -351,30 +337,19 @@ max_wal_size = 2GB
max_worker_processes = 8
max_parallel_workers_per_gather = 4
max_parallel_workers = 8
</code></pre>
<p>重新啟動postgresql ,準備開始測試囉!</p>
</code></pre><p>重新啟動postgresql ,準備開始測試囉!</p>
<p>轉換成 postgres 身份後,進入 psql</p>
<h4 id="建立測試資料庫">建立測試資料庫</h4>
<pre><code>postgres=# create database test;
CREATE DATABASE
postgres=#
</code></pre>
<h4 id="連接測試資料庫-建立pg-prewarm-extension">連接測試資料庫、建立pg_prewarm extension</h4>
</code></pre><h4 id="連接測試資料庫建立pg_prewarm-extension">連接測試資料庫、建立pg_prewarm extension</h4>
<pre><code>postgres=# \c test ;
You are now connected to database &quot;test&quot; as user &quot;postgres&quot;.
test=# CREATE EXTENSION pg_prewarm;
CREATE EXTENSION
test=#
</code></pre>
<h4 id="建立測試資料表-塞入500萬筆資料">建立測試資料表塞入500萬筆資料</h4>
</code></pre><h4 id="建立測試資料表塞入500萬筆資料">建立測試資料表塞入500萬筆資料</h4>
<pre><code>test=# \timing
Timing is on.
test=# CREATE TABLE test_tbl AS
@@ -382,18 +357,11 @@ SELECT floor(random() * (9923123) + 1)::int FROM generate_series(1, 5000000) AS
SELECT 5000000
Time: 2940.602 ms (00:02.941)
test=#
</code></pre>
<h4 id="檢查看看剛剛建立的table-用了多少空間">檢查看看剛剛建立的table 用了多少空間</h4>
</code></pre><h4 id="檢查看看剛剛建立的table-用了多少空間">檢查看看剛剛建立的table 用了多少空間</h4>
<p>哎呀,看起來用得不多啊</p>
<pre><code>test=# SELECT pg_size_pretty(pg_relation_size('test_tbl'));
173 MB
</code></pre>
<p><strong>玩大一點,塞個一億筆資料好了</strong></p>
</code></pre><p><strong>玩大一點,塞個一億筆資料好了</strong></p>
<pre><code>test=# drop table test_tbl;
Time: 0.361 ms
test=# CREATE TABLE test_tbl AS
@@ -407,12 +375,8 @@ pg_size_pretty | 3457 MB
Time: 0.589 ms
test=#
</code></pre>
<p>現在資料庫長到3457MB了</p>
</code></pre><p>現在資料庫長到3457MB了</p>
<p>先來執行一些初步的取得基本數據</p>
<pre><code>test=# explain (analyze,buffers) select count(*) from test_tbl;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------
@@ -432,12 +396,8 @@ test=#
(END)
</code></pre>
<p>可以看到打中buffer 的部份其實很少,只有 160 大部分都是讀進去buffer (442318)</p>
</code></pre><p>可以看到打中buffer 的部份其實很少,只有 160 大部分都是讀進去buffer (442318)</p>
<p>來看看 buffer 的使用狀況</p>
<pre><code>test=# CREATE EXTENSION pg_buffercache;
CREATE EXTENSION
test=# select c.relname,pg_size_pretty(count(*) * 8192) as buffered,
@@ -465,12 +425,8 @@ test-# group by c.oid,c.relname order by 3 desc limit 10;
Time: 148.719 ms
test=#
</code></pre>
<p>可以看到這個 test_tbl 只有0.5% 被撈到shared_buffers 裡面</p>
</code></pre><p>可以看到這個 test_tbl 只有0.5% 被撈到shared_buffers 裡面</p>
<p>接下來就把這個table全部推到shared_buffers 裡面去</p>
<pre><code>test=# select pg_prewarm('test_tbl','buffer');
pg_prewarm
------------
@@ -479,10 +435,7 @@ test=#
Time: 1938.043 ms (00:01.938)
test=#
</code></pre>
<p>然後再來看一次shared_buffers的使用狀況</p>
</code></pre><p>然後再來看一次shared_buffers的使用狀況</p>
<pre><code>test=# select c.relname,pg_size_pretty(count(*) * 8192) as buffered,
round(100.0 * count(*) / (
select setting from pg_settings
@@ -508,18 +461,11 @@ group by c.oid,c.relname order by 3 desc limit 10;
Time: 2778.354 ms (00:02.778)
test=#
</code></pre>
<p>OK ,可以看到 test_tbl 已經通通被載入 shared_buffers 中</p>
</code></pre><p>OK ,可以看到 test_tbl 已經通通被載入 shared_buffers 中</p>
<p><strong>buffered 表示表格被載入shared_buffers的大小</strong></p>
<p><strong>buffer_percent 表示這個表格佔用多少shared_buffers 的比例</strong></p>
<p><strong>percent_of_relation 表示這個表格有多少比例被載入 shared_buffers</strong></p>
<p>再來跑一次explain看看狀況</p>
<pre><code>test=# explain (analyze,buffers) select count(*) from test_tbl;
Time: 3551.785 ms (00:03.552)
Finalize Aggregate (cost=755978.52..755978.53 rows=1 width=8) (actual time=3427.286..3427.287 rows=1 loops=1)
@@ -536,16 +482,10 @@ Time: 3551.785 ms (00:03.552)
Execution Time: 3551.365 ms
(12 rows)
</code></pre>
<p>這邊就可以看到都是從buffer 讀出來所以 hit=442478</p>
</code></pre><p>這邊就可以看到都是從buffer 讀出來所以 hit=442478</p>
<p>看樣子表格還是太小,所以沒有完全發揮?那再來把表格加大!</p>
<p>先重開一次 postgresql 清除buffer</p>
<p>然後重新建立表格</p>
<pre><code>test=# drop table test_tbl;
DROP TABLE
Time: 297.493 ms
@@ -554,10 +494,7 @@ test-# SELECT floor(random() * (993343) + 1)::int FROM generate_series(1, 300000
SELECT 300000000
Time: 290660.607 ms (04:50.661)
test=#
</code></pre>
<p>一樣,看看用了多少容量</p>
</code></pre><p>一樣,看看用了多少容量</p>
<pre><code>test=# SELECT pg_size_pretty(pg_relation_size('test_tbl'));
pg_size_pretty
----------------
@@ -566,12 +503,8 @@ test=#
Time: 0.474 ms
test=#
</code></pre>
<p>哇哈哈用了10G ,這次還不撐爆你!</p>
</code></pre><p>哇哈哈用了10G ,這次還不撐爆你!</p>
<p>跑explain 看看狀況</p>
<pre><code>test=# explain (analyze,buffers) select count(*) from test_tbl;
Time: 22909.065 ms (00:22.909)
@@ -591,12 +524,8 @@ Time: 22909.065 ms (00:22.909)
Execution Time: 22908.571 ms
(12 rows)
</code></pre>
<p>看一下現在 shared_buffers 使用狀況</p>
</code></pre><p>看一下現在 shared_buffers 使用狀況</p>
<p>可以看到這個 test_tbl 幾乎沒被放入 shared_buffers 中</p>
<pre><code>test=# select c.relname,pg_size_pretty(count(*) * 8192) as buffered,
round(100.0 * count(*) / (
select setting from pg_settings
@@ -622,10 +551,7 @@ group by c.oid,c.relname order by 3 desc limit 10;
Time: 163.936 ms
test=#
</code></pre>
<p>強制把test_tbl 全部塞進 shared_buffers</p>
</code></pre><p>強制把test_tbl 全部塞進 shared_buffers</p>
<pre><code>test=# select pg_prewarm('test_tbl','buffer');
pg_prewarm
------------
@@ -634,10 +560,7 @@ test=#
Time: 7472.805 ms (00:07.473)
test=#
</code></pre>
<p>確認一下test_tbl 有沒有被整個塞進去</p>
</code></pre><p>確認一下test_tbl 有沒有被整個塞進去</p>
<pre><code>test=# select c.relname,pg_size_pretty(count(*) * 8192) as buffered,
round(100.0 * count(*) / (
select setting from pg_settings
@@ -663,10 +586,7 @@ group by c.oid,c.relname order by 3 desc limit 10;
Time: 4985.366 ms (00:04.985)
test=#
</code></pre>
<p>GOOD let&rsquo;s do explain again !</p>
</code></pre><p>GOOD let&rsquo;s do explain again !</p>
<pre><code>test=# explain (analyze,buffers) select count(*) from test_tbl;
Time: 11451.188 ms (00:11.451)
QUERY PLAN
@@ -684,18 +604,11 @@ Time: 11451.188 ms (00:11.451)
Planning Time: 0.039 ms
Execution Time: 11450.781 ms
(12 rows)
</code></pre>
<p>確認一下果然大部分都打到cache 了但是因為shared_buffers 不夠大,所以還會從磁碟讀取一部分</p>
</code></pre><p>確認一下果然大部分都打到cache 了但是因為shared_buffers 不夠大,所以還會從磁碟讀取一部分</p>
<p>而且時間也比之前還沒塞進shared_buffers 的時候要快了不少</p>
<p>22908.571 &ndash;&gt; 11450.781 ms</p>
<hr />
<hr>
<p>從這次的測試看來我想如果有足夠大的記憶體能夠把資料表都塞入shared_buffers 中</p>
<p>應該可以帶來不錯的效能增幅!</p>
</article>
</div>
@@ -971,7 +884,7 @@ title="pinterest icon"></i>
</ul> <div class="design-credit">
<p>&copy; 2018 Göran Svensson</p>
<p>© 2018 Göran Svensson</p>
<p>Nederburg Hugo Theme by <a href="https://appernetic.io">Appernetic</a>.</p>
@@ -983,7 +896,7 @@ title="pinterest icon"></i>
</div>
<script src="https://h.cowbay.org/js/jquery.min.js"></script>
<script src="https://h.cowbay.org/js/jquerymigrate.js"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1626744134"></script>
<script src="https://h.cowbay.org/js/production.min.js?v=1629951055"></script>
</body>
</html>