Jika Anda telah bekerja dengan MySQL selama beberapa waktu, Anda mungkin pernah mendengar istilah "penguncian tingkat tabel" dan "penguncian tingkat baris". Istilah-istilah ini mengacu pada perincian kunci di MySQL - di blog ini kami akan menjelaskan apa artinya dan kegunaannya.
Apa itu Lock Granularity di MySQL?
Setiap mesin penyimpanan MySQL mendukung tingkat perincian yang berbeda untuk kuncinya. MySQL memiliki tiga tingkat penguncian:penguncian tingkat baris, penguncian tingkat halaman, dan penguncian tingkat tabel. Setiap mesin penyimpanan MySQL mengimplementasikan penguncian secara berbeda memberi Anda beberapa keuntungan dan kerugian yang berbeda. Pertama-tama kita akan melihat apa itu perincian kunci, lalu melihat bagaimana semuanya bekerja di mesin penyimpanan yang berbeda.
Secara garis besar, kunci di MySQL termasuk dalam salah satu kategori ini. Kunci dapat berupa:
-
Tingkat halaman - jenis perincian kunci seperti itu tersedia di mesin MySQL yang lebih lama, khususnya BDB, yang sekarang sudah usang pada MySQL 5.1. Singkatnya, BDB adalah mesin penyimpanan yang termasuk dalam versi MySQL yang lebih lama dan itu adalah mesin penyimpanan transaksional yang melakukan penguncian tingkat halaman. Karena jenis perincian kunci ini tidak lagi digunakan, kami tidak akan membahasnya secara mendalam di sini, tetapi secara umum, kunci ini terbatas pada data dan indeks yang berada di halaman tertentu. Jika Anda ingin mempelajari lebih lanjut tentang BDB, halaman di MariaDB harus memberikan beberapa informasi lebih lanjut.
-
Tingkat tabel - MySQL menggunakan penguncian tingkat tabel untuk semua mesin penyimpanan kecuali InnoDB.
-
Tingkat baris - penguncian tingkat baris digunakan oleh InnoDB.
Keuntungan dan Kerugian Penguncian Level Tabel
MySQL menggunakan penguncian tingkat tabel untuk semua mesin penyimpanan kecuali InnoDB yang berarti bahwa penguncian tingkat tabel digunakan untuk tabel yang menjalankan mesin penyimpanan MyISAM, MEMORY dan MERGE, yang mengizinkan hanya satu sesi untuk memperbarui tabel dalam satu waktu . Kunci tingkat tabel memiliki beberapa keunggulan berbeda dibandingkan kunci tingkat baris (misalnya, penguncian tingkat tabel pada umumnya memerlukan sedikit lebih sedikit memori daripada penguncian tingkat baris karena penguncian tingkat baris memerlukan beberapa memori per baris (atau grup) dari baris yang terkunci dan biasanya cepat karena hanya satu kunci yang terlibat. Kunci tulis tabel diletakkan di atas meja jika tidak ada kunci di atasnya - jika ada kunci yang sudah ada sebelumnya di atas meja yang bersangkutan, permintaan kunci tabel dimasukkan antrian permintaan baca Perlu disebutkan bahwa penguncian tingkat tabel memiliki beberapa kelemahan yang berbeda yang unik untuk dirinya sendiri juga - misalnya, mungkin tidak cocok untuk aplikasi yang memerlukan banyak transaksi yang "bolak-balik" (mis. , aplikasi perbankan online) karena hanya satu sesi yang dapat menulis ke tabel pada satu waktu dan beberapa tabel yang mendukung penguncian tingkat tabel (seperti MyISAM) tidak mendukung model ACID.
Berikut contohnya:bayangkan sebuah aplikasi perbankan yang menggunakan dua tabel dalam database - katakanlah tabel tersebut disebut “memeriksa” dan “menabung”. Anda perlu memindahkan $100 dari rekening giro seseorang ke rekening tabungannya. Logikanya, Anda akan melakukan langkah-langkah berikut:
-
Pastikan saldo akun lebih dari $100.
-
Kurangi $100 dari rekening giro.
-
Tambahkan $100 ke rekening tabungan.
Untuk melakukan tindakan ini, Anda memerlukan beberapa kueri, misalnya:
SELECT balance FROM checking WHERE account_id = 123;
UPDATE checking SET balance = balance - 100 WHERE account_id = 123;
UPDATE savings SET balance = balance + 100 WHERE account_id = 123;
Kueri ini mungkin terlihat sederhana, tetapi jika Anda menggunakan MyISAM (kami menggunakan MyISAM sebagai contoh karena ini adalah salah satu mesin penyimpanan utama yang mendukung kunci tingkat tabel), Anda harus mengetahui fakta bahwa mesin juga tidak mendukung ACID yang berarti bahwa jika server basis data mogok saat melakukan salah satu dari kueri tersebut, Anda kurang beruntung:orang dapat memperoleh uang tunai di kedua akun atau tidak di salah satu dari mereka. Satu-satunya mesin yang mendukung transaksi berbasis ACID di MySQL adalah InnoDB, jadi jika Anda membutuhkan banyak transaksi yang dapat diandalkan, mungkin ada baiknya untuk melihat ke dalamnya. InnoDB juga mendukung penguncian tingkat baris - inilah yang akan kita bahas sekarang.
Keuntungan dan Kerugian Penguncian Tingkat Baris
MySQL menggunakan penguncian tingkat baris untuk tabel InnoDB guna mendukung akses tulis simultan dengan beberapa sesi. Beberapa keuntungan menggunakan penguncian tingkat baris termasuk kemampuan untuk mengunci satu baris untuk jangka waktu yang lama dan konflik penguncian yang lebih sedikit ketika banyak utas mengakses baris yang berbeda. Namun, penguncian tingkat baris juga memiliki kelemahan:salah satunya adalah bahwa penguncian tingkat baris biasanya memakan lebih banyak memori daripada penguncian tingkat halaman atau tingkat tabel, itu juga biasanya lebih lambat daripada penguncian tingkat halaman atau tingkat tabel karena mesin harus mendapatkan lebih banyak kunci. InnoDB adalah salah satu mesin yang mendukung mekanisme penguncian tingkat baris:ini juga sesuai dengan ACID yang berarti cocok untuk aplikasi berbasis transaksi (lihat contoh di atas). Sekarang kita akan melihat bagaimana perincian kunci bekerja di salah satu mesin penyimpanan MySQL.
Bagaimana Kunci Granularitas Bekerja di InnoDB?
InnoDB dikenal luas mendukung penguncian tingkat baris, tetapi perlu juga dicatat bahwa mesin mendukung beberapa jenis penguncian yang berarti Anda dapat menggunakan kunci tingkat baris dan tingkat tabel. InnoDB melakukan penguncian tingkat baris dengan menyetel kunci bersama atau eksklusif pada catatan indeks yang ditemuinya saat mencari atau memindai indeks tabel. Kunci bersama adalah kunci yang memungkinkan transaksi yang memegang kunci untuk membaca baris yang dimaksud, kunci eksklusif di sisi lain mengizinkan transaksi yang memegang kunci untuk memperbarui atau menghapus baris.
InnoDB juga memiliki jenis kunci lainnya - beberapa di antaranya termasuk kunci bersama dan eksklusif, kunci niat, kunci rekaman, kunci celah, kunci berikutnya, dan kunci niat berikutnya. Intention lock, misalnya, juga dapat dibagikan atau eksklusif - kunci tersebut biasanya menunjukkan bahwa transaksi bermaksud untuk menetapkan jenis kunci tertentu (kunci bersama atau kunci eksklusif) pada baris individual dalam sebuah tabel, kunci rekaman adalah mengunci catatan indeks, dll.
Secara umum, perincian kunci InnoDB berbeda dari perincian kunci yang ada di mesin penyimpanan MySQL lainnya (misalnya, MyISAM) karena ketika penguncian tingkat tabel digunakan, hanya satu sesi untuk memperbarui tabel tertentu di waktu bisa berjalan. Saat penguncian tingkat baris sedang digunakan, MySQL mendukung akses tulis simultan di beberapa sesi membuat mesin penyimpanan penguncian tingkat baris (InnoDB) menjadi pilihan yang cocok untuk aplikasi yang sangat penting.
Kunci Granularitas dan Deadlock
Mengunci granularitas dan mengunci level di MySQL dapat menjadi hal yang hebat, tetapi juga dapat menyebabkan masalah. Salah satu masalah yang paling sering disebabkan oleh perincian kunci adalah kebuntuan - kebuntuan terjadi ketika transaksi MySQL yang berbeda tidak dapat dilanjutkan karena masing-masing dari mereka memegang kunci yang dibutuhkan oleh yang lain. Untungnya, saat menggunakan mesin penyimpanan InnoDB, deteksi kebuntuan diaktifkan secara default - ketika kebuntuan terdeteksi, InnoDB secara otomatis mengembalikan transaksi. Jika Anda menemui kebuntuan saat menangani perincian kunci di MySQL, jangan khawatir - pertimbangkan untuk memulai kembali transaksi Anda. Untuk memantau database Anda secara proaktif, Anda juga harus mempertimbangkan untuk memanfaatkan fitur yang disediakan oleh ClusterControl.
Bagaimana ClusterControl Membantu Anda?
Berikut adalah beberapa hal yang ClusterControl dikembangkan oleh Somenines dapat membantu Anda dengan:
-
Perlindungan semua data bisnis Anda
-
Jika data Anda rusak (dapat disebabkan oleh tidak menggunakan mesin penyimpanan yang sesuai dengan ACID atau juga oleh faktor lain seperti dijelaskan di atas) alat dapat menjalankan proses otomatis yang benar-benar memverifikasi bahwa Anda dapat memulihkan data.
-
Alat ini dapat memberi tahu Anda database mana yang tidak dicadangkan atau menunjukkan status cadangan Anda (apakah mereka berhasil atau gagal)
-
-
Otomasi operasi database Anda
-
ClusterControl dapat membantu Anda memastikan bahwa sysadmin, developer, dan DBA Anda mengelola seluruh cluster database secara efisien dengan risiko minimal menggunakan industri praktik terbaik
-
-
Mengelola infrastruktur database Anda secara umum secara efektif
-
Pergeseran teknologi saat ini yang dikombinasikan dengan solusi infrastruktur canggih memerlukan alat dan pengetahuan canggih untuk mencapai ketersediaan tinggi dan kinerja optimal untuk aplikasi penting bisnis Anda. ClusterControl juga dapat membantu Anda dalam penerapan, pemantauan, pengelolaan, dan penskalaan teknologi database open source paling populer termasuk MySQL, MariaDB, MongoDB, PostgreSQL, TimeScaleDB, dan lainnya.
-
Untuk mempelajari lebih lanjut tentang bagaimana ClusterControl dapat membantu merampingkan operasi bisnis Anda, pastikan untuk mengawasi blog database Somenines.
Ringkasan
Mesin penyimpanan MySQL yang berbeda memiliki tipe perincian kunci yang berbeda. Sebelum memutuskan mesin penyimpanan yang harus Anda gunakan, pastikan untuk mengetahui sebanyak mungkin informasi tentang mesin penyimpanan yang dimaksud (misalnya seperti yang telah disebutkan, MyISAM harus dihindari saat menangani data penting karena tidak sesuai dengan ACID), pahami semua implikasi kinerja terkait termasuk perincian kunci, kebuntuan, dan lainnya, serta pilihlah dengan bijak.