İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

mssql db sunucuyu cok kasıyor

Senol

0
İyinet Üyesi
Onaylı Üye
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaction score
1
Konum
Bursa
ısrarlar uzerine iyinet in verdiği kodu yeni bir sayfada deneyim bakalım neler olcak :)
 

sitemedya

0
İyinet Üyesi
Katılım
11 Kasım 2004
Mesajlar
284
Reaction score
0
kodlamayı düzgün yaparsan mutlaka ki olacak.
ama senin DB den sağlıklı random yapamayacak. kaybın bu.
kazancın ise 0,001 ms olacak :)
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
ısrarlar uzerine iyinet in verdiği kodu yeni bir sayfada deneyim bakalım neler olcak :)

Aman ha, sitemedyanin yaptigi diger fix leri kaybetme. O kadar emek bosa gitmesin.

Benim verdigim kodu girmen icin ASP kodunda degisiklik yapman gerekiyor!

while i<=40

bolumunun kalkmasi gerekiyor!

Denemekten zarar cikmaz.
En verimli koda deneye deneye ulasiyoruz.
 

Senol

0
İyinet Üyesi
Onaylı Üye
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaction score
1
Konum
Bursa
yok sitemdyanın verdiği kodu bozmayacağım ayrı bir sayfada deniycem.
 

sitemedya

0
İyinet Üyesi
Katılım
11 Kasım 2004
Mesajlar
284
Reaction score
0
+ tableda kayıt sayısı arttıkça, "DB response" ciddi derecede yavaşlar.

Benzer komut olan MYSQL deki RAND() için de aynı tehlike sözkonusudur...

Kod:
http://www.titov.net/2005/09/21/do-not-use-order-by-rand-or-how-to-get-random-rows-from-table/
 

KerneL32

0
İyinet Üyesi
Katılım
8 Mart 2005
Mesajlar
1,247
Reaction score
0
Oncelikle soyledigim seyi art niyetli soylemedim. Ama esnek bir cevabi herkesin bilmesini istedigim icin soyledim.

@iyinet @sitemedya nin da dedigi gibi NewID() MsSQL de rastgele kayitlar icin oldukca yoran bir islem. CPU kullanimi, ram kullanimi oldukca artar bu islemde. ve yine @sitemedya 'nin dedigi gibi mssql bu konuda biraz pasif kalmis durumda.
 

gilbaz

0
İyinet Üyesi
Katılım
7 Ocak 2006
Mesajlar
36
Reaction score
0
Konum
istanbul
NewID() yük getiren bir işlemdir katılıyorum ancak MSSQL'de en eşit dağılımlı rastgele kayıtları getiren işlemdir.

Ayrıca arkadaşın kodunu incelediğiniz zaman görüyoruz ki rastgele kayıt işlemini asp yani kod kısmında yapıyor.
MSSQL de yapılmaması hız yönünden avantaj sağlar.

Bu kodda sadece akla şu geliyor bu kayıtların arasında hiç boşluk yok mu yani hepsi 1,2,3...N şeklinde birer birer mi artıyor eğer öyle değilse 40 yerine mesela 39 yada daha düşük kayıt listelenebilir.

Diğer bir yandan 40 kez "farklı" sorgulama yapıyorsun bunun da veritabanında bir maaliyeti olacaktır, bu maaliyeti sql profiler kullanarak NEWID() ile karşılaştırmanı öneririm.

Bir kaç arkadaşım NewID tamamen rastgele getirmez yazmış, MSSQL'de en iyi rastgele çözümünü sunan fonksiyon budur.
Eğer hız sizin için önemliyse şu şekilde bir komutu da deneyebilirsiniz, fark ederseniz arkadaşın aspde kullandığıyla hemen hemen aynı... Tek fark aynı işlemler asp de değil mssql de yapılıyor. (asp de yapılması daha uygun zaten)

Kod:
SELECT TOP 1 file_id, cat_id, file_name FROM files WHERE durum = 1 and file_id >= (Select Max(file_id)*Rand() From files WHERE durum=1)
 

Senol

0
İyinet Üyesi
Onaylı Üye
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaction score
1
Konum
Bursa
konuyu musadenizle yeniden canlandırmak istiyorum;
kategori sayfalarım gereğinden fazla yavaş acılıyor ne yaptıysam halledemedim mssql den anlayan birisi yardımcı olabilirmi

