İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

Yeni Server için my.cnf ayarları

feverinlove

0
İyinet Üyesi
Katılım
21 Kasım 2004
Mesajlar
0
Reaction score
0
Konum
Istanbul / Turkey
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.
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
Sorunun MySQL den kaynaklandığına eminmisiniz, kodlamada problem olabilir mi?
 

desoLate

0
İyinet Üyesi
Katılım
14 Haziran 2006
Mesajlar
220
Reaction score
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.
 

feverinlove

0
İyinet Üyesi
Katılım
21 Kasım 2004
Mesajlar
0
Reaction score
0
Konum
Istanbul / Turkey
@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?
 

desoLate

0
İyinet Üyesi
Katılım
14 Haziran 2006
Mesajlar
220
Reaction score
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.
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
@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.
 

feverinlove

0
İyinet Üyesi
Katılım
21 Kasım 2004
Mesajlar
0
Reaction score
0
Konum
Istanbul / Turkey
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.
 

feverinlove

0
İyinet Üyesi
Katılım
21 Kasım 2004
Mesajlar
0
Reaction score
0
Konum
Istanbul / Turkey
@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ı :)
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
@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.
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
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
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
Sorunun kaynağını bulmanız gerekiyor, yardım teklifim halen geçerlidir.
 

feverinlove

0
İyinet Üyesi
Katılım
21 Kasım 2004
Mesajlar
0
Reaction score
0
Konum
Istanbul / Turkey
Ş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?
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
66
Konum
Sakarya
mode_deflate load u azaltmaz. Tam tersine CPU kullanımını arttırır.
Öncelikle PHP için Xcache yada eAccelerator kurun.
 

feverinlove

0
İyinet Üyesi
Katılım
21 Kasım 2004
Mesajlar
0
Reaction score
0
Konum
Istanbul / Turkey
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)); ?>
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Üst