Magento Veritabanı ve Sistem Şişmelerini Kolayca Önleyin

Magento yapısı itibari ile veritabanı büyüklüğü, tuttuğu cache dosyaları belli bir müddet sonra ciddi boyutlara ulaşabilir, sisteminizin şişmesini performans düşmelerine sebep olabilir.
Bu şişmeler Magento optimizasyonu konusunda bize gelen müşterilerimizin sitelerinde en çok gözlemlediğimiz durumların başında geliyor. Onlarca GB boyutuna ulaşmış Log dosyaları, 1 milyonu geçmiş session dosya yada veritabanı session kayıt satırları, 500-1000 ürün olmasına rağmen 3-4gb’lere ulaşmış veritabanı boyutlarını gözlemliyoruz. Sisteminizin şişme durumunu ölçmek için, veritabanınızdaki ;

            'aw_core_logger',
            'dataflow_batch_export',
            'dataflow_batch_import',
            'log_customer',
            'log_quote',
            'log_summary',
            'log_summary_type',
            'log_url',
            'log_url_info',
            'log_visitor',
            'log_visitor_info',
            'log_visitor_online',
            'index_event',
            'report_event',
            'core_session',
            'report_viewed_product_index',
            'report_compared_product_index',
            'catalog_compare_item',
            'catalogindex_aggregation',
            'catalogindex_aggregation_tag',
            'catalogindex_aggregation_to_tag'

Tablolarının satır büyüklüklüklerini inceleyin eğer sizin veritabanınızda da bu satırlar 100binlere varan rakamlar görürseniz ciddi temizlik vakti geldiğini düşünebilirsiniz.
Bu yukarıda bahsettiğimiz veritabanında çöpler için. Eğer dosya sisteminizdeki gereksiz verileri görmek istiyorsanız,

        'downloader/.cache/',
        'downloader/pearlib/cache/*',
        'downloader/pearlib/download/*',
        'var/log/', 
        'var/report/',
        'var/session/',
        'var/tmp/'

bu klasörlerin büyüklüklerini inceleyin Sessionları eğer filetype olarak tutuyorsanız /var/session klasörünüzde 100binlerce dosya görmeniz gayet olağandır.
Bunların temizliğini otomatiğe bağlayarak sisteminizi büyük ölçüde rahatlatabilirsiniz.
Bunun için sitenizin magento kurulu olduğu klasörde cleanup.php isimli bir dosya oluşturun bu dosya ismini isteğinize göre değiştirebilirsiniz. Çok tahmin edilebilecek bir dosya ismi koymamanız güvenlik açısından daha faydalı olabilir.

<?php

switch($_GET['clean']) {
    case 'log':
        clean_log_tables();
    break;
    case 'var':
        clean_var_directory();
    break;
}

function clean_log_tables() {
    $xml = simplexml_load_file('./app/etc/local.xml', NULL, LIBXML_NOCDATA);
    
    if(is_object($xml)) {
        $db['host'] = $xml->global->resources->default_setup->connection->host;
        $db['name'] = $xml->global->resources->default_setup->connection->dbname;
        $db['user'] = $xml->global->resources->default_setup->connection->username;
        $db['pass'] = $xml->global->resources->default_setup->connection->password;
        $db['pref'] = $xml->global->resources->db->table_prefix;
        
        $tables = array(
            'aw_core_logger',
            'dataflow_batch_export',
            'dataflow_batch_import',
            'log_customer',
            'log_quote',
            'log_summary',
            'log_summary_type',
            'log_url',
            'log_url_info',
            'log_visitor',
            'log_visitor_info',
            'log_visitor_online',
            'index_event',
            'report_event',
            'core_session',
            'report_viewed_product_index',
            'report_compared_product_index',
            'catalog_compare_item',
            'catalogindex_aggregation',
            'catalogindex_aggregation_tag',
            'catalogindex_aggregation_to_tag'
        );
        
        mysql_connect($db['host'], $db['user'], $db['pass']) or die(mysql_error());
        mysql_select_db($db['name']) or die(mysql_error());
        
        foreach($tables as $table) {
            mysql_query('TRUNCATE `'.$db['pref'].$table.'`');
        }
        echo 'Veritabanı temizlendi.';
    } else {
        exit('local.xml dosyası bulunamadı.');
    }
}

function clean_var_directory() {
    $dirs = array(
        'downloader/.cache/',
        'downloader/pearlib/cache/*',
        'downloader/pearlib/download/*',
        'media/css/',
        'media/css_secure/',
        'media/import/',
        'media/js/',
        'var/cache/',
        'var/locks/',
        'var/log/',
        'var/report/',
        'var/session/',
        'var/tmp/'
    );
    
    foreach($dirs as $dir) {
        exec('rm -rf '.$dir);
    }
}

?>

Dosyayı oluşturduktan sonra;
Dosya sisteminizdeki temizlemek için tarayıcınızdan;
siteadresiniz.com/cleanup.php?clean=var

Veritabanınızı temizlemek için ise;
siteadresiniz.com/cleanup.php?clean=log

şeklinde tarayıcınızdan çağırabilir yada basit bir wget cronu oluşturarak haftalık yada isteğinize bağlı zaman aralığında otomatik temizlik yapılmasını sağlayabilirsiniz.
Not: Gün aşırı kullanmamaya ve gece saatlerinde trafiğinizin en yoğun olduğu saatlerde cron çalıştırmanızı tavsiye ederiz. Sessionları temizlemek o an sitenizdeki müşterilerin sepete attığı ürünleri görememesine, üye girişi yapmış kişilerin logout olmalarına neden olacaktır.

Kullanışlı ve akıllı eticaret çözümleri için Magento ile geliştirmeler yapıyor, kurumlara yönelik tümleşik iş çözümleri üzerine vakit harcıyorum. Vakit buldukça magefly üzerinde magento üzerine paylaşımlar yapmaya çalışıyorum.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir