MariaDB Process Listeleme ve Kill
MariaDB üzerinde mysql CLI ile aktif processleri görme, kilitlenmiş işlemleri inceleme ve güvenli kill adımları.
Hızlı kontrol listesi
- Doğru host/ortamda mısın? (prod/preprod/test)
- replika mı? (replika ise
read_only/super_read_onlyaçık olabilir; replika thread'lerini kill etme) - Process ID MySQL içi oturum ID'sidir, OS PID değildir.
Bağlantı
mysql -h db-host -u dbuser -p
# veya .my.cnf ile:
mysql
Process listesi alma
SHOW PROCESSLIST;
-- Uyuyanları filtrele, en uzun sürenleri sırala
SELECT ID,USER,HOST,DB,COMMAND,TIME,STATE,INFO
FROM information_schema.PROCESSLIST
WHERE COMMAND <> 'Sleep'
ORDER BY TIME DESC;
Alanlar:
TIME: saniye cinsinden çalıştığı süre.STATE: lock bekleme, sorting, sending data gibi aşama.
Transaction ve lock inceleme
Uzun bekleyen/kitlenen işlemleri bul:
-- Açık transaction listesi
SELECT trx_id, trx_mysql_thread_id AS thread_id, trx_started,
trx_state, trx_rows_locked, trx_query
FROM information_schema.innodb_trx
ORDER BY trx_started;
-- Lock bekleyen ve bloklayan eşleşmeleri
SELECT r.trx_mysql_thread_id AS waiting_thread,
b.trx_mysql_thread_id AS blocking_thread,
TIMESTAMPDIFF(SECOND, r.trx_wait_started, NOW()) AS wait_s,
r.trx_query AS waiting_query,
b.trx_query AS blocking_query
FROM information_schema.innodb_lock_waits w
JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id
JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id
ORDER BY wait_s DESC;
Not: Bloklayan thread ID'yi PROCESSLIST.ID ile eşleyip kill edeceksin.
Kill kararı (ne zaman?)
- Kısa süreli SELECT/backup işlemlerini öldürmeden önce onay al.
- Yazma işlemi (UPDATE/DELETE) commit aşamasındaysa kill veri kaybı yaratabilir; önce bekleme süresini ve etkiyi değerlendir.
- Replication SQL/IO thread'lerini kill etme; replika lag için farklı aksiyon gerekir.
Kill uygulama
-- Sadece mevcut sorguyu durdur (bağlantı açık kalır)
KILL QUERY <id>;
-- Oturumu tamamen kapatır
KILL <id>;
Adımlar:
SHOW PROCESSLISTveya lock sorgularından ID'yi al.- Önce
KILL QUERY <id>dene; çözülmezseKILL <id>. - Sonrasında process list ve lock listini tekrar kontrol et.
Yavaş sorgu ve plan bakışı
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'slow_query_log_file';
SHOW VARIABLES LIKE 'long_query_time';
Etkisi kabul ediliyorsa slow log açık değilse aç:
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1; -- ihtiyaca göre
Son kayıtları incele (örnek dosya yolu varsayımsal):
sudo tail -n 50 /var/log/mysql/slow.log
Plan analizi için:
EXPLAIN FORMAT=JSON <sorgu>;
Örnek hızlı akış
SHOW PROCESSLISTile uzun sürenleri sırala,Sleephariç.- Lock varsa lock bekleyen/bloklayan çiftini yukarıdaki join ile bul.
- Bloklayan thread ID için gerekliyse
KILL QUERY <id>→ halen kilitliyseKILL <id>. - Tekrar
PROCESSLIST/innodb_trx/innodb_lock_waitsile temizlik doğrula.