Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
[ÇÖZÜLDÜ] Programın SSD ve SATA Disklerde çalışma performansı
#1
Selamlar arkadaşlar

Yine eğlenceli bir problemle karşı karşıyayım :Sad
Server üzerinde kurulu olan bir MYSQL veritabanı ile birlikte kullanımış olduğum bir raporlama programı var. Server Windows 2018 işletim sistemi ve 16 GB ram ve SATA disk mevcut.
Programın rapor tamamlanma süresi :
Server üzerinde : 18 saniye,
SSD li I7 işlemcili 8 GB Ramli Client üzerinde : 28 saniye,
SATA lı I7 işlemcili 8 GB Ramli Client üzerinde : 4 dakika,
SATA lı I5 işlemcili 4 GB Ramli Client üzerinde : 5 dakika,
SATA lı I3 işlemcili 4 GB Ramli Client üzerinde : 6 dakika,

MYSQL performans ayarlarını elimden geldiğince düzelttim. Ama çok yavaş. Tablomdaki kayıt sayısı, 9 Milyon.
Konu ile ilgili olarak bir fikriniz varsa paylaşmanızı rica ederim. Performansı daha nasıl arttırabilirim? Ya da ekstradan yapmam gereken bir düzenleme mevcut mudur?
“En uzun yolculuklar bile, tek bir adımla başlar.” Lao Tzu
Cevapla
#2
Merhaba
Kardeş tek bir neden söylemek zor. Ama en belirgini indexlerini iyi tanımlamış olman lazım. özelliklede clustered index. ayrıca mevcut indexlerinde parçalanmalar olabilir rebuild etmen faydalı olur. Raporlamadaki sorgu kodlarının dinamikliğide önemli. ama öncelikle indexleri kontrol etmenı tavsıye edrım
Cevapla
#3
SSD dışk sayısını 4 çıkarıp bunları REID 0 Yapabilirsin, daha riskli bir yöntemde RAM disk veritabanı taşışabilirsin.
Cevapla
#4
Yazdıklarına göre disk ile çok alakası yok gibi görünüyor.
Server de SATA disk var ve 18 saniye
i7 SSD makinada 28 saniye

Diskden ziyade server ram miktarı daha fazla. Belkide ihtiyacın olan ram takviyesidir.

Ama yukarıda da belirtildiği gibi tablo, index, raporlama yapısı ve kullandığınız sorgu tekniği hakkında fikir sahibi olmadan genel tavsiyeler haricinde fazla bir şey söylemek zor gibi.
Cevapla
#5
(20-11-2019, Saat: 15:55)wiseman Adlı Kullanıcıdan Alıntı: Selamlar arkadaşlar

Yine eğlenceli bir problemle karşı karşıyayım :Sad
Server üzerinde kurulu olan bir MYSQL veritabanı ile birlikte kullanımış olduğum bir raporlama programı var. Server Windows 2018 işletim sistemi ve 16 GB ram ve SATA disk mevcut.
Programın rapor tamamlanma süresi :
Server üzerinde : 18 saniye,
SSD li I7 işlemcili 8 GB Ramli Client üzerinde : 28 saniye,
SATA lı I7 işlemcili 8 GB Ramli Client üzerinde : 4 dakika,
SATA lı I5 işlemcili 4 GB Ramli Client üzerinde : 5 dakika,
SATA lı I3 işlemcili 4 GB Ramli Client üzerinde : 6 dakika,

