SELECT TOP (SELECT FIRST) Performans farkı TEXT alanlarda

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

SELECT TOP (SELECT FIRST) Performans farkı TEXT alanlarda

Mesaj gönderen Kuri_YJ »

Selamlar,

Dün gece bir deneme yaptık (PhoenixJedi ile birlikte) ve sonuçlarını görünce dumur olduk.

M$-SQL için Sorgu,

Kod: Tümünü seç

SELECT TOP 20 *
FROM TABLOM
WHERE TEXT_ICERIK LIKE '%arananifade%'
Firebird için Sorgu,

Kod: Tümünü seç

SELECT FIRST 20 *
FROM TABLOM
WHERE TEXT_ICERIK LIKE '%arananifade%'
Şeklinde bir sorguyu karşılaştırdık. Min. 10 Kat ile 40 Kat arası performans farkı ile M$-2000 Server'ı yerden yere vurdu FB :)

Yaklaşık 80,000 Kayıtlık Dokumanların olduğu bir tabloya uygulandı bu Query. Her iki DB'de de aynı kayıtlar var. Dokumanlar, Min. 1 Sayfa ile 10 Sayfa arasında değişen boyutlarda.

Ateşkuşu yaktı geçti M$'ı. Query'lerde yeri geldi, FB'nin 1-2 sn. içinde getirdiği sonuçları, M$-SQL Server 1 dakika, 1 Dakika 20 Saniye filan sürelerde getirebiliyordu.

Bu ne tekniktir, bu ne hız farkıdır böyle !....

Hehehehehehe, FB'ye devam arkadaşlar.

Sevgiler.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
PhoenixJedi
Üye
Mesajlar: 8
Kayıt: 25 Şub 2004 01:57
Konum: İstanbul

Mesaj gönderen PhoenixJedi »

Evet Sanırım ateş kuşu bizi yine dumura uğrattı. Kuri_TLJ nin dediği gibi. M$'ın neleri yapamadığını :) bir kez daha uygulamalı olarak gördük.
Yahu neden kullanılır mu M$ SQL server ?

SELECT cümleciğinde TOP 10 kullanıldğında M$ bütün kayıtları sorguluyo. Sonra ilk 10 kaydı getiriyo.
FB ise SELECT FIRST 10 dendiğinde sorqulama yapılırken kayıt sayısı 10 u buldumu sonucu anında dödürüyor.

Yani M$ yine bir mantık hatası yapmış gibi görünüyo... (Görüntü var Ses yok) :)

Aslında denemelerimizde gördüğümüz bir konu daha var.
Aynı kayıtlar üzerinde aynı sorguları yapmamıza rağmen. CPU ve Bellek kullanımında da yine arada uçurumlar var...

M$ SQL server de bellek kullanımını 16 MB a düşüşürelim dedik.. ve sonuç fiyasko. M$ SQL server. Start bile olmadı.

Birileri bana FB yerine M$ SQL Server 2000 kullanmak için 5 tane sebep gösterebilir mi?

...
<font color=red> “Bir mum diğer bir mumu tutuşturmakla ışığından hiçbir şey kaybetmez” ...</font> Mevlana
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Sebep.. :)

Çünkü şirkette MS Sharepoint Portal Server 2003 kullanılıyor ve sadece MS-SQL server destekliyor. :D
Kullanıcı avatarı
PhoenixJedi
Üye
Mesajlar: 8
Kayıt: 25 Şub 2004 01:57
Konum: İstanbul

Mesaj gönderen PhoenixJedi »

Muhteşem ;)
Çok teknik bir neden oldu bu :).
Bu kadar zorlamalara, pazarlama stratejilerine rağmen hala piyasada %10 larda dolaşıyor ya.

Acaba diyorum. FB gibi bir ürün M$ cıların elinde olsaydı nasıl olurdu? :)
<font color=red> “Bir mum diğer bir mumu tutuşturmakla ışığından hiçbir şey kaybetmez” ...</font> Mevlana
Kullanıcı avatarı
Terminator
Üye
Mesajlar: 313
Kayıt: 13 Ara 2005 01:45
Konum: İzmir, ama Aydın Efesi!

Mesaj gönderen Terminator »

sebep 1: Bişeye çok iyi para ödediğinizde, karşılığını alamadığınızı düşündüğünüz anda çok iyi küfredip, hesap sorup relax olabilirsiniz,
hatta sizden kaynaklanan beceriksizliklerin bile hesabını sorabilirsiniz.

sebep 2: coderlordun dediği gibi sizi bi ucunuzdan yakalamışlardır ve artık kurtuluşunuz yoktur, uzaklaşmaya çalışırsanız çorap gibi sökülürsünüz.

sebep 3: ticari bile olsa ilişkiye girdiğiniz için billy gatesi akrabanız gibi hisseder ruhsal ve sosyal tatmin sağlarsınız.

