etil alkol rp satın al
chat ege.net

mssql db sunucuyu cok kasıyor

Senol

Onaylı Üye
Katılım
25 Haz 2005
Mesajlar
4,856
Beğeniler
1
Konum
Bursa
#1
herkese merhaba kendime ait sunucumda www.eudownload.net adında bir sitem var site mssql veri tabanı ile calışıyor ve bu sitenin tikil hiti cok az olmasına rağmen bu veritabanı sunucuya cok ağır bir yuk bindiriyor bu veritabanı icin ne yapabilirim ne icin kasabilir bu veritabanı sunucudaki cpu kullanımını %100 e kadar cıkartıyor bu db bilgili arkadaşların yardımlarını bekliyorum saygı ve sevgi ile
 

sitemedya

Profesyonel
Katılım
11 Kas 2004
Mesajlar
284
Beğeniler
0
#2
öncelikle "SQL Profiler" dan bi izleme yap. bakalım "kasan" query hangisi?
 

sitemedya

Profesyonel
Katılım
11 Kas 2004
Mesajlar
284
Beğeniler
0
#5
bu değil. sen yanlış yere bakmışsın :)

SQL Server Enterprise Manager'i aç. Tools menusunde SQL Profiler i aç. File / New / Trace yap. Db bilgilerini gir ve izlemeye başla. Buradaki ayarlar ile kısıtlama yaparsan aradığını daha rahat bulursun. Özellikle 2 saniyeyi geçen query lere bi bak.
Eğer sorunun kaynağı querylerden değilse, site kapalıyken de mssql %100 oluyormu? webserver ile mssql server aynı networktemi arada switch varmı, vs.. daha fazla bilgi vermen gerekecek...
 

Senol

Onaylı Üye
Katılım
25 Haz 2005
Mesajlar
4,856
Beğeniler
1
Konum
Bursa
#6
oncelikle sunu soyleyeyim siteyi kapattığım zaman sunucu normal calışıyor sql ve web aynı sunucudalar
 

Senol

Onaylı Üye
Katılım
25 Haz 2005
Mesajlar
4,856
Beğeniler
1
Konum
Bursa
#7
az once anlattığını yaptım sonuclar resimdeki gibi ve site kapalı iken sql ve sunucu kasılmıyor webserver ve sql server ikiside aynı sunucu uzerinde barınıyorlar

 
Katılım
8 Mar 2005
Mesajlar
1,247
Beğeniler
0
#8
http://forum.iyinet.com/422777-post5.html

Kisa bir bilgi vermistim.

Daha fazlasi icin sunu da soylemek isterim.
* Kullanmayacagin bilgileri tablodan cekmemelisin ( SELECT * FROM TABLO ... ) yerine ( SELECT id, kategori, isim FROM TABLO ... ) seklinde cekmen.
* Connection pooling kullanman.
* Birden fazla tabloyu ayni anda kullanacagin zaman tablolari iliskilendirmen.
* Stored prodecture kullanman.
* Cok fazla kayit varsa like kullanacagin bolgelerde like degil de fulltextsearch kullanman. ( Arama motorlari genelde full text search kullanir bu yuzden bu kadar fazla veriyi bu kadar hizli getirir. )

vs. vs. vs. Query Analy. den soyledikleri gibi CPU degeri en yuksek olan sorguyu gosterirsen buna gore bir islem yapmak ve cozum uretmek daha mantikli olacaktir.

Saygilar.
 

sitemedya

Profesyonel
Katılım
11 Kas 2004
Mesajlar
284
Beğeniler
0
#9
kernel32 bahsettiklerin zaten "must be" şeyler. trdownload un sorunu başkaydı. hallettik.
benzer sorunları olanlar bana pm atabilir.
 
Katılım
8 Mar 2005
Mesajlar
1,247
Beğeniler
0
#10
@sitemedya sadece sorunu olanlarin sorununu halletmek icin cevap yazilmaz. Ayni sorun ile karsilasabilecekler icin de karsilasmamalari icin cevap yazilir.
 

