Konuyu Oyla:
  • Derecelendirme: 4.5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Veritabanı Kullanımını Denetlemek
#1
Merhaba arkadaşlar, bugün bana yine lazım oldu. Bilgi güncelleme açısından sizinle de paylaşayım dedim.
Firebird kullanan programlarınızda, veritabanı ile ilgili bir işlem yapmadan önce (backup-restore gibi, veya index güncelleme gibi ) veritabanına kaç kullanıcının bağlı olduğunu görmek gerekebilir. DBWorkbench veya IBEXPERT gibi programlar bunu gösterebiliyor, fakat bu programları açma durumu olmadığını ve indexleme işleminin program içinden yapıldığını varsayalım.
Çoğu programda "Veri Güncelleme", "Veri Kontrolü" vb. isimlerle de aslında aynı işlem yapılır. Veriler elden geçirilir, silinen kayıtlar komple temizlenir, indexler tazelenir.

Tabi bu işlemlerin yapıldığı sırada da programın kullanılmaması tavsiye edilir. Bende çok yaşadım, kullanıcılara programdan çıkın dememize rağmen aşağıda simge durumuna indiren de oluyor, çıktım diye sadece kullandığı ekrandan çıkan da oluyor. Yani bir şekilde veritabanına kimlerin bağlı olduğunu anlamamız lazım.

Çok uzattım, kısaca şöyle :

[Ars=sql]select * from mon$attachments[/ars]

yazdığımızda, veritabanına kaç kullanıcının bağlı olduğunu görebilirsiniz. Yalnız burada listelenen kayıtlar içinde SİZ de bağlı olduğunuz için her zaman 1 bağlantı açık görünecektir. Bu sebeple bu sorguyu yazarken ;

[Ars=sql]SELECT COUNT(*) FROM MON$ATTACHMENTS WHERE MON$REMOTE_ADDRESS<>'127.0.0.1'[/ars]

şeklinde yazarsanız, kendi lokal bağlantınız dışında kaç kullanıcı bağlı diye kontrol  edebilirsiniz. Count(*) yerine * yazdığınızda dönen değerler içinde yer alan MON$REMOTE_PROCESS değeri de işe yarar bir veri çünkü veritabanına bağlanan programın hangisi olduğunu da orada yazıyor.

Aynı şekilde, veritabanına bağlı olan kullanıcıların hangi SQL sorgularını çalıştırdığını da ;

[Ars=sql]select * from mon$statements[/ars]

ile görebilirsiniz. Bilenler bilir, hani SQL Server'da Profiler diye bir şey var. Kullanıcıların çalıştırdığı SQL sorgularını görebiliyorsunuz. Firebird'de de aynı işi bu sorgu ile yapabiliyorsunuz. Hata ararken ve sunucuda çalışan SQL kodlarını izlemek gerektiğinde çok işe yarıyor.

Faydalı olması dileğiyle.

E.O.F.  (End Of Fun )
Rolleyes
Cevapla
#2
Merhaba Ramazan Bey,
select * from mon$statements ile kullanilan sorgulalari gorebiliyoruz. Bu sorgularin nekadar kaynak kullandigi ile ilgili ek bilgi veren bir sorgu mevcut mudur acaba? (ram,islemci vs..)
Amacim program islerken sistemin kasilmasina sebep olabilecek sorgulari veya bolumleri tesbit etmek.
Teşekkürler.
Cevapla
#3
Merhaba, maalesef Firebird'ün kendi içerisinde böyle bir özellik yok. Bu tip analizleri sadece üçüncü parti programlar ile yapabilirsiniz. Mesela Upscene isimli bir firmanın FBTraceManager isimli bir ürünü var.Bununla her bir sorgu bazında ya da komple sunucu bazında analizlere ulaşabiliyorsunuz.

