İ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
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

0
İyinet Üyesi
Katılım
11 Kasım 2004
Mesajlar
284
Reaction score
0
öncelikle "SQL Profiler" dan bi izleme yap. bakalım "kasan" query hangisi?
 

Senol

0
İyinet Üyesi
Onaylı Üye
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaction score
1
Konum
Bursa
merhaba sql profiler den baktım işde aşağıdaki resim

sss.jpg
 

sitemedya

0
İyinet Üyesi
Katılım
11 Kasım 2004
Mesajlar
284
Reaction score
0
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

0
İyinet Üyesi
Onaylı Üye
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaction score
1
Konum
Bursa
oncelikle sunu soyleyeyim siteyi kapattığım zaman sunucu normal calışıyor sql ve web aynı sunucudalar
 

Senol

0
İyinet Üyesi
Onaylı Üye
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaction score
1
Konum
Bursa
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

kkk.jpg
 

KerneL32

0
İyinet Üyesi
Katılım
8 Mart 2005
Mesajlar
1,247
Reaction score
0
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

0
İyinet Üyesi
Katılım
11 Kasım 2004
Mesajlar
284
Reaction score
0
kernel32 bahsettiklerin zaten "must be" şeyler. trdownload un sorunu başkaydı. hallettik.
benzer sorunları olanlar bana pm atabilir.
 

KerneL32

0
İyinet Üyesi
Katılım
8 Mart 2005
Mesajlar
1,247
Reaction score
0
@sitemedya sadece sorunu olanlarin sorununu halletmek icin cevap yazilmaz. Ayni sorun ile karsilasabilecekler icin de karsilasmamalari icin cevap yazilir.
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya

Senol

0
İyinet Üyesi
Onaylı Üye
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaction score
1
Konum
Bursa
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

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
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

0
İyinet Üyesi
Katılım
11 Kasım 2004
Mesajlar
284
Reaction score
0
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

0
İyinet Üyesi
Onaylı Üye
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaction score
1
Konum
Bursa
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

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
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

0
İyinet Üyesi
Onaylı Üye
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaction score
1
Konum
Bursa
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

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
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

0
İyinet Üyesi
Katılım
11 Kasım 2004
Mesajlar
284
Reaction score
0
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

0
İyinet Üyesi
Katılım
11 Kasım 2004
Mesajlar
284
Reaction score
0
"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. :)
 

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