sebep 4: basit, kullanılması kolay şeyler size sevk vermiyodur, cebelleşmekten haz alan birisinizdir, mazoşizmin tadına varmışsınızdır.

sebep 5: bazı amerikalılar ve ilkel kabileler gibi, büyük, hantal, iri, kocaman şeyler sizde itibar duygusu uyandırıyodur.

sebep 6: (bu da benden olsun) imeceyle yapılmış bir gözlemeyi sağlıksız bulduğunuz için, bir yayla şenliğinde karın doyurmak yerine bilmemneburgerde hormonları janjanla bastırılmış şeyler yemek sizin bilinçli(!) tercihinizdir.

Testte kullandığınız FB versiyonu, OS platformu, config vs parametrelerini verseniz iyi olurdu. yine de çalışmanız için teşekkürler.
Firebird Foundation Member #208
http://www.firebirdsql.org
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

O kadar detay agirmeyim dedim ama madem öyle bir iki bilgi vereyim.

Celeron 1.7
512 K RAM
WinXP SP2
7200'lük HDD 60 GB Disk.

M$-SQL Server Server 2000 (SP'sini hatırlamıyorum 4 olabilir) Max bellek sınırı verdik 128 MB.

Firebird 2.0 Beta - 1 (Sadece CPU Priorty'si 1 durumda başka bir ayarı yok, Default DBCachePage'i aynen Default yani 2048 Page, bu da 16 MB Max Bellek kullanımınatekabül ediyor)

Biri 16 MB'de işini görüyordu, diğeri 128 MB'de tırmalayıp duruyordu.

Ve hatta testte, şöyle bir şey denedik, M$'a sorguyu verdik, döndük DBWorkbench'i açıp, Firebird'e Connect olduk, Query'yi kopyaladık, selecti çektik. FB Getirdi. DBWorkbench'den çıktık, Query Analyzer'a döndük, amcam hala getirmeye çalışıyordu. :shock:

Ne denir ki buna :) :lol: :lol: :lol:
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
Terminator
Üye
Mesajlar: 313
Kayıt: 13 Ara 2005 01:45
Konum: İzmir, ama Aydın Efesi!

Mesaj gönderen Terminator »

Kuri_YJ yazdı:Selamlar,
Ne denir ki buna :) :lol: :lol: :lol:
külliyen, alameti farikaya ihanet!
M$ i seviniz, her konuda becerikli olması beklenemez ama, bilgisayarları user friendly yapan firma olduğunu kabul etmek lazım.
gidip salak sybase kodunu alacağına, ortağı olduğu borlanddan interbasei almayı düşünemeyecek kadar saf biraz işte.. ;)
Firebird Foundation Member #208
http://www.firebirdsql.org
Kullanıcı avatarı
Terminator
Üye
Mesajlar: 313
Kayıt: 13 Ara 2005 01:45
Konum: İzmir, ama Aydın Efesi!

Mesaj gönderen Terminator »

Asıl MSSQL Server 2005 ile Vulcanı kapıştırmak lazım alemlere ibret olsun deyu deyu... birkaç hafta içinde bunu da yapabiliriz.

Oracle i zaten 128 MB ramle çalıştıramazsınız bile, o ramle bırakın rowlarınızı, kendi segmentlerini bile takip edemez garibim.
bi de onu kurmak ve silmek için de 9 günlük bir tatil gerekiyor. ;)
Firebird Foundation Member #208
http://www.firebirdsql.org
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: SELECT TOP (SELECT FIRST) Performans farkı TEXT alanlard

Mesaj gönderen sadettinpolat »

Kuri_YJ yazdı: Ateşkuşu yaktı geçti M$'ı. Query'lerde yeri geldi, FB'nin 1-2 sn. içinde getirdiği sonuçları, M$-SQL Server 1 dakika, 1 Dakika 20 Saniye filan sürelerde getirebiliyordu.
adnan abi bende bi kere böyle bir test yamıştım ve yukarıdaki sonuçlarla karşılaşmıştım. sonra fark ettim ki fb de tüm sonuçları fetch etmiyordum ama sql server tüm kayıtları getiriyordu aradaki fark ta bundan kaynaklanıyordu.

eğer gerçekten fb nin 1-2 saniyede getirdiği sonuçları ms 1 dakika 20 saniyede getiriyorsa vah ms nin haline...

gerçi sorgularda top 20 gibi bir ifade var ama ben yinede emin olmak için soruyorum :)
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