Çok basit düzeyde bilgiler için, IBExpert, DBWorkbench gibi programlar kullanırken bir sorgu çalıştırdığınızda o sorgunun hazırlanma süresini ve ne kadar kaynak tükettiğini gösteren bölümleri var. Mesela ben DBWorkbench kullanıyorum, orada bir sorgu çalıştırdığım zaman "Statistics" bölümünde sorgunun tükettiği kaynakları gösteriyor. Ama dediğim gibi, kapsamlı analizler istiyorsanız üçüncü parti programlar kullanmanız gerekir.

Teşekkürler.

E.O.F.  (End Of Fun )
Rolleyes
Cevapla
#4
Yeri gelmişken bende bişi sorayım ramazan hocam,
MON$ATTACHMENTS ve MON$TRANSACTIONS ile bağlı kullanıcılar ve bu kullanıcıların aktif transactionlarını görebiliyoruz.

Bağlı kullanıcıların sürekli aktif transaction u olması doğalmıdır? Ben kontrol ettiğimde (5 client kullanıyor) bağlı her kullanıcının 1 veya 2 adet aktif transaction u olduğunu görüyorum. Halbuki clienti açıp sadece giriş yapıp ana ekranda bekletiyorum programı.
WWW
Cevapla
#5
Teşekkürler
Cevapla
#6
(27-02-2017, Saat: 16:03)esistem Adlı Kullanıcıdan Alıntı: Yeri gelmişken bende bişi sorayım ramazan hocam,
MON$ATTACHMENTS ve MON$TRANSACTIONS ile bağlı kullanıcılar ve bu kullanıcıların aktif transactionlarını görebiliyoruz.

Bağlı kullanıcıların sürekli aktif transaction u olması doğalmıdır? Ben kontrol ettiğimde (5 client kullanıyor) bağlı her kullanıcının 1 veya 2 adet aktif transaction u olduğunu görüyorum. Halbuki clienti açıp sadece giriş yapıp ana ekranda bekletiyorum programı.

Doğrudur hocam, hiç bir şey yapmasanız da veritabanına giriş yaptığınızda sunucu tarafında otomatik 2 adet transaction açıyor. Şimdi size cevap yazmadan önce tekrar denedim, tüm kullanıcıları kapattım, Firebird'ü durdurdum yeniden başlattım, DBWorkbench ile veritabanına giriş yapıp tekrar sorguladığımda yine 2 adet transaction olduğunu gördüm. Muhtemelen Firebird kendi içinde sorgularda veya sorgu sonuçlarında kullanmak için otomatik olarak sistem transaction'ı açıyor olabilir.

Yani 2 adet transaction hep var. Bir de, farklı kullanıcılar firebird'e login olduğunda onlar içinde aynı şekilde transaction'lar açılıyor. Transaction, siz veritabanından bağlantısı kesinceye kadar da açık kalıyor. Hiç bir şey yapmasanız da sunucu tarafında bağlantı olduğunu görebiliyorsunuz. Kod tarafında connection string yazılırken TIMEOUT değerine bağlı olarak da transaction açık görünebilir. Ne zaman TIMEOUT olursa o zaman transaction da kopuyor.

Eğer transaction sayısına bakarak aktif kullanıcı sayısına ulaşmak istiyorsanız o sizi yanıltır hocam, ilk mesajımda örnek verdiğim gibi mon$attachments ile tam sonuca ulaşırsınız.

Saygılarımla.

E.O.F.  (End Of Fun )
Rolleyes
Cevapla
#7
Bilgilendirme için teşekkürler hocam,
bu aralar ağda sık sık kopmalar yaşanıyor, VT bozulması yaşanacak diye korkuyorum, gerçi server makinada güç kaynağı var ama client lerde işlem sırasında bazen (stok araken mesela) "index is out of date" hatası almaya başladım, önlem için neler yapabilirim onu araştırıyorum.
WWW
Cevapla
#8
(27-02-2017, Saat: 16:46)esistem Adlı Kullanıcıdan Alıntı: Bilgilendirme için teşekkürler hocam,
bu aralar ağda sık sık kopmalar yaşanıyor, VT bozulması yaşanacak diye korkuyorum, gerçi server makinada güç kaynağı var ama client lerde işlem sırasında bazen (stok araken mesela) "index is out of date" hatası almaya başladım, önlem için neler yapabilirim onu araştırıyorum.