MYSQL performans ayarlarını elimden geldiğince düzelttim. Ama çok yavaş. Tablomdaki kayıt sayısı, 9 Milyon.
Konu ile ilgili olarak bir fikriniz varsa paylaşmanızı rica ederim. Performansı daha nasıl arttırabilirim? Ya da ekstradan yapmam gereken bir düzenleme mevcut mudur?
Sunucu üzerine SSD disk takın ve DB'yi onun üzerine taşıyın, bunun yanısıra sunucunun bellek miktarını artırın, MySQL'in bunu kullanmasını sağlayın (MySQL'in bu özelliklerini bilmediğim için bunu söyledim, örneğin MSSQL tüm sistem kaynaklarını sonuna kadar kullanır, ama FireBird için bellek ayarlamaları yapmak gerekir, belki MySQL'de de böyle bazı özellikler vardır diye yazdım). MySQL'de Inno DB formatı eski formata göre daha yavaş bunu da göz önünde bulundurun. Ama eski formatta StoredProcedure'ler ve trigger yoktur diye hatırlıyorum.
Cevapla
#6
Merhaba , 
Bir çok bağımlılığı olduğu için sorununuzu çözer mi emin değilim ancak yeri gelmişken ilginç bir MySQL sistem değişkeninden bahsetmek istiyorum.

optimizer_search_depth :
Doğru index leri eklemek ilişkileri doğru kurmak kısacası veritabanını en iyi şekilde tasarlamak her ne kadar DBA nın görevi olsa da üreticiler optimizasyon konularında tasarımcılara yardımcı olduğunu düşündüğü varsayılan bazı özelliklerle karşımıza çıkıyor. Bunlardan birisi de MySQL in query optimizatorünün nasıl çalışacağını (daha doğrusu en iyi yolu bulmak için kaç yol deneyeceğini) belirleyen bu değişken. Bu sistem değişkeni varsayılan 62 değeriyle geliyor , siz sorgunuzu çok doğru indexlerle WHERE kısmında ki alan sıralamalarının index uyumluluğuna kadar dikkat ederek yazmış olsanız bile optimizator kendince mükemmelliyetçi davranarak arayışlarını sürdürüyor. https://dev.mysql.com/doc/refman/5.6/en/...ation.html bu yazıda bahsedildiği gibi işi optimizatöre bırakırsak bazı durumlarda sorgunun çalışması günler Smile sürebilirmiş.  Benim önerim ve bir fiil yaşayarak defayen tecrübe ettiğim nokta eğer sorgularınızı kurallara uygun olarak tasarladığınıza eminseniz optimizer_search_depth  değişkeninin değerini en fazla 4 olarak belirleyin. Bu sayede optimizatör haddini bilecek ve size güvenerek sizin çalıştırma planınızı icra edecek. bunu bir deneyin derim.

iyi çalışmalar.
Cevapla
#7
Merhaba,
Süreler üzerinden konuşuyorum : Sunucu ve 28 saniye süren istemci gigabit, ~5 dakika süren istemciler ise ağa 100Mbit ile bağlı olabilirler.
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
Cevapla
#8
Arkadaşlar bu sorununm çok ciddi şekilde devam ediyor. Nasıl bir çözüm bulacağımı bilmiyorum. Müşteri tarafında ciddi problem olarak karşıma döndü. Clientdataset ile de denemeyi düşündüm. Daha süratli olarak bu veriyi nasıl sorgulayabilirim? 9 milyon verinin ağ üzerinden sorgulanması bu kadar yavaş olmamalı diye düşünüyorum.
“En uzun yolculuklar bile, tek bir adımla başlar.” Lao Tzu
Cevapla
#9
Merhaba @wiseman
Biraz daha detay verirsen nokta atışı çözüm önerileri alma ihtimaliniz daha fazla olur.
Siz donanım üzerinde yoğunlaştınız, buda bir seçenek ama sorgu teknigi database konfigrasyonu vb durumlar ile belki problem çözülecek.

9 Milyon veri tek bir tablodamı bulunuyor ve siz sadece bu tablodanmı sorgulama yapıyorsunuz?
Normal bir sorguda bu 9 milyon kaydın ne kadarı sorgu sonucu olarak dönüyor?
Sorgunuzda join kullanıyormusunuz?
Where cümlenizin içeriği nasıl?
Sorgu cümleniz storedprocedure şeklindemi yoksa cümleniz uygulama içinde bir query nesnesi içindemi?
.....

Uzakdaki bir sunucudan evdeki makinadan yaptığım test sonucu, yaklaşık 41M lik bir tablodan örnek sorgu cevap süresi


