Merhaba,
Gecen hafta bir olay yasadik;
Bir anda dosya yazmalarda yavaşlık, database’te lock problemleri, geç connection alma gibi problemler yağmaya başladı.
Uzun ugraşlar sonucu sorun tespit edildi.
Yoğun dosya üreten bir uygulamamizın entegrasyon icin dosyalarini yazdigi file server kendinden geçmiş. Haliyle dosya yazma işlemlerinde müthiş bir yavaşlık yaşandı.
Lock’larin sebebine gelince;
Aşağıdaki kod for döngüsü içerisinde xml üretiyor ve bahsedilen file server’a yazıyor. Yazdıktan sonra da db’de bir alanı update ediyor. İşlem genel olarak transactional yapılmış.
Böyle olunca database dk’larca beklemeye geçiyor ve locklar oluşuyor.
Connection geç alma problemi de, db’ nin locklarla uğraşırken diğer işlere yeterli zaman ayıramamasından kaynaklanıyor J
Güzel bir örnek, umarım başınıza gelmez.
public void TopluAktarmaLimaniSefLokDegisiklikEntegrasyonu(List<long> bookingIdList, string islemYeri, long kullaniciId, string islemAdi)
{
TransactionHelper transaction = new TransactionHelper();
transaction.BeginTransaction();
try
{
foreach (long bookingId in bookingIdList)
{
BkgBookingEntity bookingEntity = new BkgBookingEntity(bookingId);
DenizBookingKonsimentoEntity denizBookingKonsimentoEntity = new DenizBookingKonsimentoEntity(bookingEntity);
string entKod = "";
entKod = EntegrasyonKoduDondur(denizBookingKonsimentoEntity.DokDenizKonsimentosu.YuklemeLimaniLokasyonId);
if (BookingBusinessEntity.LimanXLimaniMi(denizBookingKonsimentoEntity.DokDenizKonsimentosu.YuklemeLimaniLokasyonId))
{
if (bookingEntity.GonderildiMi == true)
{
BookingBusinessEntity bookingBusinessEntity = new BookingBusinessEntity(bookingEntity);
List<long> ekpIdList = GonderilecekEkipmanlariBul(bookingEntity, transaction);
if (ekpIdList.Count > 0)
{
string dosyaDurumKodu = ((int)EntegrasyonEnumarations.DosyaDurumKodlari.Replace).ToString();
BookingAnaSchemaDoldur(bookingId, ekpIdList, null, entKod, dosyaDurumKodu, false, islemYeri, kullaniciId, islemAdi); //FILE SERVER ERISIMI
}
}
else
{
YuklemeLimaniXLimaninaDondugundeXeYeniGonderim(denizBookingKonsimentoEntity, islemYeri, kullaniciId, islemAdi);
}
}
else
{
if (bookingEntity.GonderildiMi == true)
{
BookingBusinessEntity bookingBusinessEntity = new BookingBusinessEntity(bookingEntity);
List<long> ekpIdList = GonderilecekEkipmanlariBul(bookingEntity, transaction);
string dosyaDurumKodu = ((int)EntegrasyonEnumarations. DosyaDurumKodlari.Cancellation).ToString();
BookingAnaSchemaDoldur(bookingId, ekpIdList, null, entKod, dosyaDurumKodu, false, islemYeri, kullaniciId, islemAdi);
bookingEntity.GonderildiMi = false;
bookingEntity.Save();
}
}
}
transaction.CommitTransaction();
}
catch (Exception a)
{
transaction.RollbackTransaction();
throw a;
}
finally
{
transaction.DisposeTransaction();
}
}
Hiç yorum yok:
Yorum Gönder