Rica ederim hocam. "Index is out of date" hatası alıyorsanız, IBExpert veya DBWorkbench gibi bir programla indeksleri Deactivate edip tekrar activate yapmayı dener misiniz? Başka programlarda "Recreate indexes" diye de geçebiliyor. Bu indexleri yeniden oluşturacaktır. Muhtemelen sorununuzun düzeleceğini sanıyorum.

z32Nd7.gif

Saygılarımla.

E.O.F.  (End Of Fun )
Rolleyes
Cevapla
#9
Hocam anlık hata veriyor, misal faturaya stok eklicek arkadaş, stok adına göre arıyor (edit on change olayında) bir anda index is out of date veriyor, fatura formundan çıkıp programı kapat deyince de program komple bekleme durumuna geçiyor, sonlandırıp rogramı yeniden başlatınca sorun kalmıyor bir süre.
loglara baktığımda da;

ASLAN_SERVERM (Server) Mon Feb 27 16:47:55 2017
INET/inet_error: read errno = 10054

10054 inet hatası veriyor. Sanırım bizim modem de problem var yada bağlı makinelerin birinde bi problemden dolayı ağda sorun yaratıyor.
WWW
Cevapla
#10
(27-02-2017, Saat: 17:10)esistem Adlı Kullanıcıdan Alıntı: ASLAN_SERVERM (Server) Mon Feb 27 16:47:55 2017
INET/inet_error: read errno = 10054

10054 inet hatası veriyor. Sanırım bizim modem de problem var yada bağlı makinelerin birinde bi problemden dolayı ağda sorun yaratıyor.

Hocam bahsettiğiniz hata mesajı Firebird'ü kullanan herkeste vardır. Firebird'ün klasörü içinde bulunan Firebird.Log dosyasını inceleyenler mutlaka bu hatadan onlarca görecektir. Bu hata Firebird server'ın aşırı yüklendiği durumlarda da çıkabiliyor. Modem ve ağ sorununu da mutlaka bir kontrol edin ama tek suçlu onlar değil. Mesela, bizim 20 kullanıcılı bir müşterimiz var. Kullanıcılar programın muhtelif yerlerinde kayıt girerken veya güncellerken, 2-3 kişi de sistemi inanılmaz derecede yoran herhangi bir rapor aldığında (kar/zarar gibi, envanter gibi ) aynı hatalar ile bizde karşılaşıyoruz. Siz indexleri düzenleyip tekrar bir deneyin isterseniz.

Bu arada hocam, indexleri düzenlemek için illa ki üçüncü parti programlara da ihtiyaç yok. Program içinde bir yerde kullanmış olduğunuz her index için tek tek
önce :
ALTER INDEX indeksinadı INACTIVE;

sonra da
ALTER INDEX indeksinadı ACTIVE;

derseniz de aynı işi yapar. Tabi o esnada kimsenin programı kullanmaması şartıyla.

Saygılarımla.

E.O.F.  (End Of Fun )
Rolleyes
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  veritabanı kopyalanması sadikacar60 9 2.130 09-12-2021, Saat: 19:28
Son Yorum: sadikacar60
  Firebird veritabanı güvenliği Hk! ozcanm 12 13.561 01-03-2021, Saat: 00:48
Son Yorum: akuyumcu63
  FIFO veritabanı mantığı Aktolgali 12 4.001 11-02-2021, Saat: 08:57
Son Yorum: esistem
  Kod ile veritabanı oluşturmak Aktolgali 6 4.099 23-06-2020, Saat: 07:31
Son Yorum: MugenPower
Photo veritabanı düzeltme akuyumcu63 4 3.641 26-05-2020, Saat: 19:25
Son Yorum: akuyumcu63



Konuyu Okuyanlar: 1 Ziyaretçi