20 kaydı (mantıklı field size'lar olduğu sürece tabii) fetch all yapsın veya yapmasın, 1 dakikadan daha uzun bir sürede getirmesi çok mantıklı gelmiyor Sadettin.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Saadettin'im Polat'ım (Kurtlar Vadisi Mafyam :) )

FetchAll ne demek? Bütün kayıtları getir demek. Yani where koşuluna uyan bütün kayıtları getir demek. Eğer sen kayıt sayısı için bir kısıt koyuyorsan (ki bizim sorgumuzda TOP 20 ve FIRST 20 bu kayıt sınırını belirtmekte) FETCHALL yapmadan bu işi yapamazsın. Yani FETCHALL olarak Toplam 20 Kaydın hepsini Client'a çek demiş oluyorsun.

Topu topu 20 kayıt. Bunu ister istemez FetchAll yapar. (Biz özellikle testlerimizde 5-25 kayıt arasında çektiriyordum ki otomatik fetch all yapsın) Kullandığım aracın iki modu var, FETCHALL'a izin veriyor.

Ama FB orda akıllı davranıp, table'ın tamamını taramadan, verilen kayıt sayısını yakaladığında Query'i kesip Result'ı döndürüyor.

Buna karşın M$ ise (Büyük ihtimalle bu şekilde yapıyordur) Bütün Table'ın üzerinden geçiyor ve verdiğiniz kayıt sınırı kadar kesip gösteriyor.

Tabi performansın da ne olduğunu tahmin edersiniz herhalde :) Sürünüyor.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
Terminator
Üye
Mesajlar: 313
Kayıt: 13 Ara 2005 01:45
Konum: İzmir, ama Aydın Efesi!

Mesaj gönderen Terminator »

coderlord yazdı:20 kaydı (mantıklı field size'lar olduğu sürece tabii) fetch all yapsın veya yapmasın, 1 dakikadan daha uzun bir sürede getirmesi çok mantıklı gelmiyor Sadettin.
belki de tüm kayıtlara bakıp elit 20 tanesini seçip gönderiyodur...
ne de olsa burjuva RDBMS hahahahaaa
Firebird Foundation Member #208
http://www.firebirdsql.org
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Bakınız bu vatandaş da aynı dertten muzdarip. Tavsiye edilenlere bakınız.. Amca Query Optimizer ın bu hatasını düzeltmek için 2 SQL yazıyor. 40 takla atarak çözüyor.

Kuri sen bu denemeyi MS-SQL SP 4 ile denedin değil mi? Amca SP-2 ile denemiş. Ancak yıl 2006. Hala MS durumu düzeltememiş görünüyor.

Bkz.

http://groups.google.com.tr/group/micro ... rt=0&num=3
Kullanıcı avatarı
Terminator
Üye
Mesajlar: 313
Kayıt: 13 Ara 2005 01:45
Konum: İzmir, ama Aydın Efesi!

Mesaj gönderen Terminator »

yaaw yaaw.. siz bu M$i anlamıyorsunuz!
adam TOP demiş.
TOP ne demek? FIRST demek mi? değil.
TOP demek en üst, yani altta olmayan demek.
TOP 20 dediğin zaman, o 20 tanenin gerçektende pramidin en üst 20 si
olması lazım. bunu anlamanın tek yolu da bütün rowları analiz edip en üstün 20 tanesini bulabilmektir.
olay budur. M$SQL düzgün çalışıyor, yani mesleki tabirle, AS DESIGNED.
ne yani rastgele önüne çıkan 20 kaydı mı versin size TOP 20 diye?
bu yalan olmaz mı? ACID var nizam var tööbe tööbee..
mesela
select TOP 3 adi_soyadi, serveti from vatandas
diye türkiye nüfusunu sorgularsanız MSSQL size
RAHMİ KOÇ, xxxxxxxxx.xx
GÜLER SABANCI, xxxxxxxxx.xx
FERİT ŞAHENK, xxxxxxxxx.xx

getirecektir 70 milyon kayıt içinden.
FB bunu yapabilir mi?! nerdeee... ilk tuttuğu 3 vatandaşı öper.

yalnız MSSQL de dikkat edilmesi gereken şey, o getirmeye kalktığı
TOP kayıtlarından bitanesi bile update halindeyse okuyamayabilir, lock verir. eEE ama daha naapsın! o kadarı kadı kızında bile olur. ;)
Firebird Foundation Member #208
http://www.firebirdsql.org
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Hani derler ya, Ölme Eşşeğim Ölme Beni Dağlarda Koma, Bu nedir yahu... Ama Terminatörüm Alim doğru söylüyor, TOP dediğinde öyle alelade kayıtlar getirlmemeli, tartılmalı, koklanmalı, ellemeli, tadına bakmalı, beğenirsen TOP kayıt olarak getirmelisin. Ne o öyle bulduğunu şaaaak diye getiriyorsun. O zaman derler hiç bir şey yapmıyor bu, sorguyu çektiğinde Server diskleri bi GAAAARRRRÇÇÇ diye ötmeli, Server CPU'su tavan yapmalı, Hörül Hörül bellek kullanmalı, GB'larca Swap açmalı ki, insanlar iş yapıyorsunuz sansınlar. Yoksa kimse size inanmaz.



:lol: :lol: :lol: :lol: :lol:
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Cevapla