6,000 kayıtlı bir db vardı sonuçlar hızlı şekilde ekrana basılıyordu fakat kayıtları 18,000 e çıkarınca bir kayıtları ikişerli listemesi 3-4 sn almaya başladı bende tamam bunları nasıl hızlandırırız diye araştıyordum bu yazın iyi oldu gerçekten +rep yalnız devamını bekliyoruz

Şimdilik sadece bu değerleri değiştirip 48 saat sonra sciripti tekrar çaliştirip bakalim. long_query_time = 4 max_connections = 300 (myslq 15 gündür çalışıyor ama en fazla yapilan connection 46, bunu düşürün kaynakları boşa harcamayın diyor, 300 iyidir) key_buffer_size = 10 MB (dediğim gibi orada da yazıyor 256mb key buffer belirlenmiş ama sadece %2 si kullanıyor gereksiz ram harcaması, sizin için 10 mb yeterlidir) join_buffer_size = 512.00 K

devam MySQL de tum ayarlari yaptiniz, kodlarinizi duzelttiniz, yeterince belleginiz var, indexlerinizi yaratip SQL lerinizi duzelttiniz... Hersey hizli ve guzel calisiyor. MySQL i turbo moduna almaya hazirmisiniz? Aslinda turbo modu diye bir mod yok ama asagidaki islemleri yaptiginizda MySQL cok daha iyi, sayfalarinizin ne kadar hizli acildigini gozlerinizle farkedebileceksiniz. Buradaki amac disk I/O sunu en aza indirerek, bellekten en fazla faydayi saglamaktir. Turbo 1. key_buffer: key_buffer index keylerinin RAM de yani bellekte saklanmasini saglar. Bir tur index cache i diyebilirsiniz. Cok yogun calisan bir bilgisayarin en pahali yaptigi islem disk I/O sudur. Cunku en yavas yapilan islem disk I/O sudur. Bellek disk'e gore yuzlerce/binlerce kat daha hizlidir. MySQL in disk yerine bellek kullanmasini saglayarak, I/O islemlerini en az 100 kat hizlandirmis olursunuz. key_buffer my. cnf icinde yer alir. my. cnf ... ... key_buffer = 256Mb... ... Tavsiye edilen key_buffer degeri Bellek boyunuz / 4 dur. 1Gb lik bir server icin 256Mb iyi bir degerdir. Ancak toplam indexlerinizin buyuklugu 256Mb dan az ise bu bellegi bosa harcamak anlamina gelir. Turbo 2. query_cache MySQL de yaptiginiz sorgularin sonuclarinin saklandigi cache e verilen addir. Bu deger normalde my. cnf icinde belirtilmez yani kapalidir. Ozlellikle sikca kullanilan sorgularin sonuclarinin, cache de saklanmasi, disk I/O sunun azaltacak ve sonuclarin hemen bellekten okunmasini saglayacaktir. Dikkat edilmesi gereken SQL sorgularinizin buyuk kucuk harf farki olmamasi. Ornegin: &quot;Select ad, soyad from kullanici where kullanici_kod = 100&quot; ile &quot;SELECT ad, soyad from kullanici WHERE kullanici_kod = 100&quot; ayni SQL kodu olmasina karsin query cache bu kodlari farkli sanar. Ayni sorgulari hep ayni buyuk-kucuk harf uyumu ile yazmaniz query cache optimize sekilde kullanmanizi saglar. query cache my. cnf icinde yer alir. my. cnf ... ... query_cache_type = 1 query_cache_size = 32M... ... 32Mb baslamak icin cok uygun. Tavsiyem 64Mb in ustune cikmayin.

gzel konu

Mywedding' Alıntı:

iyinet' Alıntı:

devami Indexlere SQL sorgulariniza bakarak karar vermelisiniz. Yani oyle kafadan index yaratilmaz. Fazla index te zarar verebilir, indexler okuma islemini hizlandirir ama yazma islemini de yavaslatirlar. Tablolar uzerindeki 'primary key' ler zaten kendiginden indexlidirler. Bunlar icin ek index yaratmaniza gerek yok. Bu artik biraz fazla detay ve teknik ama anlayabilecekler icin soyluyorum: SQL sorgularinizi &quot;describe&quot; ile inceletip indexlere karar verebilirsiniz. Ek olarak tecrubeye bagli olarak sadece tabloya bakarak basitce indexleri tahmin edebilirsiniz. Ornegin asagidaki tablo icin session_id ve user_id uzerinde index yaratilabilecegini dusunuyorum. session_id uzerinde zaten primary key indexi koyulmus. Ama dogru olan boyle bakip karar vermek degildir. Sorgularin ve Tablolarin incelenmesi esastir. CREATE TABLE `cpg149_sessions` ( `session_id` varchar(40) NOT lisanssız default '', `user_id` int(11) default '0', `time` int(11) default lisanssız, `remember` int(1) default '0', PRIMARY KEY ) TYPE=MyISAM COMMENT='Used to store sessions';

