Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Mysql Sorunu


MartinLGore

Öne çıkan mesajlar

Mysql server günün yoğun saatlerinde arada bir bağlantı hatası veriyor. Cpu kullanımı yüzde 90 larda ram'de bayağı kullanılıyor. Fakat bu bunlarla alakalı değilde sanki bir limitsel sorun gibi karşıma çıkıyor.

Connection limit ayarlanabiliniyor mu ?

Veyahut başka ne tip bir sorun olabilir aklıma hiç bir şey gelmiyor herhangi bir fikri olan ?
Link to comment
Sosyal ağlarda paylaş

şimdi connection hatası veriyorsa fazla connectiondandır, bunun ayarı var elbette. ama öncelikle başka bişiden bahsedicem, büyük ihtimal o sorundan kaynaklanıyordur. connection limit içinde yazımın en altında ilgili komut var, direk orayada bakabilirsin.


şimdi öncelikli olarak mysqlde connection için başlıca 2 tip var,
1 - persistent connectionlar
2 - direk


cogu insanlar, cok fazla incelemeden persistent connection üzerinden mysqle baglanıyor. zira ilk bakışta bu tar connection daha hızlı veya daha az yük bindirirmiş gibi görünmekte.


aslında ise ciddi olarak ne yaptıgını bilmiyorsan, ve ince ince düşünülüp tartılmamışsa veritabanı yapısı ve serverin kendisi (sitenin genel yapısı), persistent connectionlar daha büyük sorun yaratıyor.

bence ilk olarak persistent connnection ise baglantı türünüz, onu iptal edip normal baglanmanızda yarar var. (mysql_pconnect yerine, mysql_connect komutunun kullanılması gerekiyor)


pconnect kullanıldığında, bazen takılıp kalıyor, boş yere serverı yoruyorsunuz.

bunu engellemek için aslında sunlar yapılabilir

my.cnf adlı dosyayı buluyoruz (genelde /etc/my.cnf pathindedir)

interactive_timeout= 20
wait_timeout= 20
connect_timeout= 5

bu üstte yazdıklarımız ile takılıp kalan veya servera cok yük bindiren baglantıları ucuracaktır. hangi komutun ne işe yaradıgını görmek için mysql documanlarına bakıp, belirtilen limitleri kafanıza göre düzenleyebilirsiniz.

burada önemli bir uyarı yapayım,
connectionları ve işlem yapabilmesi için belirlenen zamanı düşürürken, server ve veritabanı yapısını iyi bilmek laızm. legal olarak uyzun sürecek , önemli bir işlemide iptal ediyor olabilirsiniz.


bunlarla sorun cozulmuyorsa, mysqlin handle etmesi gereken connection limitinide kısıtlayabilirsin, bunun icinde my.cnf dosyasında bulunan [mysqld] sekmesinin altına su komutu yazıver,
max_user_connections = XXX

XXX yerinede serverına göre bir rakam koyuver. mesela patinin serveri donanımsal acıdan zayıf oldugu icin bu rakam düşüktür.

aynı serverda birden fazla web sitesi varsa bu rakamı ozellikle düsürmen (atıyorum 40-50 mesela) gerekebilir.

cokda düşürmeni tavsiye etmem aslında en güzeli, serverın basında bekleyip, peak hour dedigimiz zamanları gozetlemek, once mesela 100 yap baktın ucuyor 50 yap baktın cok rahatlamıs 75 yap bunun gibi denem yanışma metodu ile kendi serverına en uygun rakamını buluver.
Link to comment
Sosyal ağlarda paylaş

Cevabın için teşekkürler..

Öncelikle serverda sadece phpadsnew adlı bir open source adserver çalışıyor.
Persistent connection ile neyi kastettiğini biliyorum fakat sorunun orada olmadığını düşünüyorum zira kullandığımız adserver alanında en iyisi ve bu tip connection sorunları ile ilgili en iyi ve optimize kodları yazdıklarını varsayıyorum open source ve populer olduğu için..

Az sonra şu diğer verdiğin configuration değerlerini sisteme gireceğim.

