Mysql’deki Tüm Tabloları Optimize Etmek

Mysql Logo

Veritabanı deyince aklımıza ilk Mysql gelir genellikle. Şaşırmamak lazım, çünkü veritabanı piyasının Sana’sı, Olin yağı olmuştur artık. Phpbb, Wordpress, Vbulletin, Smf, Joomla gibi tanınmış içerik yönetim ve forum sistemleri bile öntanımlı olarak mysql’le kuruluyorlar. Hal böyle olunca zamanla birden fazla veritabanı sahibi oluyoruz ve bunları optimize etmemiz arada sırada onarmamız gerekiyor. Tüm tabloları teker teker optimize etmek ilk başta kolay gibi gözükse de iş zamanla angaryaya dönüşüyor ve insanın canını sıkıyor. Ben de bunu otomatik yapan küçük bir php programı yazıp işi bitirmek istiyordum ama aramaya inandım ve Google bana kısa yoldan nasıl yapacağımı açıkladı:
[code]
echo '

' . "\n\n";
set_time_limit( 100 );

$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
$start = $time;

//Connection variables :
$h = 'localhost';
$u = 'root';
$p = 'password';

$dummy_db = 'mysql';

/*The php->mysql API needs to connect to a database even when executing scripts like this.
If you got an error from this(permissions),
just replace this with the name of your database*/

$db_link = mysql_connect($h,$u,$p);

$res = mysql_db_query($dummy_db, 'SHOW DATABASES', $db_link) or die('Could not connect: ' . mysql_error());
echo 'Found '. mysql_num_rows( $res ) . ' databases' . "\n";
$dbs = array();
while ( $rec = mysql_fetch_array($res) )
{
$dbs [] = $rec [0];
}

foreach ( $dbs as $db_name )
{
echo "Database : $db_name \n\n";
$res = mysql_db_query($dummy_db, "SHOW TABLE STATUS FROM `" . $db_name . "`", $db_link) or die('Query : ' . mysql_error());
$to_optimize = array();
while ( $rec = mysql_fetch_array($res) )
{
if ( $rec['Data_free'] > 0 )
{
$to_optimize [] = $rec['Name'];
echo $rec['Name'] . ' needs optimization' . "\n";
}
}
if ( count ( $to_optimize ) > 0 )
{
foreach ( $to_optimize as $tbl )
{
mysql_db_query($db_name, "OPTIMIZE TABLE `" . $tbl ."`", $db_link );
}
}
}

$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
$finish = $time;
$total_time = round(($finish - $start), 6);
echo 'Parsed in ' . $total_time . ' secs' . "\n\n";
?>
[/code]
Sadece şu değişkenlere ($h, $u, $p) kendi hostunuzu, kullanıcı adınızı ve şifrenizi giriyorsunuz ve betik o kullanıcının tüm veritabanlarını otomatik olarak optimize ediyor.(Kullanıcının tüm tablolara ulaşmak için gerekli izni olması gerekiyor. Mesela "root" kullanıcısı.) Bunu bir de cronjobla süsleyip otomatikleştirirseniz tadından yenmez. Çok vakit kazandınız, koşun, oynayın, karlarda yuvarlanın!

 

3 Responses to Mysql’deki Tüm Tabloları Optimize Etmek

  1. webiket.net

    Mysql’deki Tüm Tabloları Optimize Etmek…

    Tüm tabloları teker teker optimize etmek ilk başta kolay gibi gözükse de iş zamanla angaryaya dönüşüyor ve insanın canını sıkıyor….

  2.  
  3. sinan

    mysql gerçekten vazgeçilmez oldu.asp ve .net sistemlerinde de artık mysql kullanımı oldukça yüksek.
    Google bana kısa yoldan nasıl yapacağımı açıkladı demişsiniz.
    Aslında insanlar birşeyi yükseltiyor gözlerinde.Çok popüler olan her zaman iyi olmayabilir.:)

  4.  
  5. Beyn

    On Bağlantı #9…

    Biraz geciktim bu hafta, malum yolculuk, bayram falan… Buyrun:

    Bağlantı #86: Tansu’dan Türk Hacker’lar İle İlgili Gerçekler yazı dizisinin üçüncü kısmı.
    Bağlantı #87: Hakan Demiray’dan, bir e-kitap biçimi olan .lit uzantılı …

  6.  

Benim de söyleyeceklerim var!