sohbet odaları

mssql db sunucuyu cok kasıyor

Senol

İyinet Üyesi
Bilgiler
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaksiyon
1
Puanları
0
Şube
Bursa
222 Aydır Üye
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
Bilgiler
Katılım
11 Kasım 2004
Mesajlar
284
Reaksiyon
0
Puanları
0
230 Aydır Üye
öncelikle "SQL Profiler" dan bi izleme yap. bakalım "kasan" query hangisi?
 

dizayn1st

Profesyonel
Bilgiler
Katılım
11 Mayıs 2005
Mesajlar
623
Reaksiyon
0
Puanları
0
224 Aydır Üye
kasan query nasıl anlaşılıyor :)
 

Senol

İyinet Üyesi
Bilgiler
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaksiyon
1
Puanları
0
Şube
Bursa
222 Aydır Üye
merhaba sql profiler den baktım işde aşağıdaki resim

 

sitemedya

Profesyonel
Bilgiler
Katılım
11 Kasım 2004
Mesajlar
284
Reaksiyon
0
Puanları
0
230 Aydır Üye
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

İyinet Üyesi
Bilgiler
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaksiyon
1
Puanları
0
Şube
Bursa
222 Aydır Üye
oncelikle sunu soyleyeyim siteyi kapattığım zaman sunucu normal calışıyor sql ve web aynı sunucudalar
 

Senol

İyinet Üyesi
Bilgiler
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaksiyon
1
Puanları
0
Şube
Bursa
222 Aydır Üye
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

 

KerneL32

Müptela
Bilgiler
Katılım
8 Mart 2005
Mesajlar
1,247
Reaksiyon
0
Puanları
0
226 Aydır Üye
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
Bilgiler
Katılım
11 Kasım 2004
Mesajlar
284
Reaksiyon
0
Puanları
0
230 Aydır Üye
kernel32 bahsettiklerin zaten "must be" şeyler. trdownload un sorunu başkaydı. hallettik.
benzer sorunları olanlar bana pm atabilir.
 

KerneL32

Müptela
Bilgiler
Katılım
8 Mart 2005
Mesajlar
1,247
Reaksiyon
0
Puanları
0
226 Aydır Üye
@sitemedya sadece sorunu olanlarin sorununu halletmek icin cevap yazilmaz. Ayni sorun ile karsilasabilecekler icin de karsilasmamalari icin cevap yazilir.
 

iyinet

Root
Admin
Bilgiler
Katılım
2 Eylül 2002
Mesajlar
5,021
Reaksiyon
53
Puanları
51
Şube
Sakarya
256 Aydır Üye

Senol

İyinet Üyesi
Bilgiler
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaksiyon
1
Puanları
0
Şube
Bursa
222 Aydır Üye
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
Bilgiler
Katılım
2 Eylül 2002
Mesajlar
5,021
Reaksiyon
53
Puanları
51
Şube
Sakarya
256 Aydır Üye
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
Bilgiler
Katılım
11 Kasım 2004
Mesajlar
284
Reaksiyon
0
Puanları
0
230 Aydır Üye
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

İyinet Üyesi
Bilgiler
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaksiyon
1
Puanları
0
Şube
Bursa
222 Aydır Üye
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
Bilgiler
Katılım
2 Eylül 2002
Mesajlar
5,021
Reaksiyon
53
Puanları
51
Şube
Sakarya
256 Aydır Üye
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

İyinet Üyesi
Bilgiler
Katılım
25 Haziran 2005
Mesajlar
4,856
Reaksiyon
1
Puanları
0
Şube
Bursa
222 Aydır Üye
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
Bilgiler
Katılım
2 Eylül 2002
Mesajlar
5,021
Reaksiyon
53
Puanları
51
Şube
Sakarya
256 Aydır Üye
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
Bilgiler
Katılım
11 Kasım 2004
Mesajlar
284
Reaksiyon
0
Puanları
0
230 Aydır Üye
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
Bilgiler
Katılım
11 Kasım 2004
Mesajlar
284
Reaksiyon
0
Puanları
0
230 Aydır Üye
"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. :)
 
  • Yararlı
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.
Üst