SQL sorgulari tablolardan yapilir. Tablolari, yapilandirilmis dosya gibi dusunebilirsiniz. Tablo boyu ne kadar kucuk olursa SQL sorgulari o kadar hizli calisir. + MySQL o tabloyu acip okur icindeki veriyi bulur size verir. Basit bir ornek: Diyelimki MySQL sizsiniz... 1. Notepad ile 5K lik bir dosyayi actiniz. 'Adana Mersin' diye arattirdiniz. Arama sonucundaki tum 'Adana-Mersin' leri Notepad ile actiginiz yeni bir dosyaya koydunuz. Bu islem toplam 1 dakikanizi alsin. 2. Notepad ile 2Mb lik bir dosta actiniz. Sadece dosyanin acilmasi 120 saniye sursun. Arama sonucundaki tum 'Adana-Mersin' leri Notepad ile actiginiz yeni bir dosyaya koydunuz. Bu islem toplam 1 saatinizi alsin. Sonuc: Tablo boyu buyudukce, harcanan CPU ve I/O artar, sorgu sureleri uzar. Tablo boyunun buyuyecegini hesaplayan MySQL ve benzeri veritabani yaraticilari, INDEX denen objeleri yaratmislar. Indexi bir tablodaki bir verinin nerede oldugu bilgisini saklayan baska bir dosyadir. Hani kitaplarin basinda hangi konunun hangi sayfada, kitaplarin sonunda hangi kelimenin hangi sayfalarda gectigi yazilirya, iste index odur. Aradiginizi hizlica bulmanizi saglar. Hizlica bulunca CPU ve I/O harcamasi azalir. Sonuc: Tablolar uzerinde gereken indexler yok ise buyuyen tablolar fazla CPU ve I/O harcarlar. Bir SQL sorgusunun performansi: tablo boyuna, tablo uzerindeki indexlere ve kac tablo uzerinde join yapildigina baglidir. Ek olarak SQL den donen sonuclarin filtrelenmesi &quot;WHERE&quot; sonuclarin daha hizli donmesini saglar ve gereksiz sonuclarin networkte tasinmasini onler.

teşekkürler, sonuç şu; 5.9M total keybuffer ne yapmalıyız? estranged' Alıntı:

Basit mysql optimizayon onerileri 1. my. cnf mysql configurasyon dosyanizi optimize edin. MySQL CPU Kullanımı my. cnf optimizasyonu 2. data ve binary lerinizi varsa ayri disklere koyun. MySQL i calistiran dosyalar ile MySQL veritabaninin bulundugu dosyalari ayri disklere koyun. Mumkunse her disk icin ayri I/O kontrol karti kullanin. 3. MySQL ve PHP+Apache yi mumkunse ayri makinalara kurun. Ancak bu makinalarin ayni frame de olma sartini arayin. Birbirleri ile local/dogrudan bagli olmalari sartini arayin. 4. MySQL icin ne kadar RAM o kadar PERFORMANS sloganini akliniza yazin. 5. MySQL icin server turu CPU lar kullanin Xeon dual Core ornegin. CPU sayiniz en az 2 olsun. 6. MySQL inizin rutin bakinlarini yapan scriptler gelistirin. 7. MySQL inizin rutun yedeklerini alan scriptler gelistirin. Arada bir ornegin ayda 1 kez dizin bazinda yedek alin. Yani tum mysql dizinini MySQL i kapattiktan sonra &quot;taz cvzf tum_mysql. tzg /var/lib/mysql&quot; seklinde yedekleyin. 8. MySQL ayarlariniz ne kadar iyi olursa olsun kotu kodlama en guclu makineleri durdurmaya yeter. Yavas SQL sorgularinizi asagidaki konfigurasyon ile tesbit edip duzeltin long_query_time=3 log-slow-queries=/var/log/mysql/log-slow-queries. log 9. MySQL verinizi arsivleyin. Gerekmeyen bilgileri aktif veritabaninizdan baska veritabaniniza atin. Ornegin iyinet in 5 sene onceki sayac bilgileri iyinetin ana veritabani yerine iyinet_2002 adli veritananinda saklayin. Boylece tablo boyunu kisaltip az erisilen bilgileri baska bir veritabanina atmis olursunuz. Artik gerekmedigini dusundugunuz verileri dikkatlice silin. 10. MySQL cok guclu ve guvenilir bir veritabanidir. Unutmayin siz ona ne kadar iyi bakarsaniz o da size o kadar iyi bakar

devami &quot;bu indexi her tablo nun basinami koymam gerek?&quot; Hayir, index tablonun basina yada sonuna konulmaz. Indexler tablonun kolonlari uzerinde yaratilirlar. 1 tablo uzerinde 1 den fazla index yaratilabilir. Ornegin su sekildeki bir tablo uzerinde permutasyon olarak 6 adet index yaratilabilir: (7 index mantikli olmaz, sadece bilgi amacli goteriyorum) CREATE TABLE `cpg149_sessions` ( `session_id` varchar(40) NOT lisanssız default '', `user_id` int(11) default '0', `time` int(11) default lisanssız, ) Indexler: 1. session_id 2. user_id 3. time 4. session_id, user_id 5. session_id, time 6. user_id, time 7. session_id, user_id, time

