කම්මැලියන් සඳහා උත්ශ්‍රේණි කරන්න: PostgreSQL 12 කාර්ය සාධනය වැඩි දියුණු කරන ආකාරය

කම්මැලියන් සඳහා උත්ශ්‍රේණි කරන්න: PostgreSQL 12 කාර්ය සාධනය වැඩි දියුණු කරන ආකාරය

PostgreSQL 12, "ලෝකයේ හොඳම විවෘත මූලාශ්‍ර සම්බන්ධතා දත්ත ගබඩාව" හි නවතම අනුවාදය සති කිහිපයකින් (සියල්ල සැලැස්මට අනුව සිදුවුවහොත්) එළියට එයි. මෙය වසරකට වරක් නව විශේෂාංග ටොන් ගණනක් සහිත නව අනුවාදයක් නිකුත් කිරීමේ සුපුරුදු කාලසටහන අනුගමනය කරන අතර, අවංකවම, එය සිත් ඇදගන්නා සුළුය. ඒ නිසා තමයි මම PostgreSQL ප්‍රජාවේ ක්‍රියාකාරී සාමාජිකයෙක් වුණේ.

මගේ මතය අනුව, පෙර නිකුතු මෙන් නොව, PostgreSQL 12 හි විප්ලවීය විශේෂාංග එකක් හෝ දෙකක් අඩංගු නොවේ (කොටස් කිරීම හෝ සමාන්තරකරණය වැනි). මම වරක් විහිළුවක් කළා PostgreSQL 12 හි ප්‍රධාන ලක්ෂණය වැඩි ස්ථාවරත්වයක් බව. ඔබ ඔබේ ව්‍යාපාරයේ තීරණාත්මක දත්ත කළමනාකරණය කරන විට ඔබට අවශ්‍ය වන්නේ එය නොවේද?

නමුත් PostgreSQL 12 එතැනින් නතර නොවේ: නව විශේෂාංග සහ වැඩිදියුණු කිරීම් සමඟ, යෙදුම් වඩා හොඳින් ක්‍රියා කරයි, සහ ඔබ කළ යුත්තේ උත්ශ්‍රේණි කිරීම පමණි!

(හොඳයි, සමහර විට දර්ශක නැවත ගොඩනඟන්න, නමුත් මෙම නිකුතුවේදී එය අප පුරුදු වී ඇති තරම් බියජනක නොවේ.)

PostgreSQL උත්ශ්‍රේණි කිරීම සහ අනවශ්‍ය කලබලයකින් තොරව සැලකිය යුතු වැඩිදියුණු කිරීම් වහාම භුක්ති විඳීම ඉතා හොඳ වනු ඇත. මීට වසර කිහිපයකට පෙර, මම PostgreSQL 9.4 සිට PostgreSQL 10 වෙත යාවත්කාලීන කිරීමක් සමාලෝචනය කළ අතර PostgreSQL 10 හි වැඩිදියුණු කළ විමසුම් සමාන්තරකරණයට ස්තූතිවන්ත වන්නට යෙදුම වේගවත් වන ආකාරය දුටුවෙමි. තවද, වඩාත්ම වැදගත් දෙය නම්, මගෙන් කිසිවක් අවශ්‍ය නොවීය (වින්‍යාස කිරීමේ පරාමිතියක් සකසන්න. max_parallel_workers).

එකඟ වන්න, යාවත්කාලීන කිරීමෙන් පසු යෙදුම් වඩා හොඳින් ක්‍රියා කරන විට එය පහසු වේ. තවද PostgreSQL ට ඒවා වැඩි වැඩියෙන් ඇති නිසා අපි පරිශීලකයින් සතුටු කිරීමට ඉතා වෙහෙසෙමු.

ඉතින් PostgreSQL 12 වෙත සරල උත්ශ්‍රේණිගත කිරීමක් ඔබව සතුටු කරන්නේ කෙසේද? මම දැන් කියන්නම්.

ප්රධාන සුචිගත කිරීමේ වැඩිදියුණු කිරීම්

සුචිගත කිරීමකින් තොරව, දත්ත සමුදායක් දුරදිග නොයනු ඇත. ඔබට ඉක්මනින් තොරතුරු සොයා ගත හැක්කේ කෙසේද? PostgreSQL හි මූලික සුචිගත කිරීමේ පද්ධතිය ලෙස හැඳින්වේ බී-ගස. මෙම වර්ගයේ දර්ශකය ගබඩා පද්ධති සඳහා ප්‍රශස්ත කර ඇත.

අපි සරලවම ක්රියාකරු භාවිතා කරමු CREATE INDEX ON some_table (some_column), සහ PostgreSQL අපි නිරතුරුවම අගයන් ඇතුලත් කරන, යාවත්කාලීන, සහ මකන අතරතුර දර්ශකය යාවත්කාලීනව තබා ගැනීමට බොහෝ වැඩ කරයි. මැජික් මගින් මෙන් සෑම දෙයක්ම තනිවම ක්රියා කරයි.

