Soru: Garson Masada Siparişi Onaylarken SambaPOS Neden ‘Timeout Expired’ Hatası Verir ve Sistem Donar?
Cevap: Çok katlı restoranlarda, büyük bahçeli kafelerde ve yoğun paket servis kasalarında garsonlar el terminalleriyle (Android tablet veya Windows el bilgisayarı) sipariş girip ‘Kapat / Onayla’ butonuna bastığında ekranın 15-30 saniye boyunca dönerek donması ve ardından ekrana ‘Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding’ (Yürütme Zaman Aşımına Uğradı / Sunucu Yanıt Vermiyor) kırmızı penceresinin gelerek siparişi masaya kaydetmemesi servis akışını kilitleyen en yaygın veritabanı darboğazıdır. Kasiyer ana kasanın çalıştığını söyler ancak terminaller sürekli kilitlenir. Bu arıza internet kesintisi değil; Microsoft SQL Server Express veritabanındaki Adisyon İşlem Kilitlenmelerinin (Command Timeout) 30 saniye tavanına vurması veya SQL Transaction Log (.ldf) Dosyasının Şişerek Diski Kilitlemesidir.
SQL Server Execution Timeout Kilitlenmesinin Nedenleri
SambaPOS istemcileri ana sunucudaki SQL Server a ADO.NET veri sağlayıcısıyla bağlanır:
- Standart olarak her SQL sorgusunun tamamlanması için izin verilen maksimum bekleme süresi tam 30 saniyedir.
- Log Dosyası Boğulması: Veritabanının
SAMBAPOS5_log.ldfişlem günlüğü dosyası bakım yapılmadığı için 50 GB – 100 GB boyutuna fırladığında; SQL Server her sipariş girişinde bu devasa kütüğe yazmak için saniyelerce diski kilitler. - Terminaller 30 saniye içinde ‘Sipariş Kaydedildi’ cevabı alamayınca zaman aşımı bayrağını çeker ve işlemi iptal eder.
1. Adım: SambaPOS Bağlantı Dizesinde (Connection String) Timeout Süresini 90 Saniyeye Çıkarma
Terminallerin erken pes etmesini engellemek için zaman aşımı eşiği yükseltilir:
- Hata veren el terminalinde ve ana kasada
C:ProgramDataSAMBAPOSSambaPOS5SambaSettings.txtdosyası Not Defteri ile açılır. - Veritabanı bağlantı dizesinin sonuna şu iki parametre eklenir:
Connection Timeout=60;Command Timeout=90;Bu ayar, anlık ağ gecikmelerinde veya yoğun hesap kapatma anlarında terminalin bekleme süresini 90 saniyeye esneterek zaman aşımı hatası vermesini engeller.
2. Adım: Şişen SQL Server Log (.ldf) Dosyasını Küçültme (Shrink Log)
Veritabanını ferahlatacak en kritik bakım işlemi SSMS üzerinden yürütülür:
T-SQL Log Temizleme Protokolü:
USE [master];
GO
-- Kurtarma modelini basite çekin:
ALTER DATABASE [SAMBAPOS5] SET RECOVERY SIMPLE;
GO
USE [SAMBAPOS5];
GO
-- Şişen 50 GB lık log dosyasını 10 MB a indirin:
DBCC SHRINKFILE (SAMBAPOS5_log, 10);
GO
-- Tablo indekslerini tazeleyin:
EXEC sp_updatestats;
GOKomut çalıştığı saniyede diskte onlarca gigabaytlık yer açılır; SQL Server ın disk yazma gecikmesi 500 milisaniyeden 2 milisaniyeye çakılır.
3. Adım: SQL Server Maksimum Bellek Sınırı (Max Server Memory) Kuralı
SQL Server ın ana kasanın tüm RAM ini tüketip Windows u kilitlemesini önlemek için: SSMS te sunucu adına sağ tıklanır -> Properties > Memory sekmesinden ‘Maximum Server Memory’ değeri kasanın toplam RAM inin %70 ine (Örn: 16 GB RAM varsa 11.000 MB a) sabitlenir. El terminallerinden sipariş girildiğinde ekranın tek bir saniye dahi beklemeden siparişi anında onayladığı doğrulanır.
Restoran otomasyonu SQL performans ayarları, SambaPOS el terminali hızlandırma, veritabanı bakım anlaşmaları ve sunucu optimizasyonunda BaykalSoft Veritabanı Hizmetleri uzman kadromuzla iletişime geçebilirsiniz.