Mysql Cluster 7.3.2 da test edildi. (Open Suse 128GB ram, Raid 6 SSD diskli makina)

explain select * from hareketler
where zaman = '2015-02-18 12:52:17'
> OK
> Time: 0,067s



Benzer test kendi makinamda yaptım. Bu sefer 19M kayıt var, ve sorgu sonucunda 75 bin satır cevap döndü

Test : Mysql Cluster 7.3.2 (Windows 10  16GB Ram M2 Diskli makina)

select * from hareketler where zaman <'2013-06-03 12:11:09'
> OK
> Time: 0,431s
Cevapla
#10
(24-11-2019, Saat: 21:21)frmman Adlı Kullanıcıdan Alıntı: Merhaba @wiseman
Biraz daha detay verirsen nokta atışı çözüm önerileri alma ihtimaliniz daha fazla olur.
Siz donanım üzerinde yoğunlaştınız, buda bir seçenek ama sorgu teknigi database konfigrasyonu vb durumlar ile belki problem çözülecek.

9 Milyon veri tek bir tablodamı bulunuyor ve siz sadece bu tablodanmı sorgulama yapıyorsunuz?
Normal bir sorguda bu 9 milyon kaydın ne kadarı sorgu sonucu olarak dönüyor?
Sorgunuzda join kullanıyormusunuz?
Where cümlenizin içeriği nasıl?
Sorgu cümleniz storedprocedure şeklindemi yoksa cümleniz uygulama içinde bir query nesnesi içindemi?
.....

Uzakdaki bir sunucudan evdeki makinadan yaptığım test sonucu, yaklaşık 41M lik bir tablodan örnek sorgu cevap süresi


Mysql Cluster 7.3.2 da test edildi. (Open Suse 128GB ram, Raid 6 SSD diskli makina)

explain select * from hareketler
where zaman = '2015-02-18 12:52:17'
> OK
> Time: 0,067s



Benzer test kendi makinamda yaptım. Bu sefer 19M kayıt var, ve sorgu sonucunda 75 bin satır cevap döndü

Test : Mysql Cluster 7.3.2 (Windows 10  16GB Ram M2 Diskli makina)

select * from hareketler where zaman <'2013-06-03 12:11:09'
> OK
> Time: 0,431s

Selamlar,
Ağdaki veritabanı mysql ve verilerim tek tabloda 3 field olarak tutuluyor. Ad, zaman, deger. AD=String, ZAMAN=datetime, DEGER=numeric
Tabloki sorgum şu:
Select ad,zaman, deger from tbldegerler where ad='sayac1' and zaman between '2019-11-01 00:00:00' and '2019-11-24 23:59:00'
buradaki sorgu değerlerinin toplamından alınan sonuçları, client makinedeki sqlite veritabanına yazıyorum.
bu sorguyu 326 farklı sayaç için dönderip, değerleri 326 defa sqlite tabloma yazmış oluyorum.
benim claptopumda işlemler 40 saniyede tamamlanmış oluyor. (SSD, 16 GB RAM, I7 işlemci)
müşteri clientinde 5 dakika sürüyor. (SATA, 4 GB RAM, I5 işlemci)
“En uzun yolculuklar bile, tek bir adımla başlar.” Lao Tzu
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  [ÇÖZÜLDÜ] - Windows Servis Başlatma Yetki Hatası hi_selamlar 3 993 22-01-2020, Saat: 15:51
Son Yorum: hi_selamlar
  [ÇÖZÜLDÜ] SQLite'dan MySQL'e Aktarma ? Mr.Developer 3 1.266 22-07-2019, Saat: 20:31
Son Yorum: Mr.Developer
  (ÇÖZÜLDÜ] MySQL Date_format komutu wiseman 1 916 30-05-2019, Saat: 11:30
Son Yorum: wiseman
  ÇÖZÜLDÜ - Tarih ve saat aralığı sorgulama wiseman 2 1.091 19-03-2019, Saat: 10:59
Son Yorum: wiseman



Konuyu Okuyanlar: 1 Ziyaretçi