Mengenal Pasti dan Menyelesaikan Persaingan Kunci
Kaedah praktikal untuk mendiagnosis dan mengurangkan persaingan kunci bagi memastikan operasi pangkalan data berjalan lancar.
Mengenal Pasti dan Menyelesaikan Persaingan Kunci ialah pelajaran Prestasi PostgreSQL & Pengoptimuman Pertanyaan percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Prestasi PostgreSQL & Pengoptimuman Pertanyaan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Prestasi PostgreSQL & Pengoptimuman Pertanyaan merangkumi sejumlah 4 pelajaran.
Apakah itu Pertikaian Kunci?
Bayangkan jalan yang sibuk. Apabila beberapa kereta cuba menggunakan lorong yang sama pada masa yang sama, lalu lintas menjadi perlahan atau terhenti. Dalam PostgreSQL, 'kesesakan lalu lintas' ini dipanggil pertikaian kunci.
Keadaan ini berlaku apabila satu transaksi memegang kunci pada sumber (seperti baris atau jadual) yang diperlukan oleh transaksi lain. Transaksi kedua kemudiannya terpaksa menunggu transaksi pertama melepaskan kuncinya.
Kos Pertikaian
Pertikaian kunci bukan sekadar kesulitan; keadaan ini boleh menjejaskan prestasi pangkalan data dan kebertindakbalasan aplikasi dengan teruk. Berikut ialah kesannya:
- Kependaman Pertanyaan Meningkat: Pertanyaan mengambil masa lebih lama untuk selesai.
- Lancar Lalu Berkurang: Pangkalan data memproses lebih sedikit transaksi sesaat.
- Masa Menunggu Aplikasi: Aplikasi bahagian hadapan mungkin tamat masa ketika menunggu respons pangkalan data.
- Pembaziran Sumber: Sesi yang menunggu menggunakan sumber pelayan tanpa membuat kemajuan.
Mengenal Pasti Penantian dengan pg_locks
PostgreSQL menyediakan alat terbina dalam untuk membantu kita mengesan pertikaian. Paparan sistem pg_locks ialah tempat pertama untuk diperiksa. Paparan ini menunjukkan semua kunci aktif yang dipegang atau sedang ditunggu oleh proses bahagian belakang.
Lajur utama yang perlu diperhatikan ialah pid (ID proses), locktype, relation (objek yang dikunci), mode (jenis kunci), dan khususnya granted.
Mengesan Sesi yang Menunggu
Nilai granted = false dalam pg_locks menunjukkan sesi yang sedang menunggu kunci. Mari lihat cara membuat pertanyaan untuk mendapatkan sesi yang menunggu ini:
SELECT
pid,
locktype,
relation::regclass AS locked_object,
mode,
granted
FROM pg_locks
WHERE granted = false;Mencari Penyekat dengan pg_stat_activity
Setelah mengenal pasti sesi yang menunggu menggunakan pg_locks, langkah seterusnya ialah mengetahui siapa yang memegang kunci dan menghalangnya daripada meneruskan operasi. Di sinilah pg_stat_activity digunakan.
Paparan ini memberikan butiran tentang semua sesi aktif, termasuk pertanyaan semasa, keadaan dan masa sesi tersebut dimulakan.
Membuat Pertanyaan untuk Mencari Pertanyaan yang Menyekat
Dengan menggabungkan maklumat daripada pg_locks dan pg_stat_activity, kita boleh mengenal pasti pertanyaan yang menyekat. Berikut ialah pertanyaan ringkas untuk mencari pertanyaan aktif yang mungkin menyebabkan pertikaian:
SELECT
pid,
usename,
application_name,
client_addr,
query_start,
state,
query
FROM pg_stat_activity
WHERE state = 'active'
AND query NOT ILIKE '%pg_stat_activity%'
ORDER BY query_start ASC
LIMIT 5;Punca Biasa Pertikaian
Memahami punca utama membantu dalam usaha pencegahan:
- Transaksi yang Berjalan Lama: Transaksi yang memegang kunci untuk tempoh yang panjang.
- Indeks yang Tiada: Terlupa menambah indeks boleh menyebabkan imbasan seluruh jadual, lalu memperoleh lebih banyak kunci daripada yang diperlukan.
- Operasi DDL: Perintah seperti
ALTER TABLEselalunya memerlukan kunci eksklusif pada jadual. - 'Baris Panas' / 'Halaman Panas': Kemas kini atau pemadaman yang kerap pada beberapa baris atau blok data yang sama.
Penyelesaian: Pendekkan Transaksi
Salah satu strategi yang paling berkesan ialah memastikan transaksi pangkalan data sesingkat dan secekap yang mungkin. Ini bermaksud:
- Lakukan COMMIT dengan Kerap: Jangan pegang kunci lebih lama daripada yang diperlukan.
- Operasi secara Kelompok: Pecahkan operasi besar kepada bahagian yang lebih kecil dan mudah diurus.
- Optimumkan Pertanyaan: Pastikan pertanyaan SQL dalam transaksi sangat dioptimumkan dan menggunakan indeks yang sesuai.
Penyelesaian: Tamat Masa & Melangkau Kunci
Dalam sesetengah keadaan, menunggu tanpa had bukanlah pilihan. PostgreSQL menyediakan beberapa cara untuk menguruskannya:
SET lock_timeout: Menghalang pertanyaan daripada menunggu selama-lamanya. Pertanyaan akan menghasilkan ralat jika tidak dapat memperoleh kunci dalam tempoh yang ditetapkan.FOR UPDATE SKIP LOCKED: Untuk kes penggunaan tertentu seperti memproses baris gilir, klausa ini membolehkan pertanyaan melangkau baris yang sedang dikunci oleh transaksi lain dan bukannya menunggu.
Uji Pengetahuan Anda
Antara berikut, yang manakah strategi berkesan untuk mengenal pasti atau menyelesaikan pertikaian kunci dalam PostgreSQL?
Rumusan & Langkah Seterusnya
Syabas! Anda telah mempelajari cara mengenal pasti dan mula menyelesaikan pertikaian kunci dalam PostgreSQL. Kita telah membincangkan:
- Maksud pertikaian kunci dan kesannya terhadap prestasi.
- Penggunaan
pg_locksdanpg_stat_activityuntuk mencari sesi yang menunggu serta penyekatnya. - Punca biasa seperti transaksi yang panjang dan indeks yang tiada.
- Strategi penyelesaian utama: memendekkan transaksi, mengoptimumkan pertanyaan dan menggunakan
lock_timeoutatauSKIP LOCKED.
Seterusnya, kita akan mendalami strategi penguncian peringkat baris lanjutan untuk mengoptimumkan lagi penulisan serentak!
Pelajari SQL dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 22
- Pelajaran
- 88
Soalan Lazim
Adakah pelajaran “Mengenal Pasti dan Menyelesaikan Persaingan Kunci” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Prestasi PostgreSQL & Pengoptimuman Pertanyaan, termasuk “Mengenal Pasti dan Menyelesaikan Persaingan Kunci”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Prestasi PostgreSQL & Pengoptimuman Pertanyaan merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Mengenal Pasti dan Menyelesaikan Persaingan Kunci”?
Kaedah praktikal untuk mendiagnosis dan mengurangkan persaingan kunci bagi memastikan operasi pangkalan data berjalan lancar. Anda berlatih Prestasi PostgreSQL & Pengoptimuman Pertanyaan menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Prestasi PostgreSQL & Pengoptimuman Pertanyaan?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Prestasi PostgreSQL & Pengoptimuman Pertanyaan di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Mengenal Pasti dan Menyelesaikan Persaingan Kunci” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Prestasi PostgreSQL & Pengoptimuman Pertanyaan ini?
Ya. Setiap pelajaran Prestasi PostgreSQL & Pengoptimuman Pertanyaan menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Memahami Kunci dan Kebuntuan
- Mengenal Pasti dan Menyelesaikan Persaingan Kunci
- Strategi Penguncian Tahap Baris
- Kunci Nasihat untuk Penyelarasan Aplikasi