Mengidentifikasi dan Mengatasi Persaingan Kunci
Pelajari metode praktis untuk mendiagnosis dan mengurangi persaingan kunci guna memastikan operasi basis data berjalan lancar.
Mengidentifikasi dan Mengatasi Persaingan Kunci adalah pelajaran PostgreSQL Performance & Query Optimization gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar PostgreSQL Performance & Query Optimization, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus PostgreSQL Performance & Query Optimization mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
What is Lock Contention?
Imagine a busy road. When multiple cars try to use the same lane at the same time, traffic slows down or stops. In PostgreSQL, this 'traffic jam' is called lock contention.
It happens when one transaction holds a lock on a resource (like a row or table) that another transaction needs. The second transaction then has to wait for the first one to release its lock.
The Cost of Contention
Lock contention isn't just an inconvenience; it can severely impact your database's performance and application responsiveness. Here's how:
- Increased Query Latency: Queries take longer to complete.
- Reduced Throughput: The database processes fewer transactions per second.
- Application Timeouts: Frontend applications might time out waiting for a database response.
- Resource Waste: Waiting sessions consume server resources without making progress.
Identifying Waits with pg_locks
PostgreSQL provides built-in tools to help us spot contention. The pg_locks system view is your first stop. It shows all active locks held or awaited by backend processes.
Key columns to watch are pid (process ID), locktype, relation (the object being locked), mode (the type of lock), and especially granted.
Spotting Waiting Sessions
A granted = false value in pg_locks indicates a session that is currently waiting for a lock. Let's see how to query for these waiting sessions:
SELECT
pid,
locktype,
relation::regclass AS locked_object,
mode,
granted
FROM pg_locks
WHERE granted = false;Finding the Blocker with pg_stat_activity
Once you've identified a waiting session using pg_locks, the next step is to find out who is holding the lock and preventing it from proceeding. This is where pg_stat_activity comes in.
This view gives you details about all active sessions, including their current query, state, and when they started.
Querying for Blocking Queries
By combining information from pg_locks and pg_stat_activity, we can pinpoint blocking queries. Here's a simplified query to find active queries that might be causing contention:
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;Common Causes of Contention
Understanding the root causes helps in prevention:
- Long-Running Transactions: Transactions that hold locks for extended periods.
- Missing Indexes: Forgetting an index can lead to full table scans, acquiring more locks than necessary.
- DDL Operations: Commands like
ALTER TABLEoften require exclusive table locks. - 'Hot Rows' / 'Hot Pages': Frequent updates or deletions on the same few rows or data blocks.
Resolution: Shorten Transactions
One of the most effective strategies is to keep your database transactions as short and efficient as possible. This means:
- Commit Frequently: Don't hold locks longer than needed.
- Batch Operations: Break down large operations into smaller, manageable chunks.
- Optimize Queries: Ensure SQL queries within transactions are highly optimized and use appropriate indexes.
Resolution: Timeouts & Skipping Locks
Sometimes, waiting indefinitely isn't an option. PostgreSQL offers ways to manage this:
SET lock_timeout: Prevents queries from waiting forever. The query will error out if it can't acquire a lock within the specified time.FOR UPDATE SKIP LOCKED: For specific use cases (like processing a queue), this clause allows a query to skip rows that are currently locked by other transactions, rather than waiting.
Check Your Knowledge
Which of the following are effective strategies for identifying or resolving lock contention in PostgreSQL?
Recap & Next Steps
Great job! You've learned how to identify and begin resolving lock contention in PostgreSQL. We covered:
- What lock contention is and its performance impact.
- Using
pg_locksandpg_stat_activityto find waiting sessions and their blockers. - Common causes like long transactions and missing indexes.
- Key resolution strategies: shortening transactions, optimizing queries, and using
lock_timeoutorSKIP LOCKED.
Next, we'll dive deeper into advanced row-level locking strategies to further optimize concurrent writes!
Belajar SQL dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 22
- Pelajaran
- 88
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengidentifikasi dan Mengatasi Persaingan Kunci” gratis?
Ya — teks lengkap “Mengidentifikasi dan Mengatasi Persaingan Kunci” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus PostgreSQL Performance & Query Optimization, upgrade ke CoddyKit PRO. Kursus PostgreSQL Performance & Query Optimization mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengidentifikasi dan Mengatasi Persaingan Kunci”?
Pelajari metode praktis untuk mendiagnosis dan mengurangi persaingan kunci guna memastikan operasi basis data berjalan lancar. Kamu berlatih PostgreSQL Performance & Query Optimization dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai PostgreSQL Performance & Query Optimization?
Tidak diperlukan pengalaman sebelumnya. PostgreSQL Performance & Query Optimization di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Mengidentifikasi dan Mengatasi Persaingan Kunci” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran PostgreSQL Performance & Query Optimization ini?
Ya. Setiap pelajaran PostgreSQL Performance & Query Optimization menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Memahami Kunci dan Deadlock
- Mengidentifikasi dan Mengatasi Persaingan Kunci
- Strategi Penguncian Tingkat Baris
- Kunci Advisory untuk Koordinasi Aplikasi