Menghentikan Query
Sebelum menghentikan query, Anda perlu mengetahui query mana yang menimbulkan masalah. Gunakan SQL berikut untuk menampilkan semua query yang sedang berjalan beserta durasinya:
SELECT
pid,
user_name,
starttime,
query,
elapsed
FROM
stv_recents
WHERE
state = 'Running'
ORDER BY
elapsed DESC;
Output yang Diharapkan:
| pid | user_name | starttime | query | elapsed |
|---|---|---|---|---|
| 123 | admin | 2023-10-01 10:00:00 | SELECT * FROM ? | 01:20:15 |
| 456 | analyst | 2023-10-01 10:45:00 | UPDATE table ? | 00:35:10 |
| … | … | … | … | … |
Kolom elapsed menunjukkan berapa lama query sudah berjalan.
Setelah Anda menemukan query yang bermasalah (menggunakan pid dari daftar di atas), Anda bisa menghentikannya. Gunakan perintah berikut:
CANCEL pid;
Contoh:
CANCEL 123;
Memastikan Query Sudah Dihentikan
Untuk memastikan query sudah dihentikan, jalankan ulang query awal:
SELECT
pid,
user_name,
starttime,
query,
elapsed
FROM
stv_recents
WHERE
state = 'Running'
ORDER BY
elapsed DESC;
Query yang dihentikan seharusnya tidak lagi muncul di hasil.
Menangani Query yang Terblokir
Terkadang query terblokir dan perlu dihentikan agar resource-nya dilepaskan. Anda bisa menemukan query yang terblokir menggunakan tabel STV_BLOCKED.
SELECT
b.pid,
b.user_name,
b.db,
b.query,
l.pid AS blocked_by_pid,
l.user_name AS blocked_by_user
FROM
stv_blocked b
JOIN
stv_locks l
ON
b.lock_owner_pid = l.pid;
Output yang Diharapkan:
| pid | user_name | db | query | blocked_by_pid | blocked_by_user |
|---|---|---|---|---|---|
| 5678 | analytics | reporting | SELECT count(*) FROM ?; | 9101 | Admin |
Untuk menghentikan query yang terblokir, gunakan perintah CANCEL seperti yang ditunjukkan sebelumnya:
CANCEL 5678;
Mengotomatiskan Penghentian Query
Untuk database dengan kebutuhan performa yang ketat, mengotomatiskan deteksi dan penghentian query yang berjalan lama bisa sangat membantu. Berikut contoh prosedur untuk menghentikan query yang berjalan melebihi batas waktu tertentu:
DO $$
DECLARE
long_running_query RECORD;
BEGIN
FOR long_running_query IN
SELECT pid
FROM stv_recents
WHERE state = 'Running'
AND elapsed > interval '00:30:00' -- Replace with desired threshold
LOOP
EXECUTE 'CANCEL ' || long_running_query.pid;
END LOOP;
END;
$$;
Hal Penting yang Perlu Diperhatikan
- Izin: Hanya pengguna dengan izin yang sesuai yang dapat membatalkan query.
- Dampak: Menghentikan query dapat memengaruhi performa aplikasi atau menyebabkan inkonsistensi data jika dilakukan dengan cara yang salah.
- Pemantauan: Memantau performa query secara rutin membantu mendeteksi masalah lebih awal.
Kesimpulan
Mengelola query yang berjalan lama secara efektif dapat menjaga performa cluster Amazon Redshift Anda tetap optimal. Dengan mengikuti langkah-langkah ini, Anda bisa dengan cepat menemukan dan menghentikan query yang bermasalah. Menerapkan solusi otomatis untuk pemantauan rutin dan penghentian query dapat semakin membantu menjaga performa.
Pastikan untuk menguji semua perintah dan script di lingkungan non-produksi sebelum menerapkannya ke produksi agar tidak terjadi gangguan yang tidak disengaja.
Artikel lain yang mungkin Anda suka:
Beekeeper Studio Adalah GUI Database Gratis & Open Source
Tool query & editor SQL terbaik yang pernah saya pakai. Semua yang saya butuhkan untuk mengelola database ada di sini. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio cepat, intuitif, dan mudah digunakan. Beekeeper mendukung banyak sekali database, dan berjalan mulus di Windows, Mac, dan Linux.
Apa Kata Pengguna Tentang Beekeeper Studio
"Beekeeper Studio benar-benar menggantikan alur kerja SQL lama saya. Cepat, intuitif, dan membuat pekerjaan database kembali menyenangkan."
"Saya sudah mencoba banyak GUI database, tapi Beekeeper punya keseimbangan sempurna antara fitur dan kesederhanaan. Langsung berfungsi."