Webmaster ve Yazılım Geliştiriciler
Büyük Dataları Yönetebilmek. (Performans) ( SQL - Server - Cache)
Büyük Dataları Yönetebilmek. (Performans) ( SQL - Server - Cache)
-
Merhaba,
Şöyle bir sıkıntım var. Normal bir site yaparsın üyelik olur kategoriler olur ilanlar olur ve bunları yönetirsin. Buraya kadar zaten herkesin yaptığı işlemler. Bunu yapanlar hiç performansı düşünmez direk select * from uye şeklinde çalışır.
Ancak 2 milyon üye 20.000 kategori tarzında 100.000 ürün olunca bir sitede burda normal yollardan siteyi yapınca ciddi performans sıkıntı yaşanıyor.
Gerek cache yapısı, gerek daha iyi optimize edilmiş sql sorguları vs vs bunlar haliyle en önemli işler oluyor.
İşte bu konuda eğitim veren bir kurum var mı? Yoksa her konuda kendimiz mi tecrübelenmemiz gerekecek.
Örneğin elimden geldiğince az database'e bağlanıp işlemler yapıyorum, ajax falan kullanıyorum ama fark ettimki eksik olduğum bir konu bu benim.
Bir çözüm sunacaki bir fikir üretecek var mı bu konuda bana?
Teşekkürler
-
yoğun insert olacak tabloları mysql de tut (chat gibi), mssql e göre daha performanslı.
sql sorgularını stored procedure olarak çağır (veya orm kullan o senin için optimize ediyor)
splerin içinde (NOLOCK) kullan (http://www.csharpnedir.com/articles/read/?id=1106)
bunun üstü artık senin serverlarına bağlı. siktiri boktan bi server ile 250 k kişiyi kaldırıcam diye kasma kaldıramazsın.
az kaynakla(parayla) kaldırmak istiyorum dersen mssql/mysql olmaz. mesela nosql olur veya benzer veritabanları
insanlık artık bu yeni veritabanlarını kullanmaya doğru gidiyor.
mssql için gerek kaynak masrafı gerek lisans masrafları çok yüksek
-
SharpShooter bunu yazdı:
-----------------------------yoğun insert olacak tabloları mysql de tut (chat gibi), mssql e göre daha performanslı.
sql sorgularını stored procedure olarak çağır (veya orm kullan o senin için optimize ediyor)
splerin içinde (NOLOCK) kullan (http://www.csharpnedir.com/articles/read/?id=1106)
bunun üstü artık senin serverlarına bağlı. siktiri boktan bi server ile 250 k kişiyi kaldırıcam diye kasma kaldıramazsın.
az kaynakla(parayla) kaldırmak istiyorum dersen mssql/mysql olmaz. mesela nosql olur veya benzer veritabanları
insanlık artık bu yeni veritabanlarını kullanmaya doğru gidiyor.
mssql için gerek kaynak masrafı gerek lisans masrafları çok yüksek
-----------------------------@SharpShooter
sistemi mssql olarak oluşturdum. Örneğin indexleme yapmadım hiç. Öncedende yapmadığım birşeydi zaten. Tabloyu dizayn kısmında açıp sutunu sağ tıkladığımızda index alanı çıkıyor oradan mı yapılan birşey?
Ayrıca hangi ne tür tablolarda hangi sutunlara index yapılmalı?
-
cemnet bunu yazdı:
-----------------------------SharpShooter bunu yazdı:
-----------------------------yoğun insert olacak tabloları mysql de tut (chat gibi), mssql e göre daha performanslı.
sql sorgularını stored procedure olarak çağır (veya orm kullan o senin için optimize ediyor)
splerin içinde (NOLOCK) kullan (http://www.csharpnedir.com/articles/read/?id=1106)
bunun üstü artık senin serverlarına bağlı. siktiri boktan bi server ile 250 k kişiyi kaldırıcam diye kasma kaldıramazsın.
az kaynakla(parayla) kaldırmak istiyorum dersen mssql/mysql olmaz. mesela nosql olur veya benzer veritabanları
insanlık artık bu yeni veritabanlarını kullanmaya doğru gidiyor.
mssql için gerek kaynak masrafı gerek lisans masrafları çok yüksek
-----------------------------@SharpShooter
sistemi mssql olarak oluşturdum. Örneğin indexleme yapmadım hiç. Öncedende yapmadığım birşeydi zaten. Tabloyu dizayn kısmında açıp sutunu sağ tıkladığımızda index alanı çıkıyor oradan mı yapılan birşey?
Ayrıca hangi ne tür tablolarda hangi sutunlara index yapılmalı?
-----------------------------
filtreleme yaptığın alanları indexle. mesela ürünler tablon olsun. burada neye göre filtre yaparsın? ürünidsine göre. o yüzden ürün id ye göre indexleyebilirsin.
aramalar için full text search kullan gibi
-
veritabanını farklı bir makinada tutabilirsin
-
bt akademi iyidir
http://www.btakademi.com/egitim/egitim-katalogu/?id=2&egitim=veritaban%C4%B1-ve-raporlama
-
hocam merhaba
webde bilmemde.
SQL Server ayrı serverde tut yani Application server ile sql server bir arada iyi olmuyor.indexler kullan.tüm bilgileri bir tabloya yazma 3-4 tabloya böl İD lerle sorgula.sp`ler kullan.sistemi temiz tut ve RAM ne kadar yüksek olursa o kadar artı,veritabanında Shrink işlemini bazı aralıklarda yap.sonra veritabanı datalarını multidata şeklinde tut,mesela
data.mdf
yerine data1.mdf data2.mdf bu şekilde.
aklıma gelenler bunlar şimdilik.
-
Selam,
Aramlar için like şuan iş görüyor. Ancak soru şu: Like ile full text search'i karşılaştırdığımız zaman aynı tabloda aynı sutunda arama yapınca burdaki performansı test eden var mı?
Makineleri ayırmayı düşüyorum evet. Sanırım aynı ağda farklı makinalar olması yeterli? Onu zaten server sağlayıcıya anlatsam oda yapabilir herhalde..
bt akedemide olan linke baktım ama genel eğitim yazıyor orda. Benim istediğim daha detaylı...
Shrink ara sıra yapıyorum. Delete komutunun ardında bıraktığı pisliği temizliyor sağolsun :) Ayrıca kökten silmem gerektiğinde bir tabloyu "truncate" komutu ile yapıyorum. Tavsiye ederim.
data1.mdf data2.mdf olayını anlamadım hocam açar mısın biraz?
teşekkürler
-
bu linke bak
http://blog.sqlauthority.com/2009/05/31/sql-server-create-multiple-filegroup-for-single-database/
ayrıca bu blogu takip et istersen çok güzel yazıları var.
-
İndexlemeler çok önemli. Eğer işlemlerin istatistikleri varsa master/slave olarak ayırman daha mantıklı. Mesela okuma işlemleri yazma işlemlerinden fazlaysa okuma işlemleri için ayrı bir sunucu al, eğer yazma işlemlerin daha çoksa yazma işlemlerin için ayrı bir sunucu al. Bunun yanında I/O performansını arttırmak için mssql ile application arasında queue işlemlerini kullan. Bunun için redis temelli çözümleri tercih edebilirsin. Yani o datayı hemen yazman gerekmiyorsa gecikmeli yazabilirsin. Her şekilde de mssql'in aynı donanım üzerinde diğerlerinden her zaman daha sorunlu olacağını bilmen lazım.
-
doganaydin bunu yazdı:
-----------------------------İndexlemeler çok önemli. Eğer işlemlerin istatistikleri varsa master/slave olarak ayırman daha mantıklı. Mesela okuma işlemleri yazma işlemlerinden fazlaysa okuma işlemleri için ayrı bir sunucu al, eğer yazma işlemlerin daha çoksa yazma işlemlerin için ayrı bir sunucu al. Bunun yanında I/O performansını arttırmak için mssql ile application arasında queue işlemlerini kullan. Bunun için redis temelli çözümleri tercih edebilirsin. Yani o datayı hemen yazman gerekmiyorsa gecikmeli yazabilirsin. Her şekilde de mssql'in aynı donanım üzerinde diğerlerinden her zaman daha sorunlu olacağını bilmen lazım.
-----------------------------Database ile application serverı ayırmak kolayda hocam peki bir database'i nasıl ayırırız? Yazacağı zaman şuna okuyacağı zaman buna diye? Facebook gibi sistemlerde öyleydi sanırım?
@omerelili
link için teşekkürler