Ana SayfaRestoran OtomasyonuMasaüstü OtomasyonSambaPOS Restoran Otomasyonunda 'SQL Tablo Kilitlenmesi (Deadlock Victim)' Hatası Çözüm Rehberi

SambaPOS Restoran Otomasyonunda ‘SQL Tablo Kilitlenmesi (Deadlock Victim)’ Hatası Çözüm Rehberi

Author

Date

Category

Soru: Garsonlar Yoğun Saatlerde Sipariş Girerken SambaPOS Neden ‘Transaction Was Deadlocked’ Hatası Verir ve Siparişi Siler?

Cevap: Restoranlarda, kafelerde ve paket servis merkezlerinde cuma ve cumartesi akşamları onlarca garsonun aynı anda el terminalleriyle masalara sipariş girdiği esnada ekranda aniden kırmızı uyarı kutusuyla beliren ‘Transaction (Process ID XX) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction’ (İşlem kilitlendi ve kilit kurbanı seçildi) uyarısı garsonun girdiği son siparişlerin masaya kaydedilmeden kaybolmasına yol açar. Garson onayladığını zanneder ancak mutfağa fiş gitmez ve adisyon boş kalır. Bu hata yazılımın çökmesi değil; Microsoft SQL Server veritabanında iki farklı terminalin aynı anda aynı tablodaki (Örn: Orders ve Tickets) farklı satırları kilitleyerek birbirini sonsuz döngüde beklemesidir (Ölümcül Kilitlenme – Deadlock).

SQL Server Deadlock Mekanizması Nasıl Oluşur?

İlişkisel veritabanlarında veri bütünlüğünü korumak için satır/tablo kilitleme (Row-Level Locking) uygulanır:

  • Kilitlenme Senaryosu: 1. Garson Masaya ürün eklerken Tickets tablosunu kilitler ve Orders tablosuna yazmak ister.
  • Tam aynı milisaniyede 2. Garson başka bir adisyon kapatırken Orders tablosunu kilitler ve Tickets tablosuna erişmek ister.
  • Her iki işlem de birbirinin elindeki kilidi bırakmasını bekler; sistem kilitlenir.
  • SQL Server kilit yöneticisi (Lock Monitor) durumu fark eder; sistemi kurtarmak için maliyeti daha düşük olan garsonun işlemini ‘Kilit Kurbanı’ (Deadlock Victim) ilan ederek işlemini zorla iptal eder (Rollback).

1. Adım: Veritabanında RCSI (Read Committed Snapshot Isolation) Modunu Açma (Kesin Çözüm)

SambaPOS veritabanında deadlockları %95 oranında yok eden mucizevi SQL yapılandırması RCSI dir:

  1. Tüm el terminalleri ve SambaPOS programları geçici olarak kapatılır.
  2. SQL Server Management Studio (SSMS) açılarak şu T-SQL betiği çalıştırılır:
USE [master];
GO
-- Açık tüm bağlantıları zorla sonlandırın:
ALTER DATABASE [SAMBAPOS5] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- Satır Sürümleme İzolasyonunu Aktif Edin (Okuma ve Yazma Kilitlerini Ayrıştırır):
ALTER DATABASE [SAMBAPOS5] SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE [SAMBAPOS5] SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
-- Veritabanını tekrar çok kullanıcılı moda alın:
ALTER DATABASE [SAMBAPOS5] SET MULTI_USER;
GO

READ_COMMITTED_SNAPSHOT ON yapıldığında; rapor çeken veya adisyon okuyan kullanıcılar yazma yapan garsonları asla kilitlemez; SQL Server verinin anlık bir kopyasını tempdb üzerinden okutarak deadlock krizini tamamen bitirir.

2. Adım: TempDB Veritabanı Dosyalarını Çok Çekirdekli Yapılandırma

RCSI modu tempdb yi yoğun kullanır. TempDB nin takılmaması için:

TempDB Optimizasyon Protokolü:
1. Sunucunun kaç işlemci çekirdeği (CPU Core) olduğu öğrenilir (Örn: 4 Çekirdek).
2. SSMS üzerinden TempDB veritabanı özelliklerine gidilir; dosya sayısı çekirdek sayısına eşitlenir (4 adet eşit boyutlu tempdb.mdf dosyası açılır).
3. Autogrowth değeri 64 MB sabit artışa kilitlenir.

3. Adım: İndekslerin Yeniden Oluşturulması (Reindex)

Sorguların tablolarda satır ararken tüm tabloyu kilitlemesini önlemek için her gece çalışan otomatik bakım planı (sp_updatestats ve DBREINDEX) kurulmalıdır.

Restoran otomasyon veritabanı optimizasyonu, SambaPOS SQL deadlock onarımları, çok terminalli sistem stabilizasyonu ve kurumsal ERP desteğinde BaykalSoft Veritabanı Mühendisliği uzman kadromuzla iletişime geçebilirsiniz.

Önceki Gönderiler

Önceki Yorumlar