Soru: Logo Programında Faturayı Kaydet Butonuna Basınca Program Neden Donar ve Kilitlenir?
Cevap: Logo Go3, Tiger veya Wings kullanan yoğun toptancı, perakende veya üretim işletmelerinde personelin faturayı işleyip ‘Kaydet’ butonuna bastığında farenin dönmeye başlaması, program başlığında ‘(Yanıt Vermiyor)’ yazması ve 1-2 dakika sonra ekrana ‘SQL Server Execution Timeout Expired / Zaman Aşımı Süresi Doldu’ veya ‘Deadlock victim’ hatası fırlatarak faturayı kaydetmemesi kritik bir veritabanı darboğazıdır. Fatura kaydedilirken Logo yalnızca o faturayı diske yazmaz; aynı anda stok hareketlerini (STLINE), cari hesap bakiyesini (CLCARD), muhasebe fişlerini (EMFLINE), seri/lot takiplerini ve KDV dağılımlarını onlarca ilişkisel tabloya eşzamanlı kilit koyarak (Table Lock) yazmaya çalışır. Bu süreçte tablolar serbest kalamazsa sistem kilitlenir.
Fatura Kaydı Esnasında Yaşanan Kilitlenmenin Temel Nedenleri
SQL Server ve Logo mimarisinde donmaya yol açan üç ana unsur bulunur:
- Aşırı İndeks Parçalanması (Index Fragmentation): Yıllardır bakım görmemiş veritabanlarında
LG_XXX_XX_STLINE(Stok Hareketleri) tablosu milyonlarca satıra ulaşır. SQL Server faturanın gireceği yeni sıra numarasını bulmak için diski baştan sona taramak zorunda kalır ve zaman aşımına uğrar. - Rapor Çalıştıran Kullanıcıların Tabloları Kilitlemesi: Bir muhasebeci arka planda ‘Ayrıntılı Satış Raporu’ veya ‘Stok Ekstresi’ alırken SQL tablolarını paylaşımsız (Exclusive Lock) olarak okur; bu esnada fatura kesen kasiyerin faturası kuyrukta bekler ve kilitlenir.
- Yetersiz TempDB Boyutu ve Disk Darboğazı: SQL Server’ın geçici hesaplamaları yaptığı
tempdbveritabanının yavaş bir mekanik sabit diske kurulu olması veya büyüme limitine (Autogrowth) takılması.
1. Adım: Veritabanı İndekslerini Yeniden İnşa Etme (Rebuild / Reorganize)
Kayıt kilitlenmelerini bitirmenin en etkili çözümü tablolardaki parçalanmış indeksleri onarmaktır:
USE [LOGODB];
GO
-- Parçalanmış İndeksleri Yeniden İnşa Edin:
EXEC sp_MSforeachtable @command1="PRINT '?' DBCC DBREINDEX ('?', ' ', 80)";
GO
-- İstatistikleri Güncelleyin:
EXEC sp_updatestats;
GOBu T-SQL bakım betiği, fatura kayıt sürelerini 30 saniyeden milisaniyeler seviyesine indirir; SQL Server satırları anında bularak kilidi hemen serbest bırakır.
2. Adım: Fatura Seri Numarası ve Numara Şablonu Optimizasyonu
Logo içinde numara şablonlarında ‘Son Numara’ sayacının kilitlenmesi donmalara yol açar:
- Logo arayüzünden Yönetim > Standart Kayıt Numaralama menüsü açılır.
- Satış Faturaları şablonu bulunur.
- Numaralama türü ‘Otomatik’ olan şablonlarda sayaç tablosunun bozulup bozulmadığı kontrol edilir; numara aralığı çakışmaları sıfırlanarak temizlenir.
3. Adım: SQL Server TempDB Veritabanını NVMe SSD ye Taşıma
SQL Server Configuration Manager üzerinden tempdb.mdf ve templog.ldf dosyaları sunucudaki en yüksek hızlı NVMe SSD diskine taşınmalı; dosya büyüme adımı (Autogrowth) ‘Yüzde’ yerine ’64 MB Sabit Büyüme’ olarak ayarlanmalıdır. Böylece fatura yazılırken disk büyüme duraksamaları ortadan kalkar.
Logo muhasebe veritabanı optimizasyonu, SQL performans sıkılaştırması, kilitlenme analizleri ve kurumsal sunucu bakım anlaşmalarında BaykalSoft Veritabanı Mühendisliği ekibimizle iletişime geçebilirsiniz.