“Adalah paradoks, namun benar, untuk mengatakan, bahwa semakin banyak kita tahu, semakin kita menjadi bodoh dalam arti absolut, karena hanya melalui pencerahan kita menjadi sadar akan keterbatasan kita. Justru salah satu hasil evolusi intelektual yang paling memuaskan adalah terbukanya prospek-prospek baru dan lebih besar secara terus-menerus.” Nikola Tesla
PostgreSQL adalah proyek yang luar biasa dan berkembang dengan kecepatan yang luar biasa. Kami akan fokus pada evolusi kemampuan toleransi kesalahan di PostgreSQL di seluruh versinya dengan serangkaian postingan blog.
Singkatnya PostgreSQL
PostgreSQL pada dasarnya toleran terhadap kesalahan. Pertama, ini adalah sistem manajemen basis data open source yang canggih dan akan merayakan ulang tahunnya yang ke-20 tahun ini. Oleh karena itu, ini adalah teknologi yang telah terbukti dan memiliki komunitas yang aktif, berkat kemajuan perkembangan yang pesat.
PostgreSQL sesuai dengan SQL (SQL:2011) dan sepenuhnya sesuai dengan ACID (atomisitas, konsistensi, isolasi, daya tahan).
PostgreSQL memungkinkan replikasi fisik dan logis dan memiliki solusi replikasi fisik dan logis bawaan. Kami akan berbicara tentang metode replikasi (pada posting blog berikutnya) di PostgreSQL mengenai toleransi kesalahan.
PostgreSQL memungkinkan transaksi sinkron dan asinkron, PITR (Pemulihan Point-in-time) dan MVCC (Kontrol konkurensi multiversi). Semua konsep ini terkait dengan toleransi kesalahan pada tingkat tertentu dan saya akan mencoba menjelaskan efeknya sambil menjelaskan istilah yang diperlukan dan aplikasinya di PostgreSQL.
PostgreSQL kuat!
Semua tindakan di database dilakukan dalam transaksi , dilindungi oleh log transaksi yang akan melakukan pemulihan kerusakan otomatis jika terjadi kegagalan perangkat lunak.
Basis data dapat dibuat secara opsional dengan checksum blok data untuk membantu mendiagnosis kesalahan perangkat keras. Terdapat beberapa mekanisme pencadangan, dengan PITR yang lengkap dan mendetail, jika diperlukan pemulihan mendetail. Berbagai alat diagnostik tersedia.
Replikasi database didukung secara native. Replikasi Sinkron dapat memberikan lebih dari “5 Sembilan” (99,999 persen) ketersediaan dan perlindungan data, jika dikonfigurasi dan dikelola dengan benar.
Mempertimbangkan fakta di atas, kita dapat dengan mudah mengklaim bahwa PostgreSQL kuat!
Toleransi Kesalahan PostgreSQL:WAL
Menulis di depan logging adalah sistem toleransi kesalahan utama untuk PostgreSQL.
WAL terdiri dari serangkaian file biner yang ditulis ke subdirektori pg_xlog dari direktori data PostgreSQL. Setiap perubahan yang dibuat ke database dicatat terlebih dahulu di WAL, oleh karena itu nama log "write-ahead", sebagai sinonim dari "log transaksi". Saat transaksi dilakukan, perilaku default—dan aman—adalah memaksa catatan WAL ke disk.
Jika PostgreSQL mogok, WAL akan diputar ulang, yang mengembalikan basis data ke titik transaksi terakhir yang dilakukan, dan dengan demikian memastikan ketahanan dari setiap perubahan basis data.
Transaksi? Berkomitmen?
Perubahan basis data itu sendiri tidak ditulis ke disk saat transaksi dilakukan. Perubahan tersebut ditulis ke disk beberapa saat kemudian oleh penulis latar belakang atau pemeriksa di server yang disetel dengan baik. (Periksa deskripsi WAL di atas. )
Transaksi adalah konsep dasar dari semua sistem basis data. Poin penting dari sebuah transaksi adalah menggabungkan beberapa langkah ke dalam satu operasi, semua atau tidak sama sekali.
Status perantara antara langkah-langkah tersebut tidak terlihat oleh transaksi bersamaan lainnya, dan jika beberapa kegagalan terjadi yang mencegah penyelesaian transaksi, maka tidak ada langkah yang memengaruhi database sama sekali. PostgreSQL tidak mendukung dirty-reads (transaksi membaca data yang ditulis oleh transaksi tanpa komitmen bersamaan ).
Pos pemeriksaan
Pemulihan kerusakan memutar ulang WAL, tetapi dari titik mana ia mulai pulih?
Pemulihan dimulai dari titik di WAL yang dikenal sebagai pos pemeriksaan . Durasi pemulihan kerusakan tergantung pada jumlah perubahan dalam log transaksi sejak pos pemeriksaan terakhir. Pos pemeriksaan adalah titik awal yang aman untuk pemulihan, karena menjamin bahwa semua perubahan sebelumnya ke database telah ditulis ke disk.
Pos pemeriksaan bisa langsung atau dijadwalkan . Pos pemeriksaan langsung dipicu oleh beberapa tindakan pengguna super, seperti CHECKPOINT
perintah atau lainnya; pos pemeriksaan terjadwal diputuskan secara otomatis oleh PostgreSQL.
Kesimpulan
Dalam posting blog ini kami mencantumkan fitur penting PostgreSQL yang terkait dengan toleransi kesalahan di PostgreSQL. Kami menyebutkan pencatatan sebelumnya, transaksi, komit, tingkat isolasi, pos pemeriksaan, dan pemulihan kerusakan. Kami akan melanjutkan replikasi PostgreSQL di entri blog berikutnya.
Referensi:
Dokumentasi PostgreSQL
Buku Masak Administrasi PostgreSQL 9 – Edisi Kedua