Yalnız sormak istediğim bir şey daha var.
Mysql default olarak kaç connection sınırı ile geliyor. Saniyede kaç sorguya izin veriyor default olarak ?

Belki o zaman sorunun nerede olduğunu daha iyi anlayabilirim..

Ayrıca mysql'in üstündeki varolan stress'i ölçen yazılımlar var mı? Ayrıyetten bildiğiniz iyi bir stress testi yöntemi var mı? Veyahut yazılım?
Link to comment
Sosyal ağlarda paylaş

mysql'in varsayılan lmiti 100 diye hatırlıyorum.

hatta mesai arkadasıam sordum oda 100 dedi ;)



persistent connection içinde su iki sayfayı okumanda yarar var:
php, mysql_pconnect komutu ile baglanıyorsa, buna persistent connection deniyor. eger mysql_connect komutu ile baglanırsa o zaman normal baglantı yapıyorsun.

my.cnf ve php.ini de persistent connection yapıp yapmayacagına dair izinler yapabilirsin. bu iki dosyada persistent connection yapma şeklinde düzenle, serveri restart et, birde o şekilde çalıştır bakalım. eger kullandıgın program hata veriyorsa persistent olarka baglanmak istiyor demektir.
Link to comment
Sosyal ağlarda paylaş

Bütün verdiğin ayarları yapmama rağmen sorun devam etti. Persistent connection olayına baktım zaten açık değilmiş. Ayarlarından connectionları persistent yaptım yine bişi değişmedi..

En son eaccelerator diye bişi buldum. Zend optimizer gibi bişi imiş. Ya bugüne kadar kullanmamıştım bu tip yazılımlar artık default kurduğum her servera kuracağım.. Ne sorun kaldı ne birşey..

Cpu %90 dan aşağı inmez iken load avarege 40 larda iken , kurulumdan sonra apache yi restart ettim cpu %30 lara load avarage 1.40'lara evet yanlış değil 1.40 lara düştü.. Demek cpu falan yetmiyomuş mysql ondan patlıyomuş.. Şimdi çok temiz..

Süper bişi yahu..
Link to comment
Sosyal ağlarda paylaş

eaccelerator'u inceledim, anladıgım kadarı ile bir nevi çalışmış scriptleri cache yaratıp oraya atıyor, oradan okutuyor.

bi ara kurup bi deneyeyim kendi sistemimde, güzel bişi ise patiye atarız ;)
kurulum sırasında bi kıllık cıkarttımı, onu bunu sonra sunu al yükle şeklinde? bugünlerde neyi kurmaya çalışsam 150 ayrı zımbırtıyı kur öyle gel diye geri gönderiyor kurulum scripti.

eger bu senin sorunlarını tamamen düzeltmiş ise, bence mysql tablonda bulunan "indexlerde" sorunun olabilir. onları kontrol etmeni öneririm.
Link to comment
Sosyal ağlarda paylaş

dosyaları sildikce tablolar genişler, indexde tablolunun kendiside içerisinde boşluklar barındırır, buda gereksiz yere şişmesine sebeb olur. bunları gidermek gerekiyor arada bir optimize edip.

ama asıl sorn, düzgün yere index atılmamasıdır. mesela "select hede from tablo1 where hodo='teswetr'" seklinde bir querymiz var. burada tablo1 tablosundaki hede ve hodo kolonlarının indexlenmesi gerekir (genel olarak)

bu tarz index sorunları olabilir. ki bence senin sorununda bundan kaynaklanıyor olsa gerek. cünkü cache yaınbca duzelmişse, o zaman mysql bu sql sonuclarını yeniden yaratmadıgından, server sonucları direk cacheden okudugundan, sorunsuz bir şekilde devam ediyor işlemeye.

benim tavsiyem kullandıgın programın sql queryleri al tek tek dene,
mysqlde slow queries olarak arat, en azından slowquery leri tek tek incele. bana sanki sorun buradan kaynakşlanyor gibime geldi. bakalım burada mı sorun.


ps: senin öneridgin programı kuramadım henüz, cok iş güc var. bi rahatladıgımda onuda bi kurayım.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...