PHP:
<%Response.Buffer=1%>
<!--#include file = "frame.asp" -->
<%
cat_id = guvenlik(REQUEST.QUERYSTRING("cat_id"))
IF Not IsNumeric(REQUEST.QUERYSTRING("cat_id")) THEN
response.write "L?fen Ge?rli bir ID numaras?girin."
response.end
END IF
page1 = Request.QueryString("pege1")
page2 = Request.QueryString("pege2")
order_by = Request.QueryString("order_by")
if order_by = "" then
order_by = "file_id desc"
end if


page = Request.QueryString("page")
if page<>"" then
page=page
else
page=1

end if
Set rrs = Server.CreateObject("ADODB.Recordset")
nere = "Select * From cats where cat_id = "&cat_id&""
rrs.Open nere, conn, 1, 1


set ii = conn.execute("Select count(*) as toplam From files where cat_id="&cat_id&" and durum= 1")
toplamprogram = ii("toplam")
ii.close
set ii = nothing
set ii = conn.execute("select * from files where durum= 1 order by hit desc")

set yn = conn.execute("Select * From files where durum = 1 order by file_id desc")



Set ed = Server.CreateObject("ADODB.Recordset")
nere = "Select * from files where cat_id = "&cat_id&" and durum = 1 and tavsiyeli = 1"
ed.Open nere, conn, 1, 1
 
set tum = Server.CreateObject("ADODB.Recordset")
tumu = "Select cat_name,cat_id From cats"
tum.open tumu,conn,1,1
if not ed.EOF then
edx = ed.Recordcount
Randomize
id = (Int(edx * rnd)+0)
ed.Move(id)
end if
Set rs = Server.CreateObject("ADODB.Recordset")
nere = "Select * From files where cat_id = "&cat_id&"  and durum = 1 "&page1&" "&page2&" order by "&order_by&""
rs.Open nere, conn, 1,1
if page = "" then
intpage = 1
else
intpage = page
end if
rsx = rs.RecordCount
rs.PageSize = 10
rs.CacheSize = rs.PageSize
if not rs.EOF then
rs.AbsolutePage = intpage
end if
    if yn.eof then 
  	response.write ("wrong id"):
    response.end
  	else
%>

yukarıdaki kodları nasıl optimize edebiliriz ?

kodlar mssql veritabanı uzerinde calışıyor
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
Gereğinden fazla SQL kullanılmış ve SQL kodunda güvenlik açığı var.
Gereksiz SQL ler temizlenip, güvenlik açığı kapatıldıktan sonra, index tanımlamaları da kontrol edilir eksik varsa indexler yaratılır.
 

Senol

0
İyinet Üyesi
Onaylı Üye
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaction score
1
Konum
Bursa
oncelikle alakanızdan dolayı teşekkurler mssql veri tabanını henuz yeni öğrenmeye başladım site daha onceden ms acces veritabanı kullanıyordu program sayısının falalığı ve biraz ileriyi düşünerek db yi mssql e import ettim kodlarda gerekli değişiklikleride yaptım mssql veritabanında index tanımlamayı bilmiyorum aslına bakacak olursak nasıl tanımlanıyor index onuda bilmiyorum daha cok oğrenceklerim var mssql hakkında

bu arada site ingilizce olduğu için buraya yazmak isdemiyorum adresi özür dilerim
 

Senol

0
İyinet Üyesi
Onaylı Üye
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaction score
1
Konum
Bursa
yokmu şimdi koca forumda arkadaşlar asp+mssql den anlayan :)
 

Senol

0
İyinet Üyesi
Onaylı Üye
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaction score
1
Konum
Bursa
cat.asp deki sorgular bironceki sayfadakiler
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
3 db ninde tüm tablolarında hiç index yokmuş.
20 kadar index yarattım, hepsi de gerekli indexler.
Şimdi sayfalar çok daha hızlı açılyor, hatta eskisine göre uçuyor.
SQL Kodları da optimiz et demiştim ama çok anlamıyorsan bırak, çu hali ile iyi çalışıyor.
 

Senol

0
İyinet Üyesi
Onaylı Üye
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaction score
1
Konum
Bursa
indexler ve yardimlariniz için teşekkürler daha önce mssql deneyimim hic olmamıştı normalde bu kodlar acces veritabanına göre yazıldı ve acces veritabanında gayet güzel ve hızlı calışıyor sql e gecince biraz afalladı site aslında siteyi sql uyumlu hale tamamen ben getirdim nasıl yaptım onuda bilmiyorum :p yardimlar için tekrar teşekkurler
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Üst