නමුත් PostgreSQL දර්ශක වලට එක් ගැටළුවක් ඇත - ඒවා පුම්බා ඇත අමතර තැටි ඉඩක් ලබාගෙන දත්ත ලබාගැනීමේ සහ යාවත්කාලීන කිරීමේ කාර්ය සාධනය අඩු කරයි. "බ්ලොට්" යන්නෙන් මා අදහස් කරන්නේ දර්ශක ව්‍යුහය අකාර්යක්ෂම ලෙස පවත්වා ගැනීමයි. මෙය ඉවත් කරන කසළ ටියුපල් හා සම්බන්ධ විය හැකිය - හෝ නොවිය හැකිය වකුටු (තොරතුරු සඳහා පීටර් ගගන්ට ස්තූතියි)පීටර් ජෝහේගන්)) දර්ශකය සක්‍රියව වෙනස් වන වැඩ බර වලදී දර්ශක ඉදිමීම විශේෂයෙන් කැපී පෙනේ.

PostgreSQL 12 B-tree දර්ශකවල ක්‍රියාකාරිත්වය බෙහෙවින් වැඩි දියුණු කරන අතර, TPC-C වැනි මිණුම් සලකුණු සමඟ අත්හදා බැලීම් සාමාන්‍යයෙන් 40% අඩු ඉඩක් දැන් භාවිතා වන බව පෙන්වා දී ඇත. දැන් අපි B-tree indexs නඩත්තු කිරීමට (එනම්, ලිවීමේ මෙහෙයුම් සඳහා) පමණක් නොව, දත්ත ලබා ගැනීම සඳහා අඩු කාලයක් ගත කරමු, මන්ද දර්ශක ඉතා කුඩා බැවින්.

ඔවුන්ගේ වගු සක්‍රියව යාවත්කාලීන කරන යෙදුම් - සාමාන්‍යයෙන් OLTP යෙදුම් (තත්‍ය කාලීන ගනුදෙනු සැකසීම) - තැටි සහ සැකසුම් ඉල්ලීම් වඩාත් කාර්යක්ෂමව භාවිතා කරනු ඇත. තැටියේ ඉඩ වැඩි වන තරමට, යටිතල පහසුකම් වැඩිදියුණු නොකර දත්ත සමුදාය වර්ධනය වීමට වැඩි ඉඩක් ඇත.

සමහර උත්ශ්‍රේණිගත කිරීමේ ක්‍රමෝපායන්ට මෙම ප්‍රතිලාභවලින් ප්‍රයෝජන ගැනීමට B-tree index නැවත ගොඩනැගීම අවශ්‍ය වේ (උදා. pg_upgrade දර්ශක ස්වයංක්‍රීයව නැවත ගොඩනඟන්නේ නැත). PostgreSQL හි පෙර අනුවාද වල, වගු මත විශාල දර්ශක නැවත ගොඩ නැගීම මේ අතරතුර වෙනස්කම් සිදු කිරීමට නොහැකි වූ නිසා සැලකිය යුතු අක්‍රීය කාලයක් ඇති විය. නමුත් PostgreSQL 12 හි තවත් අපූරු අංගයක් ඇත: දැන් ඔබට විධානයට සමාන්තරව දර්ශක නැවත ගොඩනගා ගත හැකිය. REINDEX සමගාමීවඅක්රිය කාලය සම්පූර්ණයෙන්ම වළක්වා ගැනීමට.

PostgreSQL 12 හි සුචිගත කිරීමේ යටිතල පහසුකම් සඳහා වෙනත් වැඩිදියුණු කිරීම් තිබේ. මැජික් එකක් තිබූ තවත් දෙයක් - ඉදිරියට ලියන්න, හෙවත් WAL (ලියන්න-ඉදිරියට ලොගය). ඉදිරියට ලිවීමේ ලඝු-සටහනක් අසාර්ථක වූ විට සහ අනුවර්තනය වූ විට PostgreSQL හි සෑම ගනුදෙනුවක්ම වාර්තා කරයි. යෙදුම් එය සංරක්ෂණය සඳහා භාවිතා කරයි කාලය තුළ යථා තත්ත්වයට පත්වීම. ඇත්ත වශයෙන්ම, ඉදිරියට ලිවීමේ ලොගය තැටියට ලියා ඇත, එය කාර්ය සාධනයට බලපෑම් කළ හැකිය.

