Yeni Server için my.cnf ayarları

  • Konbuyu başlatan feverinlove
  • Başlangıç tarihi
F
feverinlove
Misafir
Merhaba arkadaşlar,
Eski P4 3.0Ghz, 1 gb ram olan sunucum sitelerin yükünü kaldırmadığı için yeni sunucuma geçtim, fakat yeni sunucumda nedense kaldırmıyor. Sunucumda 4 tane günlük ortalama 6000 tekil hitli site barındırıyorum. MYSQL usage çoğu zaman %115 civarı.

Yeni sunucu özellikleri:

Core2Duo E6700
2gb ram
250gb SATA

My.cnf dosyam:
Kod:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-locking
skip-innodb
query_cache_limit=8M
query_cache_size=256M
query_cache_type=1
max_connections=500
max_user_connections=20
interactive_timeout=20
wait_timeout=20
connect_timeout=6
thread_cache_size=128
key_buffer=16M
join_buffer=1M
max_allowed_packet=16M
table_cache=20000
open_files_limit=60000
record_buffer=1M
sort_buffer_size=2M
read_buffer_size=2M
max_connect_errors=10
# Try number of CPU's*2 for thread_concurrency
thread_concurrency=4
myisam_sort_buffer_size=64M
#log-bin
server-id=1
key_buffer_size=32M
[mysql.server]
user=mysql
basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/lib/mysql/mysql.pid
open_files_limit=8192

[mysqldump]
quick
max_allowed_packet=16M

[mysql]
no-auto-rehash
#safe-updates

[isamchk]
key_buffer=32M
sort_buffer=32M
read_buffer=16M
write_buffer=16M

Yardımcı olursanız sevinirim.
 
Root
Root
İyinet Ekibi
Onaylı Üye
Katılım
2 Eylül 2002
Mesajlar
5,043
Tepki puanı
79
Konum
SEO
Sorunun MySQL den kaynaklandığına eminmisiniz, kodlamada problem olabilir mi?
 
0
Onaylı Üye
Üye
Katılım
14 Haziran 2006
Mesajlar
220
Tepki puanı
0
Sanırım hazır scriptler yerine kendinizin yazmış olduğu scriptleri kullanıyorsunuz. Tavsiyem, tüm sitelerinizi cache'lerseniz, gözle görülür yararı olacaktır. Yüksek hitli sitelerde cahce şart oluyor.
 
F
feverinlove
Misafir
@iyinet: Aslına bakarsanız tam olarak sorunun temelini bilmiyorum. O yüzden mysql ayarlarımı doğru yapıp, şıklardan bir tanesini elemek istiyorum.

@desolate: Cachelemek derken sanırım eaccelerator gibi cache programlarından bahsediyorsunuz?
 
0
Onaylı Üye
Üye
Katılım
14 Haziran 2006
Mesajlar
220
Tepki puanı
0
eaccelerator, zend optimizer gibi php hızlandırıcı bir sistem. Benim bahsettiğim olay, sql caching, yani sayfada sürekli sql sorgusu çalıştırıp mysqli yormak yerine, sql sorgularını daha az çalıştırıp alınan sonuçları .txt dosyalarda depolayıp sonrasında sayfada göstermek.

Basit bir örnekle açıklamaya çalışırsak ;
Diyelim ki sitenin anasayfasında son eklenen 5 tane blog başlığı göstermek istiyoruz. Bunu normal yolla yapmaya kalksak, 6.000 tane ziyaretçi tek tek sql'e bağlanacak ve ayrı ayrı taleplerde bulunacak. Bunun yerine;

PHP:
$sql = "SELECT blog_id, baslik FROM blog order by blog_id desc limit 5"; 
$query = mysql_query($sql); 
	
$tmp = array(); 
  
while( $veriler = mysql_fetch_object($query) )
$tmp[ $veriler->id ] = $veriler->baslik; 
  
$fd = fopen("bloglar.txt", 'w'); 
fwrite($fd, serialize($tmp) ); 
fclose($fd); 
return $tmp;

Yaparak, son 5 tane blog başlığını, bloglar.txt dosyasına kayıt ediyoruz. Sayfada göstereceğimiz zaman;

PHP:
//txt'den verileri alma fonksiyonu
function getContents($cacheFile){ 
     $fd = fopen($cacheFile, 'r');  
     $contents = fread($fd, filesize($cacheFile) ); 
     fclose($fd); 
     return unserialize($contents);
} 

$veriler = getContents("bloglar.txt"); 
foreach ($veriler as $id2 => $baslik) 
{
echo $id2.$baslik;
}

Yukardaki kodlarla mysql bağlantısı yapmadan, .txt dosyasından verileri çekiyoruz. Böylece mysql yükünü azaltmış oluyoruz. Ana mantık kabataslak budur. Cache üzerine yazılmış daha ayrıntılı makaleleri webde bulabilirsiniz.
 
Root
Root
İyinet Ekibi
Onaylı Üye
Katılım
2 Eylül 2002
Mesajlar
5,043
Tepki puanı
79
Konum
SEO
@desolate in vermiş olduğu dosya bazlı cacheleme örneği oldukça güzel.
Bunu 1 ileriye taşıyarak bellek cachlemesi de yapabilirsiniz, memcached bunun için biçilmiş kaftan.

@feverinlove, sorunun kaynağını belirlemen şart yoksa boşa kürek sallamış oluruz.
 
F
feverinlove
Misafir
Yazınız için çok teşekkürler, ne yazıkki server üzerinde bi tane site için bunu uygulayabilirim.

Sitelerden bir tanesi özellikle CPU load ile dikkat çekiyor. RSS sitesi ve 220000 row bulunan bir MYSQL db 'e sahip. (neyseki random data istemiyor, şu an itibariyla 110mb). Belli saat aralıklarıyla sitelerin RSS lerinden kendini besliyor ve datanın bir kısmını MYSQL 'de saklıyor.

