![]() |
|
|||||||
| Kayıt ol | Blogs | Yardım | Üye Listesi | Ajanda | iTrader | Forumları Okundu Kabul Et |
| MySQL Veritabanı SQL SQL MySQL Access MSSQL Oracle Veritabani Database |
|
|
|
LinkBack | Seçenekler | Stil |
|
||||
|
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 "describe" ile inceletip indexlere karar verebilirsiniz. Ek olarak tecrubeye bagli olarak (benim isim Veritabani uzmanligi) sadece tabloya bakarak basitce (kesin olmamak sarti ile) 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 NULL default '', `user_id` int(11) default '0', `time` int(11) default NULL, `remember` int(1) default '0', PRIMARY KEY (`session_id`) ) TYPE=MyISAM COMMENT='Used to store sessions'; |
|
||||
|
"bu indexi her tablo nun basinami koymam gerek?"
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 NULL default '', `user_id` int(11) default '0', `time` int(11) default NULL, ) 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(ler) 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..
__________________
asp,php,.net,mssql,mysql,oracle,delphi,c ... |
|
||||
|
ş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..
__________________
asp,php,.net,mssql,mysql,oracle,delphi,c ... |
|
||||
|
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 (fragmentation) kapatmaniz icin optimize (defrag) etmelisiniz. Haftada 1 yapilmasinda fayda vardir. Komut: OPTIMIZE TABLE <tablo adi> 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 <tablo adi> 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 <tablo adi> 4. Tablo Tamiri: Neden gerekir? - Bozulan tablolari tamir etmek icin kullanilir. Komut: REPAIR TABLE <tablo adi> |
|
||||
|
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 (tablolar, indexler vb...) 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 (backup) alan scriptler gelistirin. Arada bir ornegin ayda 1 kez dizin bazinda yedek alin. Yani tum mysql dizinini MySQL i kapattiktan sonra "taz cvzf tum_mysql.tzg /var/lib/mysql" seklinde yedekleyin. 8. MySQL ayarlariniz ne kadar iyi olursa olsun kotu kodlama en guclu makineleri durdurmaya yeter. Yavas SQL sorgularinizi asagidaki konfigurasyon (my.cnf) ile tesbit edip duzeltin [mysqld] 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 ![]() |
|
||||
|
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 "server", "hosting","reseller","proreseller","proreseller1", "proreseller2","proreseller3","proreseller4","pror eseller5","proreseller6","proreseller7","proresell er8" 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 "server", "hosting","reseller","proreseller","proreseller1", "proreseller2","proreseller3","proreseller4","pror eseller5","proreseller6","proreseller7","proresell er8" 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
__________________
[Bir Türk] |
|
||||
|
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 ------- [mysqld] ... ... 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: "Select ad, soyad from kullanici where kullanici_kod = 100" ile "SELECT ad, soyad from kullanici WHERE kullanici_kod = 100" 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 ------- [mysqld] ... ... query_cache_type = 1 query_cache_size = 32M ... ... 32Mb baslamak icin cok uygun. Tavsiyem 64Mb in ustune cikmayin. |
![]() |
| Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| Seçenekler | |
| Stil | |
|
|
Benzer Konular
|
||||
| Konu | Konuyu Başlatan | Forum | Cevaplar | Son Mesaj |
| neden.com | mathiaxbars | Webmaster Genel Konular | 0 | 2007-01-18 04:49 |
| socket '/var/lib/mysql/mysql.sock' (2) Bu hata niyedir ? | annudora | PHP | 7 | 2006-07-09 23:10 |
| Mysql sunucusu neden çalışmıyor olabilir? | BabaPanter | PHP | 3 | 2006-03-09 12:01 |
| MySQL 3.23.58 versiyonlu database MySQL 4.1.10 versiyonda çalıştırma.. | DamgaNet | MySQL Veritabanı SQL | 6 | 2006-01-15 20:36 |