<div dir="ltr">Hi,<div><br></div><div>Cảm ơn các bạn đã hỗ trợ.</div><div><br></div><div>Nếu còn thắc mắc nào tiếp mình sẽ nhờ các bạn tư vấn thêm.</div><div><br></div><div>Cảm ơn các bạn.</div></div><div class="gmail_extra"><br><div class="gmail_quote">Vào 17:02 10 tháng 6, 2018, pgvn_support <span dir="ltr"><<a href="mailto:support@postgresql.vn" target="_blank">support@postgresql.vn</a>></span> đã viết:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
<font size="+2">Hi,</font><span class=""><br>
<font size="+2"><br>
</font>
<div class="m_-3571760460483261805moz-cite-prefix">On 10/06/2018 6:34 CH, Trần Đức Thông
wrote:<br>
</div>
<blockquote type="cite">
<p dir="ltr">Cảm ơn các bạn đã trả lời mình. </p>
<p dir="ltr">Việc config lại tham số max_connection thì theo kinh
nghiệm của admin thì nên sửa thành bao nhiêu? Và ngoài config
max_connection thì còn có tham số nào nữa không. Mình đọc thì
thấy cần tham số max_buffersize để tăng dung lượng cache.</p>
</blockquote>
<br></span>
Bạn nên thao khảo thiết kế hệ thống của bạn để điều chỉnh
max_connections.<br>
Số lượng cần chỉnh là số lượng connections thực tế có thể kết nối
tới PostgreSQL <br>
(bao gồm cả các kết nối liên quan tới quản lý DB từ bạn) + 3 (mặc
định của superuser_reserved_<wbr>connections).<br>
<br>
Thông thường khi thay đổi tham số max_connections bạn nên để ý tới
resource hệ thống như bên dưới.<br>
<br>
[Memory]<br>
Mỗi một backend process của của PostgreSQL sử dụng khoảng 3MB
memory.<br>
Mỗi connection có thể sử dụng = (số lượng sort hay join) * work_mem.<br>
# trường hợp của bạn không thấy có sort hay join.<br>
<br>
[CPU]<br>
Mỗi connections là một process nên tăng số lượng connections nhiều
quá (khoảng 1000?), sẽ dẫn đến CPU neck.<br>
<br>
PostgreSQL không có tham số max_buffersize.<br>
Muốn tăng dung lượng buffers bạn có thể thiết lập tham số
shared_buffers.<br>
But tham số ngày không trực tiếp liên quan khi điều chỉnh
max_connections.<br>
Theo recommend của community thì thiết lập tham số này = 25% memory
hệ thống.<br>
But nếu thiết lập bạn cũng phải để ý thêm tham số liên quan tới
checkpoint như max_wal_size,..<br>
<br>
# Với các phiên bản gần đây thì không cần để ý tới các thiết lập về
OS<div><div class="h5"><br>
<br>
<div>Xin cảm ơn,</div>
<div>— </div>
<div>Together we work better </div>
<div>Cộng đồng PostgreSQL Việt Nam</div>
<blockquote type="cite">
<p dir="ltr">Việc custom cấu hình mặc gồm những tham số nào nhờ
admin chỉ dõ thêm.</p>
<p dir="ltr">Thank admin.</p>
<div class="gmail_quote">On Jun 10, 2018 15:53, "pgvn_support"
<<a href="mailto:support@postgresql.vn" target="_blank">support@postgresql.vn</a>> wrote:<br type="attribution">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF"> Hi,<br>
<br>
On 09/06/2018 9:07 CH, Trần Đức Thông wrote:<br>
<blockquote type="cite">
<div dir="ltr">Xin bạn,
<div><br>
</div>
<div>Mình hiện tại đang sử dụng PostgreSQL vào trong
công việc. Tuy nhiên hiện giờ mình gặp một bug mà chưa
giải quyết được. Nhờ các bạn tư vấn giúp. Chi tiết như
sau</div>
<div><br>
</div>
<div>
<p style="margin:6px 0px;font-family:Helvetica,Arial,sans-serif;color:rgb(29,33,41);font-size:14px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">Phiên
bản PostgreSQL 10</p>
<p style="margin:6px 0px;display:block;font-family:Helvetica,Arial,sans-serif;color:rgb(29,33,41);font-size:14px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">Mình
có thực hiện một test như sau.<span> </span><span class="m_-3571760460483261805m_-7609154507309799958gmail-text_exposed_show" style="display:inline;font-family:inherit"><br>
1. Tạo một Table có 4 cột, và insert vào đó 1120
bản ghi.</span></p>
<div class="m_-3571760460483261805m_-7609154507309799958gmail-text_exposed_show" style="display:inline;font-family:Helvetica,Arial,sans-serif;color:rgb(29,33,41);font-size:14px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">
<p style="margin:0px 0px 6px;font-family:inherit">2.
Viêt một web api sử dụng thư viện<span> </span><a class="m_-3571760460483261805m_-7609154507309799958gmail-_58cn" href="https://www.facebook.com/hashtag/npgsql?source=feed_text" style="color:rgb(54,88,153);text-decoration:none;font-family:inherit" target="_blank"><span class="m_-3571760460483261805m_-7609154507309799958gmail-_5afx" style="direction:ltr;unicode-bidi:isolate;font-family:inherit"><span class="m_-3571760460483261805m_-7609154507309799958gmail-_58cl m_-3571760460483261805m_-7609154507309799958gmail-_5afz" style="unicode-bidi:isolate;color:rgb(54,88,153);font-family:inherit">#</span><span class="m_-3571760460483261805m_-7609154507309799958gmail-_58cm" style="font-family:inherit">Npgsql</span></span></a><span> </span>tạo
kết nối đến db vào execute một function. Function
này thực hiện một nhiệm vụ đơn giản là trả ra hết
các bản ghi của table trên.</p>
<p style="margin:6px 0px;font-family:inherit">3. Sử
dụng jemeter load test vào function trên. Với tham
số Number Of Theard = 200, Ramp-Up = 0, Loop Count
= 5.</p>
<p style="margin:6px 0px;font-family:inherit">4. Kết
quả xảy ra lỗi "sorry, too many clients already"
-> check trong db thấy số connection đang mở là
105. Trong khi theo config của PostgreSql
max-connection = 100.</p>
</div>
</div>
</div>
</blockquote>
Số connections hiện tại trên PostgreSQL có thể xem từ view
pg_stat_activity của PostgreSQL.<br>
<br>
max_connections không tính số lượng worker process (như
background worker, autovacuum launcher, ...).<br>
Nên có trường hợp số lượng rows trong pg_stat_activity trả
về giá trị lớn hơn max_connections.<br>
<br>
Ở phiên bản 10, có một số connections không được tính cho
max_connections cũng hiện thị trong pg_stat_activity như:<br>
background writer, checkpointer, walwriter.<br>
Nên giá trị connection đang mở có thể có giá trị 105 như bạn
xác nhận.<br>
<br>
<blockquote type="cite">
<div dir="ltr">
<div>
<div class="m_-3571760460483261805m_-7609154507309799958gmail-text_exposed_show" style="display:inline;font-family:Helvetica,Arial,sans-serif;color:rgb(29,33,41);font-size:14px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">
<p style="margin:6px 0px;font-family:inherit">Mình
không có nhiều kinh nghiệm với sql nên nhờ mọi
người tư vấn giúp. Với 2 câu hỏi như sau.</p>
<p style="margin:6px 0px;font-family:inherit">1. Tạo
sao lại xảy ra hiện tượng mở nhiều connection (sao
connection pool k được dùng đến) trong chuỗi
Connection string đã có tham số Pooling = true</p>
</div>
</div>
</div>
</blockquote>
<br>
Chức năng connection pooling bạn nói là ở phía npgsql, không
phải bên PostgreSQL.<br>
Nên mình chỉ có thể trả lời khái quát như bên dưới.<br>
Để tìm hiểu cụ thể bạn tham khảo documents (hoặc source)
phía npgsql.<br>
<br>
Thông thường vì PostgreSQL sử dụng mỗi process cho một kết
nối, <br>
nên ở một số Driver có chức năng pool connection (hoặc tạo
kết nối trước (prefork)) <br>
để giảm overhead khi có kết nối mới.<br>
<br>
Bạn có thể chỉnh số lượng connections pool ở phía driver.<br>
<br>
<blockquote type="cite">
<div dir="ltr">
<div>
<div class="m_-3571760460483261805m_-7609154507309799958gmail-text_exposed_show" style="display:inline;font-family:Helvetica,Arial,sans-serif;color:rgb(29,33,41);font-size:14px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">
<p style="margin:6px 0px;font-family:inherit">Câu 2.
Tại sao khi postgresql đã max connection -> các
request sau không được được cho vào queue đợi khi
thực khi xong các request hiện tại mới tiếp tự
thưc thi các request mới. Mà theo hiên tại
postgresql vẫn cố mở thêm conneciton mới dẫn đến
xảy ra lỗi trên</p>
</div>
</div>
</div>
</blockquote>
<br>
Lỗi "sorry, too many clients already" là phía PostgreSQL trả
về, khi số lượng kết nối yêu cầu lớn hơn max_connections.<br>
but PostgreSQL không tự mở thêm kết nối. Mở kết nối là do
phía npgsql.<br>
PostgreSQL cũng không có cơ chế queue để chứa các kết nối. <br>
<br>
Bạn nên xem lại hệ thống bạn có mở kết nối khác ngoài npgsql
không (Ví dụ như cho mornitoring?) và <br>
điều chỉnh lại max_connections (postgresql.conf) hoặc Max
pool size (npgsql) cho đúng.<br>
<br>
<blockquote type="cite">
<div dir="ltr">
<div>
<div><img src="cid:part3.E3EC9209.9F52FEAC@postgresql.vn" height="267" width="412"><br>
</div>
<div><img src="cid:part4.4B342237.C928959E@postgresql.vn" height="179" width="412"><br>
</div>
<div><img src="cid:part5.C3701C66.5486919D@postgresql.vn" height="239" width="412"><br>
</div>
<div><img src="cid:part6.7EC0B6C9.6E788033@postgresql.vn" height="151" width="412"><br>
</div>
<div><img src="cid:part7.83B7325E.9FBB3F88@postgresql.vn" height="155" width="412"><br>
</div>
</div>
<div>
<div>Nhờ các bạn tư vấn giúp.</div>
<div><br>
</div>
<div>Mình xin cảm ơn.</div>
<div class="m_-3571760460483261805m_-7609154507309799958gmail_signature" data-smartmail="gmail_signature">
<div>------------------------------<wbr>------------------------------<wbr>------------------------------<wbr>-------
</div>
<b><font color="#cc0000">Tran Duc Thong</font></b>
<div>Software engineering</div>
<div>Mobile: 0989 452 004</div>
<div>Email: <a href="mailto:humg.thongit@gmail.com" target="_blank">humg.thongit@gmail.com</a></div>
</div>
</div>
</div>
</blockquote>
<br>
<div>Xin cảm ơn,</div>
<div>— </div>
<div>Together we work better </div>
<div>Cộng đồng PostgreSQL Việt Nam</div>
<br>
<br>
</div>
</blockquote>
</div>
</blockquote>
<br>
</div></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div>-------------------------------------------------------------------------------------------------
</div><b><font color="#cc0000">Tran Duc Thong</font></b><div>Software engineering</div><div>Mobile: 0989 452 004</div><div>Email: <a href="mailto:humg.thongit@gmail.com" target="_blank">humg.thongit@gmail.com</a></div></div>
</div>