iyinet

Administratör
Katılım
2 Eyl 2002
Mesajlar
5,021
Beğeniler
53
Konum
Gaziantep
#11

Senol

Onaylı Üye
Katılım
25 Haz 2005
Mesajlar
4,856
Beğeniler
1
Konum
Bursa
#12
Kernel32 nin de dedigi gibi, sitemedya bu bilgileri bizimle paylasirsan seviniriz.
sorun sayfadaki rastgele program ceken kodlarla alakalı imiş
eski kod

PHP:
<%
	for i = 1 to 10
	Set rd = server.CreateObject("ADODB.Recordset")
	sqlstr = "SELECT * FROM files where durum = 1 order by file_name desc;"
	rd.open sqlstr,conn,1,1
randomize
say = Int(rnd*rd.recordcount)-0
rd.move(say)
%>
yeni kod

PHP:
<%

	Set rd = server.CreateObject("ADODB.Recordset")

	sqlstr = "SELECT max(file_id) as kayitmaxx FROM files where durum = 1"
	rd.open sqlstr,conn,1, 1
	kayitxxx=rd("kayitmaxx")
	rd.close
	
	i = 1
	while i<=40
		randomize
		say = Int(rnd*(cint(kayitxxx)))

		sqlstr = "SELECT TOP 1 file_id, cat_id, file_name FROM files where durum = 1 and file_id=" + trim(cstr(say))
		rd.open sqlstr,conn,1, 1
		if not(rd.eof) then
			if i/2<>int(i/2) then response.write "<tr>"
%>
arkadaş asp kodlarımı bu şekilde değiştirince sorun ortadan kalktı kendisine teşekkur ederim.
 

iyinet

Administratör
Katılım
2 Eyl 2002
Mesajlar
5,021
Beğeniler
53
Konum
Gaziantep
#13
sorun sayfadaki rastgele program ceken kodlarla alakalı imiş
eski kod

PHP:
<%
    for i = 1 to 10
    Set rd = server.CreateObject("ADODB.Recordset")
    sqlstr = "SELECT * FROM files where durum = 1 order by file_name desc;"
    rd.open sqlstr,conn,1,1
randomize
say = Int(rnd*rd.recordcount)-0
rd.move(say)
%>
yeni kod

PHP:
<%
 
    Set rd = server.CreateObject("ADODB.Recordset")
 
    sqlstr = "SELECT max(file_id) as kayitmaxx FROM files where durum = 1"
    rd.open sqlstr,conn,1, 1
    kayitxxx=rd("kayitmaxx")
    rd.close
 
    i = 1
    while i<=40
        randomize
        say = Int(rnd*(cint(kayitxxx)))
 
        sqlstr = "SELECT TOP 1 file_id, cat_id, file_name FROM files where durum = 1 and file_id=" + trim(cstr(say))
        rd.open sqlstr,conn,1, 1
        if not(rd.eof) then
            if i/2<>int(i/2) then response.write "<tr>"
%>
arkadaş asp kodlarımı bu şekilde değiştirince sorun ortadan kalktı kendisine teşekkur ederim.
Bu detaylari paylasman guzel oldu, zira sana daha verimli bir yontem sunacagim:

PHP:
SELECT TOP 1 file_id, cat_id, file_name FROM files WHERE durum = 1 ORDER BY NEWID()
Bu yontem ile her seferinde rastgele "file_id, cat_id, file_name" cekmis olacaksin. Ek bir ASP kodlamasi (randomize falan) gerekmeden.
 

sitemedya

Profesyonel
Katılım
11 Kas 2004
Mesajlar
284
Beğeniler
0
#14
Bu detaylari paylasman guzel oldu, zira sana daha verimli bir yontem sunacagim:

PHP:
SELECT TOP 1 file_id, cat_id, file_name FROM files WHERE durum = 1 ORDER BY NEWID()
Bu yontem ile her seferinde rastgele "file_id, cat_id, file_name" cekmis olacaksin. Ek bir ASP kodlamasi (randomize falan) gerekmeden.
iyinet, mssql konusunda bilgi sahibi olduğun belli ama yanlışın var. bu komut bu amaçla kullanılmamalıdır. mssql kullananları yanlış yönlendirmeyelim.

NEWID(), uniqueidentifier tipinde benzersiz bir değer yaratır ancak bu değer sınırlıdır. yani, örneğinizde, DB içinde 5000 kayıdınız varsa, 5000 kayıt arasından random kayıt getirmez !!!. denemek isteyen "sql query analyzer" üzerinden tsql kod yazıp deneyebilir.

@sitemedya sadece sorunu olanlarin sorununu halletmek icin cevap yazilmaz. Ayni sorun ile karsilasabilecekler icin de karsilasmamalari icin cevap yazilir.
Kernel32, öncelikle amacım, webmasterların (programcıların) biraz araştırmacı olması, cevaplarını kendilerinin bulmaya çalışması, herşeyin de hazır olmamasıdır. Programlama bilmek hataları çözme sanatı, programcı da bu sanatı icra edendir. O yüzden direkt cevap yazmamaya çalışıyorum. Galiba bu konuda sizden farklı düşünüyorum. TrDownload 'un olayı başka. Uzun zamandır altından kalkamadığı bir sorundu ve halledemiyordu..

TrDownload: Keşke tek sorun o olsaydı :). En çok uğraştıran oydu ama kodlarında başka hatalar da vardı ve düzeltildi.
 

Senol

Onaylı Üye
Katılım
25 Haz 2005
Mesajlar
4,856
Beğeniler
1
Konum
Bursa
#15
iyinet, mssql konusunda bilgi sahibi olduğun belli ama yanlışın var. bu komut bu amaçla kullanılmamalıdır. mssql kullananları yanlış yönlendirmeyelim.

NEWID(), uniqueidentifier tipinde benzersiz bir değer yaratır ancak bu değer sınırlıdır. yani, örneğinizde, DB içinde 5000 kayıdınız varsa, 5000 kayıt arasından random kayıt getirmez !!!. denemek isteyen "sql query analyzer" üzerinden tsql kod yazıp deneyebilir.

TrDownload: Keşke tek sorun o olsaydı :). En çok uğraştıran oydu ama kodlarından yaklaşık olarak 20 hata daha düzeltildi.

Kernel32: hepsini tek tek yazamam !
bende inkar etmedim zaden :p
 

iyinet

Administratör
Katılım
2 Eyl 2002
Mesajlar
5,021
Beğeniler
53
Konum
Gaziantep
#16
iyinet, mssql konusunda bilgi sahibi olduğun belli ama yanlışın var. bu komut bu amaçla kullanılmamalıdır. mssql kullananları yanlış yönlendirmeyelim.

NEWID(), uniqueidentifier tipinde benzersiz bir değer yaratır ancak bu değer sınırlıdır. yani, örneğinizde, DB içinde 5000 kayıdınız varsa, 5000 kayıt arasından random kayıt getirmez !!!. denemek isteyen "sql query analyzer" üzerinden tsql kod yazıp deneyebilir.

TrDownload: Keşke tek sorun o olsaydı :). En çok uğraştıran oydu ama kodlarından yaklaşık olarak 20 hata daha düzeltildi.

Kernel32: hepsini tek tek yazamam !
Degerlerin sinirli oldugu konusunda sana katiliyorum. %100 dagilim saglamak random fonsiyonlari ile mumkun olmuyor.

Her seferinde baska bir kayit istiyorsaniz haklisiniz, bu onun cozumu degil.

Ame her seferinde rastgele bir kayit icin, basit bir cozum yontemidir ve kodlamadan tasarruf saglar.

