VPN හරහා psql කාල මැනීම: ජාලයේ රැඳී සිටීම විමසුමේ කාර්යයෙන් වෙන් කිරීම
psql එක් එක් ප්රකාශය සඳහා එකම ගත වූ කාල සංඛ්යාවක් වාර්තා කරයි, එබැවින් මන්දගාමී VPN එය පිම්බෙයි. කිසියම් පැත්තක් සකසන පෙර සම්බන්ධතාව, ක්රියාත්මක කිරීම, මාරු කිරීම සහ යාම-පැමිණීමේ කාලය වෙන් කරන්න.
ඔබේ වාර්තාව දත්ත සමුදාය සත්කාරකයේදී සුමාන එක් තත්පරයකින් සහ VPN හරහා හතරකින් අවසන් වේ, සහ psql මුද්රණය කරන සංඛ්යාව සෘජුවම දත්ත සමුදාය දෙසට යොමු කරයි. එම සංඛ්යාව සේවාලාභී පැත්තේ තත්පර මාපකයකි, සර්වරයේ මැනීමක් නොවේ. එය ප්රකාශය පිටතට යන මාර්ගය, පිළිතුරක් සඳහා රැඳී සිටීම සහ ආපසු එන පේළි ආවරණය කරයි. මෙම තුන වෙන් කිරීම කුමන පැත්ත සකසන්නේදැයි දැන ගැනීමේ එකම මාර්ගයයි.
psql කාල මාපකය ඇත්තටම මනින්නේ කුමක්ද
\timing on සේවාලාභියා ප්රකාශය සොකටයට ලියන්නට මොහොතකට පෙර තත්පර මාපකයක් අරඹා එම ප්රතිඵලයේ අවසාන පේළිය කියවා අවසන් වූ විට නවතී. සර්වරයේම ක්රියාත්මක කිරීම එම කවුළුව තුළ කොහේ හෝ පවතී, එමෙන්ම ඇතිරිලි උමග තුළ ගත කරන සෑම මිලි තත්පරයක්ම ද. ප්රතිදානයේ කිසිවක් ඒවා වෙන් නොකරයි. EXPLAIN ද සංඛ්යාවක් මුද්රණය කරයි, නමුත් එය සර්වරය නිපදවන අතර සේවාලාභියාගේ රැඳී සිටීම බැහැර කරයි. සංඛ්යා දෙකක්, වෙනස් ප්රශ්න දෙකක්.
එක් සැසියක් අරඹන්න, කාල මැනීම සක්රීයව තබන්න, සහ ඔබට වැදගත් ප්රකාශය එහි ඇතුළතින් ධාවනය කරන්න. සැසියක් නැවත භාවිත කිරීම සම්බන්ධතා වියදම පළමු මැනීමෙන් පිටත තබයි.
psql "host=db.internal port=5432 dbname=appdb user=app" \
-c "\timing on" \
-c "select count(*) from orders where created_at > now() - interval '1 day';"සංඛ්යාව තවමත් ප්රතිඵලයේ මාරු කිරීම ඇතුළත් කරයි, එය මෙහි ඔබට අවශ්ය දෙයයි. නව ඇමතුමක් එකතු කරන සම්බන්ධතා සහ සත්යාපන හුවමාරුව එය තවදුරටත් ඇතුළත් නොකරයි.
එක් ප්රකාශයක් මාර්ග තුනකින් සසඳන්න
එම ප්රකාශය Unix සොකටය, LAN ලිපිනය සහ VPN සත්කාරක නාමය හරහා ධාවනය කර තුන සසඳන්න. අවසාන එක පමණක් මන්දගාමී නම්, විමසුම විචල්යය නොවේ.
සෑම ඇමතුමක්ම මුලින්ම සම්බන්ධ වී පසුව පමණක් ප්රකාශය මනියි, එබැවින් සම්බන්ධතා වියදම සංඛ්යාවෙන් පිටත රැඳේ, මාරු කිරීම ඇතුළත රැඳේ. WHERE වාක්යාංශය, පේළි ගණන සහ සේවාලාභී යන්ත්රය සමානව තබන්න, එසේ නොවුනහොත් ඔබ සසඳන්නේ මාර්ග නොව කාර්ය බරයි.
psql -h /var/run/postgresql -U app -d appdb -c "\timing on" -c "select count(*) from orders;"
psql -h 10.40.0.12 -U app -d appdb -c "\timing on" -c "select count(*) from orders;"
psql -h db.vpn.internal -U app -d appdb -c "\timing on" -c "select count(*) from orders;"LAN තුළ වෙනස සාමාන්යයෙන් නොසලකා හැරීමට තරම් කුඩාය; VPN හරහා බොහෝ විට එසේ නොවේ. ප්රතිඵල තුන පිළිවෙළට තැබීම පසුව කුමන රැඳී සිටීමට පහර දෙන්නේදැයි කියයි.
මන්දගාමී දේශීය සොකටය යනු සර්වරයේ කාර්යය හෝ සැලසුමයි. මන්දගාමී LAN ප්රතිඵලය යනු විමසුම හෝ එය ගෙන යන පරිමාවයි. VPN ප්රතිඵලය පමණක් මන්දගාමී වීම යනු මාර්ගයේ ප්රමාදය, MTU හෝ ලබා ගත හැකි කලාප පළලයි, සහ කිසිදු සුචි වෙනසක් එය නිවැරදි නොකරයි.
සර්වරයේම ක්රියාත්මක කිරීමේ කාලය ගන්න
සර්වරයට කොපමණ කාලයක් ගත කළේදැයි වාර්තා කළ හැක, සහ සේවාලාභියාගේ සංඛ්යාව සමඟ සැසඳිය යුතු සංඛ්යාව එයයි. ANALYZE සමඟ EXPLAIN ප්රකාශය ධාවනය කර සැලසුම තුළ සැලසුම් සහ ක්රියාත්මක කිරීමේ කාලය මුද්රණය කරයි, BUFFERS මඟින් උණුසුම් ධාවනයක් සිසිල් එකකට වෙනස් කරන හැඹිලි හැසිරීම එකතු කරයි. ලිවීමට අදහසක් නැත්නම් එය ලිවීමේ ප්රකාශ වෙත නොයොමු කරන්න. කියවීමට පමණක් වන පිටපතක ආරම්භ කිරීමට වඩාත් ආරක්ෂිතම ස්ථානය එයයි, සහ psql යොමුව කාල මාපකයේ සේවාලාභී පැත්තේ විෂය පථය ලේඛනගත කරයි.
යෙදුම දැනටමත් ධාවනය කරන ප්රකාශ සඳහා, pg_stat_statements කිසිවක් නැවත ධාවනය නොකර සර්වර් පැත්තේ ක්රියාත්මක කිරීම එක්රැස් කරයි. පේළි සාමාන්යකරණය කළ විමසුමකට වේ, එබැවින් එක් සටහනක් ඇමතුම් ස්ථාන කිහිපයක් ආවරණය කළ හැක.
select calls, round(mean_exec_time::numeric, 2) as mean_ms, rows
from pg_stat_statements
order by mean_exec_time desc
limit 5;තීරු නාම නිකුතුව අනුව වෙනස් වේ: PostgreSQL 13 සහ ඉන් පසු mean_exec_time ලබා දෙයි, පැරණි අනුවාද එය mean_time ලෙස හඳුන්වයි, එබැවින් පරීක්ෂා කරන්න \d pg_stat_statements සමඟ, එම විමසුම දෝෂයක් දෙන්නේ නම්. මෙම අගයන් සැලසුම් කිරීම බැහැර කරයි, ඔබේ සේවාලාභියා දක්වා ගමන ද බැහැර කරයි. එම බැහැර කිරීම නිසාම ඒවා සංසන්දනයට ප්රයෝජනවත් වේ.
යාම-පැමිණීම් ගණන් කරන්න, මිලි තත්පර පමණක් නොවේ
කුඩා යැපෙන ප්රකාශ දෙසියයකින් ගොඩනගන ලද වාර්තාවක් මාර්ගය එකතු කරන ඕනෑම ප්රමාදයක් දෙසියයෙන් ගුණ කරයි. මිලියනයක් පේළි ආපසු දෙන එක් ප්රකාශයක් එම ප්රමාදය එක් වරක් ගෙවා පසුව දිගු කාලයක් කලාප පළල ගෙවයි. දෙකම සේවාලාභී කාල මාපකයේ එකම ලෙස පෙනේ, සහ දෙකටම ප්රතිවිරුද්ධ නිවැරදි කිරීම් අවශ්ය වේ.
ප්රකාශ ගණන ඇස්තමේන්තු නොකර මනින්න. එකතුව කියවන්න, වාර්තාව එක් වරක් ධාවනය කරන්න, පසුව නැවත කියවා අඩු කරන්න.
select sum(calls) as calls from pg_stat_statements;
-- run the report here
select sum(calls) as calls from pg_stat_statements;ඩෙල්ටාව විශාල නම් සහ සර්වරයේ සෑම ප්රකාශයක්ම ලාභදායී නම්, කණ්ඩායම් කිරීම ප්රතිඵල දෙන නිවැරදි කිරීමයි. යැපෙන විමසුම් එකතු කරන්න, කට්ටල පාදක එක් ප්රකාශයක් භාවිත කරන්න, නැතහොත් කර්සරයකින් ලූපය ධාවනය කරන්න. අන්තර්ක්රියාකාරී psql තුළ, \set FETCH_COUNT 1000 විශාල ප්රතිඵලයක් කණ්ඩායම් වශයෙන් පැමිණීමට සලස්වා මාරු කිරීම සහ සේවාලාභී මතකයේ හැසිරීම වෙනස් කරයි. එය සර්වරයේ කාර්යය අඩු නොකරයි, එබැවින් මන්දගාමී විමසුමක් බේරා නොගනී.
නැවත සම්ප්රේෂණ සහ MTU නැවතුම් සඳහා උමග පරීක්ෂා කරන්න
කුඩා ප්රකාශ වේගවත් වන අතර විශාල ප්රතිඵල අඩක් මග නතර වන විට, විමසුම සාමාන්යයෙන් හොඳින් ඇති අතර මාර්ගය නොවේ. පාදක සබැඳියට වඩා අඩු MTU ඇති උමගක්, අවහිර කළ ICMP සමඟ එකතු වන විට, එම රටාවම නිපදවයි: පළමු ඇතිරිලි පැමිණේ, විශාල ඒවා අතුරුදහන් වේ, සහ මාරු කිරීම නැවත උත්සාහ කරන තෙක් එල්ලී තිබේ. සේවාලාභී පැත්තේ නැවත සම්ප්රේෂණ ගණකයන් එය පෙන්වයි.
හිතාමතා මන්දගාමී මාරු කිරීමක් ධාවනය වන අතරතුර සොකටය සහ කර්නල ගණකයන් නරඹන්න. නැවත සම්ප්රේෂණ එකතු සංචිත වේ, එබැවින් එක් නියැදියක් කියවනවාට වඩා පෙර සහ පසු සටහන් කරන්න.
ss -tin dst 10.40.0.12
netstat -s | grep -iE "retransmit|segments retransmitted"
ping -M do -s 1400 -c 3 10.40.0.12මාරු කිරීම අතරතුර ඉහළ යන නැවත සම්ප්රේෂණ, 1400 බයිටවලදී සාර්ථක වී 1472 දී අසාර්ථක වන ping සමඟ, දත්ත සමුදායේ ගැටලුවක් නොව MTU ගැටලුවක් පෙන්වයි. උමග අතුරුමුහුණතේ MTU අඩු කිරීම හෝ ගේට්වේවලදී MSS තද කිරීම සාමාන්ය නිවැරදි කිරීමයි, සහ එම ඇණවුම් තුන පසුව එය තහවුරු කරයි. මාරු කිරීම තවමත් මන්දගාමීව ඇති විට නැවත සම්ප්රේෂණ පැතලිව පවතී නම්, හානියට නොව උමගට ලබා දී ඇති කලාප පළල දෙස බලන්න.
කෙටි අනුපිළිවෙළක් ඊළඟ මන්දගාමී වාර්තාව ආවරණය කරයි: එක් ප්රකාශයක් දේශීයව, LAN තුළ සහ VPN හරහා සසඳන්න; EXPLAIN හෝ pg_stat_statements වෙතින් සර්වර් ක්රියාත්මක කිරීම කියවන්න; එක් වරක් ධාවනය කිරීමට පෙර සහ පසු ඇමතුම් ගණන් කරන්න; සහ විශාල ප්රතිඵලය චලනය වන අතරතුර නැවත සම්ප්රේෂණ නරඹන්න. සෑම පියවරක්ම මාර්ගයේ එක් පැත්තක් බැහැර කරයි. ඒවායින් කිසිවක් කුමන අංගය නැවත ආරම්භ කරන්නේදැයි අනුමාන කිරීමට ඉල්ලා නොසිටියි.