Eaccelerator yüklemeyi deniycem, fakat WP siteleri etkilemesi kötü oluyor.
 
F
feverinlove
Misafir
@iyinet: Teşekkürler, peki yukardaki my.cnf ayarlarında bir değişiklik yapmam gerekiyor mu? Sunucu yeni kuruldu ve sanırım herhangi bir optimasyon yapılmadı. Beni sorunun MySQL kaynaklı olmasını düşünmeye iten şey, sitenin eski sahibinin aynı özelliklerde bir serverda bunun gibi 20 site barındırması :)
 
Root
Root
İyinet Ekibi
Onaylı Üye
Katılım
2 Eylül 2002
Mesajlar
5,043
Tepki puanı
79
Konum
SEO
@iyinet: Teşekkürler, peki yukardaki my.cnf ayarlarında bir değişiklik yapmam gerekiyor mu? Sunucu yeni kuruldu ve sanırım herhangi bir optimasyon yapılmadı. Beni sorunun MySQL kaynaklı olmasını düşünmeye iten şey, sitenin eski sahibinin aynı özelliklerde bir serverda bunun gibi 20 site barındırması :)

Ok madem ısrar ediyorsun, öncelikle şunu sorayım, innodb ve replication kullanıyormusun?
Ona göre ayarlara bakacağım.
 
Root
Root
İyinet Ekibi
Onaylı Üye
Katılım
2 Eylül 2002
Mesajlar
5,043
Tepki puanı
79
Konum
SEO
Eski my.cnf i kaydedip ardından bu şekilde değiştir. Sonra da mysql i restart et.

Kod:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-locking
skip-innodb
query_cache_limit=4M
query_cache_size=32M
query_cache_type=1
max_connections=500
thread_cache_size=128
key_buffer=256M
max_allowed_packet=16M
table_cache=20000
low_priority_updates=1

[mysql.server]
user=mysql
basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/lib/mysql/mysql.pid
open_files_limit=8192

[mysqldump]
quick
max_allowed_packet=16M

[mysql]
no-auto-rehash
#safe-updates

[isamchk]
key_buffer=32M
sort_buffer=32M
read_buffer=16M
write_buffer=16M
 
F
feverinlove
Misafir
Anlamıyorum, bu yeni server nası oluoda 4 tane siteyi kaldıramıyor...
 
Root
Root
İyinet Ekibi
Onaylı Üye
Katılım
2 Eylül 2002
Mesajlar
5,043
Tepki puanı
79
Konum
SEO
Sorunun kaynağını bulmanız gerekiyor, yardım teklifim halen geçerlidir.
 
F
feverinlove
Misafir
Şimdi farkettim, serverda mod_deflate gibi bazı moduleler yüklü değil. Gerçi wordpress siteleri gzipli ama normal sitelerim gzipli değil.

Mod_deflate nasıl yükleyebilirim?

Bide mode_deflate gibi önemli load azaltabilecek türde hangi moduleler var?
 
Root
Root
İyinet Ekibi
Onaylı Üye
Katılım
2 Eylül 2002
Mesajlar
5,043
Tepki puanı
79
Konum
SEO
mode_deflate load u azaltmaz. Tam tersine CPU kullanımını arttırır.
Öncelikle PHP için Xcache yada eAccelerator kurun.
 
F
feverinlove
Misafir
Sorunlu olan siteyi buldum en azından.

Sitenin her sayfasında databaseden random haber çeken şu script var:
Kod:
<?php
$maxRows_sonyazilar = 10;
$pageNum_sonyazilar = 0;
if (isset($_GET['pageNum_sonyazilar'])) {
  $pageNum_sonyazilar = $_GET['pageNum_sonyazilar'];
}
$startRow_sonyazilar = $pageNum_sonyazilar * $maxRows_sonyazilar;

mysql_select_db($database_gece, $gece);
$query_sonyazilar = "SELECT * FROM yazilar ORDER BY RAND()";
$query_limit_sonyazilar = sprintf("%s LIMIT %d, %d", $query_sonyazilar, $startRow_sonyazilar, $maxRows_sonyazilar);
$sonyazilar = mysql_query($query_limit_sonyazilar, $gece) or die(mysql_error());
$row_sonyazilar = mysql_fetch_assoc($sonyazilar);

if (isset($_GET['totalRows_sonyazilar'])) {
  $totalRows_sonyazilar = $_GET['totalRows_sonyazilar'];
} else {
  $all_sonyazilar = mysql_query($query_sonyazilar);
  $totalRows_sonyazilar = mysql_num_rows($all_sonyazilar);
}
$totalPages_sonyazilar = ceil($totalRows_sonyazilar/$maxRows_sonyazilar)-1;

$queryString_sonyazilar = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_sonyazilar") == false && 
        stristr($param, "totalRows_sonyazilar") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_sonyazilar = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_sonyazilar = sprintf("&totalRows_sonyazilar22=11%d%s", $totalRows_sonyazilar, $queryString_sonyazilar);
do { 
?>
<li><a href="<?php echo $row_sonyazilar['id']; ?>_<?php echo str_replace($find, $replace, $row_sonyazilar['baslik']); ?>.html" title="<?php echo $row_sonyazilar['baslik']; ?>"><?php echo $row_sonyazilar['baslik']; ?></a></li>
<?php } while ($row_sonyazilar = mysql_fetch_assoc($sonyazilar)); ?>
 
F
feverinlove
Misafir
random haberler yerine en son eklenen haberler koydum. Az da olsa load azaldı fakat yinede 5-6 seviyesinde gidiyor.
 
Geri
Üst