Ingilizcesi olanlar icin bu article okuyabilirler.
http://www.sqlteam.com/item.asp?ItemID=8747
 

Senol

Onaylı Üye
Katılım
25 Haz 2005
Mesajlar
4,856
Beğeniler
1
Konum
Bursa
#17
Degerlerin sinirli oldugu konusunda sana katiliyorum. %100 dagilim saglamak random fonsiyonlari ile mumkun olmuyor.

Her seferinde baska bir kayit istiyorsaniz haklisiniz, bu onun cozumu degil.

Ame her seferinde rastgele bir kayit icin, basit bir cozum yontemidir ve kodlamadan tasarruf saglar.

Ingilizcesi olanlar icin bu article okuyabilirler.
http://www.sqlteam.com/item.asp?ItemID=8747
cektiğimiz kayıt tek olsa verdiğiniz kod fayda sağlardı ama her defasında veritabanından 40 rastgele kayıt cekiyorum ilginiz icin yinede teşekkurler +rep
 

iyinet

Administratör
Katılım
2 Eyl 2002
Mesajlar
5,021
Beğeniler
53
Konum
Gaziantep
#18
cektiğimiz kayıt tek olsa verdiğiniz kod fayda sağlardı ama her defasında veritabanından 40 rastgele kayıt cekiyorum ilginiz icin yinede teşekkurler +rep
"ilginiz icin yinede teşekkurler" ile benden kurtulamazsiniz :)

40 rastgele kod cekmek icin yapmaniz gereken 1 yerine 40 kayit cekmek.

PHP:
SELECT TOP 40 file_id, cat_id, file_name FROM files WHERE durum = 1 ORDER BY NEWID()
+rep icin de tesekkurler.
 

sitemedya

Profesyonel
Katılım
11 Kas 2004
Mesajlar
284
Beğeniler
0
#19
Degerlerin sinirli oldugu konusunda sana katiliyorum. %100 dagilim saglamak random fonsiyonlari ile mumkun olmuyor.

Her seferinde baska bir kayit istiyorsaniz haklisiniz, bu onun cozumu degil.

Ame her seferinde rastgele bir kayit icin, basit bir cozum yontemidir ve kodlamadan tasarruf saglar.

Ingilizcesi olanlar icin bu article okuyabilirler.
http://www.sqlteam.com/item.asp?ItemID=8747
mssql random konusunda biraz fakir kalmış. Mesela, güçlü bir komut olan oracle daki dbms_random.value(x, y) komutunun eşdeğeri yok. Küçük sayılar için NEWID(), daha esnek range ler için DATE functionları veya başka yöntemler kullanılabiliyor.

daha önceden dediğim gibi, bahsettiğin durum TrDownload için uygun değildi. ama uygun olabilecek arkadaşlar mutlaka olacaktır.
 

sitemedya

Profesyonel
Katılım
11 Kas 2004
Mesajlar
284
Beğeniler
0
#20
"ilginiz icin yinede teşekkurler" ile benden kurtulamazsiniz :)

40 rastgele kod cekmek icin yapmaniz gereken 1 yerine 40 kayit cekmek.

PHP:
SELECT TOP 40 file_id, cat_id, file_name FROM files WHERE durum = 1 ORDER BY NEWID()
+rep icin de tesekkurler.
iyinet, ısrarla aynı hatayı yapıyorsun. !!! Trdownload için NEWID uygun değil. ama istersen bu konuyu msn den daha hararetli tartışabiliriz. :)
 

Bu konuyu okuyanlar (Üyeler: 1, Misafirler: 0)

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. iyinet.com sayfalarında yer alan yazı, görsel ve linklerle ilgili hukuki şikayetleriniz için Buradan iletişime geçmeniz durumunda, ilgili kanunlar ve yönetmelikler çerçevesinde en geç 7 gün içerisinde iyinet yönetimince tarafınıza dönüş sağlanacaktır. Betcup Artemisbet
Üst