PostgreSQL 12 විසින් දර්ශක ගොඩනැගීමේදී GiST, GIN, සහ SP-GiST දර්ශක මගින් නිර්මාණය කරන ලද WAL වාර්තා වල පොදු කාර්ය අඩු කර ඇත. මෙය ප්‍රත්‍යක්ෂ ප්‍රතිලාභ කිහිපයක් සපයයි: WAL වාර්තා අඩු තැටි ඉඩ ප්‍රමාණයක් ගනී, සහ ආපදා ප්‍රතිසාධනය හෝ ලක්ෂ්‍ය-කාලීන ප්‍රතිසාධනය වැනි දත්ත වේගයෙන් නැවත ධාවනය වේ. ඔබ ඔබේ යෙදුම්වල එවැනි දර්ශක භාවිතා කරන්නේ නම් (උදාහරණයක් ලෙස, PostGIS මත පදනම් වූ භූගෝලීය යෙදුම් බොහෝ විට GiST දර්ශකය භාවිතා කරයි), මෙය ඔබේ පැත්තෙන් කිසිදු උත්සාහයකින් තොරව අත්දැකීම් සැලකිය යුතු ලෙස වැඩිදියුණු කරන තවත් විශේෂාංගයකි.

කොටස් කිරීම - විශාල, වඩා හොඳ, වේගවත්

PostgreSQL 10 හඳුන්වා දෙන ලදී ප්රකාශිත කොටස් කිරීම. PostgreSQL 11 හි එය භාවිතා කිරීම වඩාත් පහසු වී ඇත. PostgreSQL 12 හි ඔබට කොටස් පරිමාණය වෙනස් කළ හැකිය.

PostgreSQL 12 හි, කොටස් කිරීමේ පද්ධතියේ ක්‍රියාකාරිත්වය සැලකිය යුතු ලෙස වඩා හොඳ වී ඇත, විශේෂයෙන් වගුවේ කොටස් දහස් ගණනක් තිබේ නම්. උදාහරණයක් ලෙස, විමසුමක් බලපාන්නේ ඒවා දහස් ගණනක් සහිත වගුවක කොටස් කිහිපයකට පමණක් නම්, එය වඩා වේගයෙන් ක්‍රියාත්මක වේ. මෙම ආකාරයේ විමසුම් සඳහා පමණක් කාර්ය සාධනය වැඩි දියුණු නොවේ. බහුවිධ කොටස් සහිත වගු මත INSERT මෙහෙයුම් කෙතරම් වේගවත් දැයි ඔබ දකීවි.

භාවිතා කරමින් දත්ත පටිගත කිරීම COPY - මාර්ගය වන විට, මෙය විශිෂ්ට ක්රමයකි තොග දත්ත බාගත කිරීම සහ මෙන්න උදාහරණයක් JSON ලබා ගැනීම - PostgreSQL 12 හි කොටස් කරන ලද වගු ද වඩාත් කාර්යක්ෂම වී ඇත. COPY සමඟ සෑම දෙයක්ම දැනටමත් වේගවත් විය, නමුත් PostgreSQL 12 හි එය නියත වශයෙන්ම පියාසර කරයි.

මෙම වාසි වලට ස්තූතිවන්ත වන්නට, PostgreSQL ඔබට ඊටත් වඩා විශාල දත්ත කට්ටල ගබඩා කිරීමට සහ ඒවා පහසුවෙන් ලබා ගැනීමට ඉඩ සලසයි. ඒ වගේම ඔබේ පැත්තෙන් කිසිම උත්සාහයක් නැහැ. යෙදුමට කාල ශ්‍රේණි දත්ත පටිගත කිරීම වැනි බොහෝ කොටස් තිබේ නම්, සරල උත්ශ්‍රේණි කිරීම එහි ක්‍රියාකාරිත්වය සැලකිය යුතු ලෙස වැඩි දියුණු කරයි.

මෙය හරියටම "උත්ශ්‍රේණි කිරීම සහ භුක්ති විඳීම" වැඩිදියුණු කිරීමක් නොවන අතර, PostgreSQL 12 මඟින් ඔබට කොටස් කරන ලද වගු යොමු කරන විදේශීය යතුරු නිර්මාණය කිරීමට ඉඩ සලසයි, කොටස් කිරීම සමඟ වැඩ කිරීම සතුටක්.

විමසුම් සමඟ දැන් බොහෝ හොඳ වී ඇත

කවදාද? ගොඩනඟන ලද පොදු වගු ප්‍රකාශන සඳහා පැච් එකක් යොදන ලදී (එනම් CTE, aka විමසුම් සමඟ), මම ගැන ලිපියක් ලිවීමට බලා සිටිය නොහැකි විය PostgreSQL සමඟ යෙදුම් සංවර්ධකයින් කෙතරම් සතුටු විය. මෙය යෙදුම වේගවත් කරන විශේෂාංග වලින් එකකි. ඇත්ත වශයෙන්ම, ඔබ CTE භාවිතා කරන්නේ නම් මිස.