iyinetin bahsettikleri mysql, mssql ve diğer DB ler için geçerli ortak payda. iyinet'in bazı eksikleri var. onları da ben tamamlayım. Yavaşlık konusunda bir çok etken olmasına rağmen en önemli 2 tanesi şudur: 1. field indexleme. Bunu biraz açalım: kitaptaki fihrist gibi düşünebileceğimiz index, DB pointerin hedef recordu daha çabuk bulmasına yarar. Burada önemli olan, mümkün olduğunca unique field için index yapılması gerektiği. Düşünülenin aksine, bir tabloda çokca index kullanmak yarar değil zarar getirir. 2. Querynin mükemmel olmaması. Bunun için bolca SQL çalışmanız, araştırmanız gerekir. Çok yapılan bir yanlış olarak şunu diyebiliriz: TOP kullanmamak, SELECT içinde gereksiz fieldları kullanmak, çok çağırın sayfaki query içinde LIKE kullanmak, mantık hataları vs..

Şimdilik 8-10 MB yetecektir ama mysql verilerinizin büyüme hızına bağlı olarak ne kadar süre yeteceği değişir, düzenli olarak kontrol edip ona göre ayarlama yapmak gerekir. En iyisi tuning-premier. sh ile bakıp tüm ayarları oradaki verilere göre yapmak.

estranged' Alıntı:

benim /etc/ nin içinde &quot;my. cfg&quot; yok, my. cnf var

performansı arttırmak için en önemli özelliklerden biri hangi alan için hangi tip bilgi saklamanın uygun olduğunu bilmek.. örnegin standar değerleriniz var &quot;server&quot;, &quot;hosting&quot;,&quot;reseller&quot;,&quot;proreseller&quot;,&quot;proreseller1&quot;,&quot;proreseller2&quot;,&quot;proreseller3&quot;,&quot;proreseller4&quot;,&quot;proreseller5&quot;,&quot;proreseller6&quot;,&quot;proreseller7&quot;,&quot;proreseller8&quot; bir host firmasının paket isimlerini yukarıdaki şekilde düşünün bunlara varchar(50) yapanlar bile var varchar yaparak bunlara en az 6 byte ayırmak yerine enum kullanılırsa? phpmyadmin için enum seçilip sağına &quot;server&quot;, &quot;hosting&quot;,&quot;reseller&quot;,&quot;proreseller&quot;,&quot;proreseller1&quot;,&quot;proreseller2&quot;,&quot;proreseller3&quot;,&quot;proreseller4&quot;,&quot;proreseller5&quot;,&quot;proreseller6&quot;,&quot;proreseller7&quot;,&quot;proreseller8&quot; yazarsanız bu hem performansı arttırır hemde boyutu düşürür. ama en ömemlisi söylendiği gibi kodlama o kötü olduktan sonra db iyi olmuş çok önemli değil 1 x 0 = 0 gibi birşey enum vb. diğer beri tipleri içinde aşağıdaki adresi kullanabilirsiniz. http://dev.mysql.com/doc/refman/5.0/en/data-types.html

şunları da dikkat etmek gerekir. Büyük boyutlu DB lerde select yapmak yavaşlar. Var ise, büyük boyutlu table i, 2 veya daha fazla table ye bölmek. Örneğin tek bir öğrenci tablosu yerine; öğrenci, notlar diye iki table a bölüp, aralarında relation yaratmak. Db için bir insert yapmak, bir update yapmaktan daha fazla iş yapmak ve daha fazla zaman harcanması demektir..

devami MySQL, saldim cayira, mevlam kayira bir veritabani degildir, otomobilinize benzer. Duzenli yagini degistireceksiniz. Zamani geldiginde bakimini yaptiracaksiniz. Kaza oldugunda tamir ettireceksiniz... Mysql e yapilmasi gereken rutin bakimlar: 1. Tablo optimizasyonu: Neden gerekir? - Tablolara veri yazildikca ve silindikce PC nizin hard diski gibi icinde bosluklar olusur, bu bosluklari kapatmaniz icin optimize etmelisiniz. Haftada 1 yapilmasinda fayda vardir. Komut: OPTIMIZE TABLE &lt;tablo adi&gt; 2. Tablo Analizi: Neden gerekir? - Indexlerin tablolar hakkinda dogru bilgiye sahip olmalarini, gereken istatistiklerin toplanmasini saglar. Haftada bir optimizasyonun ardindan yapilmasinda fayda vardir. Komut: ANALYZE TABLE &lt;tablo adi&gt; 3. Tablo Hasar Kontrolu: Neden gerekir? - Bazen tablolar bozulur. Bu bazen uygulamanizin verdigi hata mesajlari ile farkedilir bazen farkedilmez. Ara sira (ayda 1) tablolari kontrol etmekte fayda vardir. Kontrolde sorunlu cikan tablolari 'Tablo Tamiri' ile tamir etmek gerekir. Komut: CHECK TABLE &lt;tablo adi&gt; 4. Tablo Tamiri: Neden gerekir? - Bozulan tablolari tamir etmek icin kullanilir. Komut: REPAIR TABLE &lt;tablo adi&gt;

evet mantıklı.