DBAtlas · Veritabanı operasyon atlası

Uzun süren sorgu / iş

Belirti

Tek bir sorgu/iş saatlerdir çalışıyor, bitmiyor; kaynak tüketiyor ya da başkalarını etkiliyor.

1. Sorguyu ve süresini yakala

Hangi sorgu, ne zamandır çalışıyor, hangi kullanıcı/uygulama?

Oracle

SELECT sid, serial#, sql_id, last_call_et/60 running_min, username FROM v$session WHERE status='ACTIVE' AND type='USER' ORDER BY last_call_et DESC;

PostgreSQL

SELECT pid, now()-query_start dur, usename, query FROM pg_stat_activity WHERE state='active' ORDER BY query_start;

MySQL

SELECT id, user, time, state, info FROM information_schema.processlist WHERE command='Query' ORDER BY time DESC;

SQL Server

SELECT session_id, total_elapsed_time/1000 sec, status, command FROM sys.dm_exec_requests WHERE session_id IN (SELECT session_id FROM sys.dm_exec_sessions WHERE is_user_process = 1) ORDER BY total_elapsed_time DESC;

MongoDB

db.currentOp({ active: true, secs_running: { $gt: 60 } })

2. İlerliyor mu, takıldı mı

Gerçekten çalışıyor mu yoksa bir lock'ta mi bekliyor? İlerleme göstergesine bak (Oracle v$session_longops, PG pg_stat_progress_* view'ları). Bekliyorsa Bloklama playbook'una geç.

Oracle

SELECT sid, opname, sofar, totalwork, ROUND(sofar/NULLIF(totalwork,0)*100,1) pct, time_remaining FROM v$session_longops WHERE sofar<totalwork;

PostgreSQL

SELECT * FROM pg_stat_progress_create_index;  -- veya pg_stat_progress_vacuum / _cluster / _analyze

3. Karar: bekle mi, kes mi

İlerliyor ve yakında bitecekse bekle (kesmenin rollback maliyeti işi daha da uzatabilir). Takılıysa, yanlış çalışıyorsa veya üretimi etkiliyorsa sonlandır. Kesmeden önce rollback süresini düşün.

4. Gerekirse sonlandır

Sadece sorguyu iptal etmeyi (oturumu koruyarak) tercih et; olmuyorsa oturumu kes.

Oracle

ALTER SYSTEM CANCEL SQL 'sid,serial#';  -- 18c+; olmazsa KILL SESSION

PostgreSQL

SELECT pg_cancel_backend(pid);  -- olmazsa pg_terminate_backend(pid)

MySQL

KILL QUERY <id>;

SQL Server

KILL <session_id>;

MongoDB

db.killOp(<opid>)

5. Kalıcı çöz

Sorguyu optimize et (index, plan, sayfalama/batch'leme), ağır işleri düşük yoğunluklu saatlere al, gerekiyorsa aşamalı (chunk) çalıştır. Tekrarlayan raporlar için materialized view / read replica düşün.

DBAtlas'ta aç →