SQL වෙත නවකයන් CTE භාවිතා කිරීමට ප්‍රිය කරන බව මට බොහෝ විට පෙනී යයි; ඔබ ඒවා යම් ආකාරයකට ලියන්නේ නම්, ඔබ අනිවාර්ය වැඩසටහනක් ලියන බවක් හැඟේ. පුද්ගලිකව, මම මෙම විමසුම් නැවත ලිවීමට කැමති විය තොරව CTE සහ ඵලදායිතාව වැඩි කිරීම. දැන් සියල්ල වෙනස් ය.

PostgreSQL 12 ඔබට අතුරු ආබාධ නොමැතිව නිශ්චිත CTE වර්ගයක් සම්බන්ධ කිරීමට ඉඩ සලසයි (SELECT), එය ඉල්ලීමේ අවසානයට ආසන්නව එක් වරක් පමණක් භාවිතා වේ. මා නැවත ලියූ CTE විමසුම් පිළිබඳව සටහන් තබා ගත්තේ නම්, ඒවායින් බොහොමයක් මෙම ගණයට වැටෙනු ඇත. මෙය සංවර්ධකයින්ට දැන් ඉක්මනින් ක්‍රියාත්මක වන පැහැදිලි කේතයක් ලිවීමට උදවු කරයි.

එපමනක් නොව, PostgreSQL 12 ඔබට කිසිවක් නොකර SQL ක්‍රියාත්මක කිරීම ප්‍රශස්ත කරයි. මට දැන් එවැනි විමසුම් ප්‍රශස්ත කිරීමට අවශ්‍ය නොවනු ඇතත්, PostgreSQL විමසුම් ප්‍රශස්තකරණය මත දිගටම ක්‍රියා කිරීම සතුටක්.

Just-in-Time (JIT) - දැන් පෙරනිමිය

සහාය ඇතිව PostgreSQL 12 පද්ධති මත එල්එල්වීඑම් JIT සම්පාදනය පෙරනිමියෙන් සක්‍රීය කර ඇත. පළමුවෙන්ම, ඔබට සහාය ලැබේ JIT සමහර අභ්‍යන්තර මෙහෙයුම් සඳහා, සහ දෙවනුව, තෝරාගත් ලැයිස්තු වල ප්‍රකාශන සහිත විමසුම් (සරලම උදාහරණය x + y) (ඔබට තෝරා ගැනීමෙන් පසුව ඇති), සමස්ථ, WHERE වගන්ති සහිත ප්‍රකාශන සහ අනෙකුත් කාර්ය සාධනය වැඩි දියුණු කිරීමට JIT භාවිතා කළ හැක.

PostgreSQL 12 හි පෙරනිමියෙන් JIT සක්‍රීය කර ඇති බැවින්, ක්‍රියාකාරීත්වය තනිවම වැඩි දියුණු වනු ඇත, නමුත් විමසුම් කාර්ය සාධනය මැනීමට සහ ඔබට යමක් සුසර කිරීමට අවශ්‍ය දැයි බැලීමට JIT හඳුන්වා දුන් PostgreSQL 11 හි යෙදුම පරීක්ෂා කිරීමට මම නිර්දේශ කරමි.

PostgreSQL 12 හි ඉතිරි නව විශේෂාංග ගැන කුමක් කිව හැකිද?

PostgreSQL 12 හි සම්මත SQL/JSON මාර්ග ප්‍රකාශන භාවිතයෙන් JSON දත්ත පරීක්ෂා කිරීමේ හැකියාවේ සිට පරාමිතියක් සහිත බහු-සාධක සත්‍යාපනය දක්වා සිසිල් නව විශේෂාංග රාශියක් ඇත. clientcert=verify-full, තීරු නිර්මාණය සහ තවත් බොහෝ දේ. වෙනම පෝස්ට් එකකට ඇති.

PostgreSQL 10 මෙන්ම, PostgreSQL 12 ද උත්ශ්‍රේණිගත වූ වහාම සමස්ත කාර්ය සාධනය වැඩි දියුණු කරයි. ඇත්ත වශයෙන්ම, ඔබට ඔබේම මාර්ගයක් තිබිය හැකිය - වැඩිදියුණු කිරීම් සක්‍රීය කිරීමට පෙර නිෂ්පාදන පද්ධතියේ සමාන කොන්දේසි යටතේ යෙදුම පරීක්ෂා කරන්න, මම PostgreSQL 10 සමඟ කළාක් මෙන්. PostgreSQL 12 දැනටමත් මා බලාපොරොත්තු වූවාට වඩා ස්ථායී වුවද, පරීක්ෂා කිරීමේදී කම්මැලි නොවන්න. ඒවා නිෂ්පාදනයට මුදා හැරීමට පෙර යෙදුම් තරයේ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න