12

Ekim
2011

Veri Tabanı Tablo Büyümelerini Takip Edin

Yazar: Nurettin TOPAL  |  Kategori: Genel  |  Yorum: Yok   |  

Veri tabanını yoğun bir şekilde kullanıyorsanız ve elinizde de kısıtlı miktarda veritabanı disk alanınız varsa başınıza gelebilecek sorunlardan bir tanesi tablo boyutlarının büyümesi, bazen de beklenmedik zamanlarda tahmininizin çok çok üstüne çıkabilmesidir.

İlk problem zaman içerisinde başınıza gelebilecek bir olaydır ve zaman zaman kontrol ederek bu problemi önleyebilirsiniz. Ortalama günde X kayıt atılıyor, Y kadar alanım var ve bu şekilde devam ettiği takdirde Z kadar gün beni götürür şeklinde düşünebilirsiniz.

Fakat ikinci problemin ne zaman olacağı ile ilgili bir fikriniz yoktur. Özellikle loglarınızı veri tabanı üzerinde tutuyorsanız(kullanıcıların yaptıkları işlemler, silinen kayıtların yedeklenmesi, güncellenen kayıtların orjinallerinin yedeklenmesi, web servisleriniz varsa giden gelen verilerin loglanması vs.) durum biraz daha farklı olacaktır. Bir önceki örnekte vermiş olduğum tahmini çözüm işimize yaramayacaktır.

Peki ne yapabiliriz?

Bunun için küçük bir kod yazıp, cron olarak günde bir kere ya da haftada bir kere(sizin veri tabanınıza göre değişebilir) çalıştırarak belli bir boyutun üzerine çıkan tabloların listesini kendinize mail olarak gönderebilirsiniz. Bu durumda olası aşırı tablo büyümelerini fark edip gerekli çözümleri üretmenize yardımcı olacaktır.

$startTime          = date("Y-m-d H:i:s");
$resultData         = array();
$excludeDB          = array("test");
$excludeTable       = array("arama");
$maxTableSize       = 5;
$tableSizeType      = 1024 * 1024; // 1024  : KB , 1024 * 1024 : MB, 1024 * 1024 * 1024 : GB
$tableSizeTypeName  = "MB";
$mailTo             = "test@email.com, test2@email.com";
$mailFrom           = "test@email.com";

$dbHost             = "localhost";
$dbUser             = "root";
$dbPass             = "root";
                                                   
$dbLink         = mysql_connect($dbHost, $dbUser, $dbPass);
$dbResult       = mysql_query("SHOW DATABASES");
   
while($dbData = mysql_fetch_assoc($dbResult)){    
   
    $dbName = $dbData["Database"];
    if(in_array($dbName, $excludeDB)){
        continue;    
    }

    mysql_select_db($dbName, $dbLink);
    $tableResult = mysql_query("SHOW TABLE STATUS");
     
    while($tableData = mysql_fetch_assoc($tableResult)) {
       
        if(in_array($tableData['Name'], $excludeTable)){
            continue;    
        }
       
        $total_size = (($tableData["Data_length"] + $tableData[ "Index_length" ]) / $tableSizeType);
        if($total_size>=$maxTableSize){
            $resultData[$dbName.".".$tableData['Name']] = sprintf("%.2f", $total_size)." ".$tableSizeTypeName;
        }
    }
}

$endTime = date("Y-m-d H:i:s");

echo $startTime."\n\r <pre>".print_r($resultData,1)."</pre> \n\r".$endTime;

if(1){
    $mailSubject = 'DB Alert From Your Server - '.date("Y-m-d H:i:s");
    $mailMessage = $startTime."\n\r".print_r($resultData,1)."\n\r".$endTime;
    $mailHeaders = 'From: '.$mailFrom;

    $sentMail = mail($mailTo, $mailSubject, $mailMessage, $mailHeaders);
    if($sentMail){
        echo "mail gönderildi.";
    }
}

İsterseniz daha da geliştirerek bu bilgileri bir tabloda tutarak günlük, haftalık ve aylık şekilde grafikli bir veri artışı raporu çıkarabilirsiniz.

yorumlar:

Hiç Yorum Yapılmamış!

yorum yapmak ister misin?

Facebook FriendFeed Twitter RSS Beslemesi Flickr Linkedin foursquare
reklamlar

sponsor reklamlar

Çay Haber - Yöresel Haberi NET Adresi SameUrl - URL Shortening Service Mutlu Gelin 125x125 Reklam

© Tüm Hakları Saklıdır - Nurettin TOPAL
Yazılar kaynak belirtilmeden kullanılamaz.

Wordpress alexa bilgilerim Website Detay