{"id":2551,"date":"2024-01-02T11:25:13","date_gmt":"2024-01-02T05:55:13","guid":{"rendered":"https:\/\/bentocase.tanshcreative.com\/?p=2551"},"modified":"2026-08-28T09:54:17","modified_gmt":"2026-08-28T09:54:17","slug":"postgresql-wal-flow-membedah-jantung-durabilitas-dan-rahasia-zero-data-loss-rpo-0","status":"publish","type":"post","link":"https:\/\/agussyarif.my.id\/index.php\/2024\/01\/02\/postgresql-wal-flow-membedah-jantung-durabilitas-dan-rahasia-zero-data-loss-rpo-0\/","title":{"rendered":"PostgreSQL WAL Flow: Membedah &#8220;Jantung&#8221; Durabilitas dan Rahasia Zero Data Loss (RPO 0)"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"2551\" class=\"elementor elementor-2551\">\n\t\t\t\t<div class=\"elementor-element elementor-element-615fc7ef e-flex e-con-boxed e-con e-parent\" data-id=\"615fc7ef\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-79658eaf elementor-widget elementor-widget-text-editor\" data-id=\"79658eaf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span class=\"\">Dalam dunia manajemen database skala <\/span><i class=\"\" data-path-to-node=\"3\" data-index-in-node=\"37\">enterprise<\/i><span class=\"\">,<\/span><span class=\"\"> integritas data adalah harga mati.<\/span><span class=\"\"> Sebagai seorang Senior Database Engineer yang telah berkecimpung lebih dari 5 tahun mengelola sistem <\/span><i class=\"\" data-path-to-node=\"3\" data-index-in-node=\"188\">mission-critical<\/i><span class=\"\">,<\/span><span class=\"\"> saya sering dihadapkan pada pertanyaan fundamental:<\/span> <i class=\"\" data-path-to-node=\"3\" data-index-in-node=\"258\">&#8220;Bagaimana PostgreSQL menjamin data yang baru saja di-COMMIT tidak hilang saat server tiba-tiba mati?&#8221;<\/i><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1632e0b1 elementor-widget elementor-widget-spacer\" data-id=\"1632e0b1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-598668f7 elementor-widget elementor-widget-text-editor\" data-id=\"598668f7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span class=\"\">Jawabannya bukan sihir,<\/span><span class=\"\"> melainkan sebuah mekanisme arsitektur yang elegan dan sangat ketat yang disebut <\/span><b class=\"\" data-path-to-node=\"4\" data-index-in-node=\"104\">Write-Ahead Logging (WAL)<\/b><span class=\"\">.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-614167c7 elementor-widget elementor-widget-text-editor\" data-id=\"614167c7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span class=\"\">Pahami arsitektur ini,<\/span><span class=\"\"> maka kita akan memahami bagaimana PostgreSQL menyeimbangkan performa tinggi dengan keamanan data mutlak.<\/span><span class=\"\"> Mari kita bedah diagram arsitektur internal yang saya buat.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-25d59e6 elementor-widget elementor-widget-spacer\" data-id=\"25d59e6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2c570d90 elementor-widget elementor-widget-dtr-quote\" data-id=\"2c570d90\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"dtr-quote.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"dtr-quote dtr-quote__left-align clearfix\"><blockquote>\u201cDi dunia enterprise, integritas data adalah harga mati. Memahami anatomi Write-Ahead Logging (WAL) pada PostgreSQL bukanlah sekadar tentang tuning performa, melainkan seni menyeimbangkan kecepatan akses aplikasi dengan jaminan Zero Data Loss saat bencana terburuk terjadi.\u201d<\/blockquote><p class=\"dtr-quote__author\">Agus Syarif<\/p><span class=\"dtr-quote__source\">Senior Database Engineer<\/span><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-12f95330 elementor-widget elementor-widget-spacer\" data-id=\"12f95330\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7512b086 elementor-widget elementor-widget-image\" data-id=\"7512b086\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/agussyarif.my.id\/wp-content\/uploads\/elementor\/thumbs\/Gemini_Generated_Image_ubyr2hubyr2hubyr-rskavo770ycl8326dvw4f0q1mxayjty0cv7rzk5kyg.jpg\" title=\"WAL Processing &#038; Replication Flow\" alt=\"WAL Processing &amp; Replication Flow\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Gambar 2 : WAL Processing &amp; Replication Flow<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5da7b779 elementor-widget elementor-widget-text-editor\" data-id=\"5da7b779\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h5 data-path-to-node=\"7\">Arsitektur Internal: Perjalanan Sebuah Query DML<\/h5><p data-path-to-node=\"8\"><span class=\"\">Mari kita telusuri arus data saat sebuah aplikasi klien mengeksekusi <\/span><i class=\"\" data-path-to-node=\"8\" data-index-in-node=\"69\">Query Writes<\/i><span class=\"\"> (DML) seperti <\/span><code class=\"\" data-path-to-node=\"8\" data-index-in-node=\"96\">INSERT<\/code><span class=\"\"> atau <\/span><code class=\"\" data-path-to-node=\"8\" data-index-in-node=\"108\">UPDATE<\/code><span class=\"\">.<\/span><span class=\"\"> (Ikuti alur warna Merah,<\/span><span class=\"\"> Ungu,<\/span><span class=\"\"> dan Hijau pada diagram simulasi di gambar pertama).<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-48ed782e elementor-widget elementor-widget-text-editor\" data-id=\"48ed782e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h5 data-path-to-node=\"9\">Fase 1: Operasi Cepat di Lapisan RAM (Volatile)<\/h5><p data-path-to-node=\"10\"><span class=\"\">Saat query DML (seperti <\/span><code class=\"\" data-path-to-node=\"10\" data-index-in-node=\"24\">BEGIN; INSERT... COMMIT;<\/code><span class=\"\">) dieksekusi,<\/span><span class=\"\"> perutean pertama kali ditangani oleh <\/span><b class=\"\" data-path-to-node=\"10\" data-index-in-node=\"99\">Backend Process<\/b><span class=\"\">.<\/span><span class=\"\"> Alih-alih langsung menulis ke <\/span><i class=\"\" data-path-to-node=\"10\" data-index-in-node=\"146\">storage<\/i><span class=\"\"> (yang lambat),<\/span><span class=\"\"> PostgreSQL melakukan operasi di <\/span><b class=\"\" data-path-to-node=\"10\" data-index-in-node=\"201\">RAM \/ Memory Layer<\/b><span class=\"\">.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8efa315 elementor-widget elementor-widget-dtr-icon-list\" data-id=\"8efa315\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"dtr-icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t        <ul class=\"dtr-icon-list\">\r\n                            <li class=\"dtr-icon-list__list-item\">\r\n                                        <span class=\"dtr-icon dtr-icon-list__icon\">\r\n                                        \t<i class=\"icon-circle-half\"><\/i>\r\n                                        <\/span>\r\n                     <span class=\"dtr-icon-list__list-text\">DML Query (Alur Merah): Query modifikasi data tertulis ke Shared Buffers (Cache: Data Pages). Halaman data di RAM ini kini berstatus \"Dirty Pages\" (dimodifikasi tapi belum sinkron dengan disk).<\/span>\r\n                                    <\/li>\r\n                            <li class=\"dtr-icon-list__list-item\">\r\n                                        <span class=\"dtr-icon dtr-icon-list__icon\">\r\n                                        \t<i class=\"icon-circle-half\"><\/i>\r\n                                        <\/span>\r\n                     <span class=\"dtr-icon-list__list-text\">WAL Flush (Alur Ungu - Durabilitas Segera): Secara bersamaan, catatan perubahan (Transaction Logs) tertulis ke WAL Buffers.<\/span>\r\n                                    <\/li>\r\n                    <\/ul>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2d165fa elementor-widget elementor-widget-text-editor\" data-id=\"2d165fa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p data-path-to-node=\"9\"><span class=\"\">Di sinilah aturan emas &#8220;Write-Ahead&#8221; berlaku:<\/span> <b class=\"\" data-path-to-node=\"12\" data-index-in-node=\"46\">Transaction logs MUST be flushed to disk before Dirty Pages.<\/b><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-045e5dd elementor-widget elementor-widget-spacer\" data-id=\"045e5dd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a4fb903 elementor-widget elementor-widget-text-editor\" data-id=\"a4fb903\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h5 data-path-to-node=\"13\">Fase 2: Durabilitas Mutlak (flush ke Storage Layer)<\/h5><p data-path-to-node=\"14\"><span class=\"\">Sistem belum bisa dianggap aman hingga data tertulis secara persisten ke <\/span><b class=\"\" data-path-to-node=\"14\" data-index-in-node=\"73\">Storage Layer<\/b><span class=\"\">.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6b8d854 elementor-widget elementor-widget-dtr-icon-list\" data-id=\"6b8d854\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"dtr-icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t        <ul class=\"dtr-icon-list\">\r\n                            <li class=\"dtr-icon-list__list-item\">\r\n                                        <span class=\"dtr-icon dtr-icon-list__icon\">\r\n                                        \t<i class=\"icon-circle-half\"><\/i>\r\n                                        <\/span>\r\n                     <span class=\"dtr-icon-list__list-text\">Fast Path ( Purple Flow - Jaminan Commit): Pada saat COMMIT dieksekusi, proses WAL Writer segera terbangun. Ia melakukan sinkronisasi paksa (Sync flush) dari WAL Buffers ke WAL Files (Write-Ahead Logs di direktori pg_wal) di disk storage, Mengapa ini cepat? Menulis WAL bersifat sequential (berurutan), jauh lebih cepat daripada menulis random ke Data Files. Begitu WAL tertulis secara persisten ke disk, PostgreSQL mengonfirmasi ke aplikasi klien bahwa transaksi berhasil (durabilitas terjamin).<\/span>\r\n                                    <\/li>\r\n                            <li class=\"dtr-icon-list__list-item\">\r\n                                        <span class=\"dtr-icon dtr-icon-list__icon\">\r\n                                        \t<i class=\"icon-circle-half\"><\/i>\r\n                                        <\/span>\r\n                     <span class=\"dtr-icon-list__list-text\">Lazy Path (Green Flow - Optimasi Performa): Operasi penulisan \"Dirty Pages\" (Halaman Data) sesungguhnya dari Shared Buffers ke Data Files (Heap & Indexes di pg_data) tidak dilakukan segera saat COMMIT. Proses ini dilakukan secara santai (Lazy data flush) oleh BGWriter\/Checkpointer untuk mencegah bottleneck performa I\/O.<\/span>\r\n                                    <\/li>\r\n                    <\/ul>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-43d1a16 elementor-widget elementor-widget-text-editor\" data-id=\"43d1a16\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p data-path-to-node=\"27\"><span class=\"\">Sebagai penutup,<\/span><span class=\"\"> arsitektur yang saya paparkan ini adalah hasil dari kompromi cerdas antara performa dan keamanan:<\/span><\/p><ol><li data-path-to-node=\"28,0,0\"><b class=\"\" data-path-to-node=\"28,0,0\" data-index-in-node=\"0\">Lokal:<\/b><span class=\"\"> Kita kompromi sedikit performa menulis (menulis WAL Sequential) untuk durabilitas data mutlak lokal.<\/span><\/li><li data-path-to-node=\"28,0,0\"><b class=\"\" data-path-to-node=\"28,1,0\" data-index-in-node=\"0\">Lokal HA:<\/b><span class=\"\"> Kita kompromi sedikit latensi jaringan (nunggu ACK lokal) untuk Zero Data Loss lokal.<\/span><\/li><li data-path-to-node=\"28,0,0\"><b class=\"\" data-path-to-node=\"28,2,0\" data-index-in-node=\"0\">Global DR:<\/b><span class=\"\"> Kita kompromi potensi data loss kecil di DRC untuk performaPrimary transaksi yang maksimal di Data Center utama.<\/span><\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0104ae5 e-flex e-con-boxed e-con e-parent\" data-id=\"0104ae5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Dalam dunia manajemen database skala enterprise, integritas data adalah harga mati. Sebagai seorang Senior Database Engineer yang telah berkecimpung lebih dari 5 tahun mengelola sistem mission-critical, saya sering dihadapkan pada pertanyaan fundamental: &#8220;Bagaimana PostgreSQL menjamin data yang baru saja di-COMMIT tidak hilang saat server tiba-tiba mati?&#8221; Jawabannya bukan sihir, melainkan sebuah mekanisme arsitektur yang elegan [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4354,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[36],"tags":[56,15,55],"class_list":["post-2551","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprisearchitecture","tag-replication-flow","tag-technical","tag-wal-processing"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/agussyarif.my.id\/index.php\/wp-json\/wp\/v2\/posts\/2551","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/agussyarif.my.id\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/agussyarif.my.id\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/agussyarif.my.id\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/agussyarif.my.id\/index.php\/wp-json\/wp\/v2\/comments?post=2551"}],"version-history":[{"count":28,"href":"https:\/\/agussyarif.my.id\/index.php\/wp-json\/wp\/v2\/posts\/2551\/revisions"}],"predecessor-version":[{"id":4382,"href":"https:\/\/agussyarif.my.id\/index.php\/wp-json\/wp\/v2\/posts\/2551\/revisions\/4382"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/agussyarif.my.id\/index.php\/wp-json\/wp\/v2\/media\/4354"}],"wp:attachment":[{"href":"https:\/\/agussyarif.my.id\/index.php\/wp-json\/wp\/v2\/media?parent=2551"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/agussyarif.my.id\/index.php\/wp-json\/wp\/v2\/categories?post=2551"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/agussyarif.my.id\/index.php\/wp-json\/wp\/v2\/tags?post=2551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}