Archive

Archive for the ‘MySQL’ Category

MySQL table crash

February 16th, 2009 Venelin Kochev No comments

Днес имаше crash на основната mysql таблицата на dirimp3.com около час борба и check-ване и пускане на разни tools, сайта отново е на лице.

Част от лога:

# ./myisamchk -c dirimp3/music.MYI
Checking MyISAM file: dirimp3/music.MYI
myisamchk: warning: 1 client is using or hasn’t closed the table properly
- check file-size
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1
- check data record references index: 2
- check data record references index: 3
- check data record references index: 4
myisamchk: error: Found key at page 32574464 that points to record outside datafile
- check record links
myisamchk: error: Keypointers and record positions doesn’t match
MyISAM-table ‘dirimp3/music.MYI’ is corrupted

# ./myisamchk -r dirimp3/music.MYI
- recovering (with sort) MyISAM-table ‘dirimp3/music.MYI’
- Fixing index 1
- Fixing index 2
- Fixing index 3
- Fixing index 4

# ./myisamchk -o dirimp3/music.MYI
- recovering (with keycache) MyISAM-table ‘dirimp3/music.MYI’
Duplicate key 4 for record at 1726560 against new record at 423740
Duplicate key 4 for record at 46808668 against new record at 6501208
Killed

Това е крайния резултат:

MyISAM file: xxxx/dirimp3/music.MYI
Record format: Packed
Character set: utf8_general_ci (45)
File-version: 1
Creation time: 2009-01-25 15:32:44
Recover time: 2009-02-15 18:47:35
Status: open,changed
Datafile length: 142761600 Keyfile length: 153101312
Max datafile length: 281474976710654 Max keyfile length: 288230376151710719
Recordlength: 101

Alternative PHP Cache

April 4th, 2008 Venelin Kochev No comments

APC е PECL extension за PHP, който позволява кеширането на данни и по този начин примерно се избягва изпълнението на една MySQL заявка и ако тя връща едни и същи данни сами се сещате, че е излишно да се изпълнява всеки път, разбира се може да се хардкод-не резултата в кода, но по добрия вариант за мен е кеширането. Преди време тествах различните кеширащи системи от тези тестове са ми останали няколко класове, които реших да споделя.

APC Cache Class:

<?php
 
/**
 * Alternative PHP Cache Class
 * 
 * @param 	      int $lifetime
 * @author 	      Venelin Kochev < vkwebdev@gmail.com >
 * @version 	      1.0
 * @link 		http://cyberroot.org
 * @copyright 	     2008 Venelin Kochev
 *
 */
 
class APCCache{
 
	//Cache life time
	//@param: integer
	private $lifetime = 3600;
 
	function __construct($lifetime = ''){
 
	   if (!extension_loaded('apc')) {
             die('<b>Fatal Error:</b> Cache::__construct() - The apc extension must be loaded for using Cache !');
	   }
 
           if(isset($lifetime)) $this->lifetime = $lifetime;
 
	}
 
    /**
     * Save cache data.
     *
     * @param array $data
     * @param string $id
     * @return boolean
     */	
    public function save($data, $id){
 
        $result = apc_store($id, array($data, time()), $this->lifetime);
 
        return $result;
    }
 
    /**
     * Load cache by Key
     *
     * @param string $id
     * @return array
     * 
     */
    public function load($id){
 
        $tmp = apc_fetch($id);
        if (is_array($tmp)) {
            return $tmp[0];
        }
        return false;
    }
 
    /**
     * Delete cache by Key.
     *
     * @param string $id
     * @return boolean
     */
    public function remove($id){
 
        return apc_delete($id);
    }
}
 
?>

Използва се по следния начин:

<?php
 
$lifetime = 3500;
 
$cache = new APCCahce($lifetime);
 
if(!$count = $cache->load('count_category')){
   $count = GetCount(); // трябва да връща резултата от MySQL query-то.
   $cache->save($count, 'count_category')
}
 
?>

Така се прави проверка дали кеш-а съществува, ако го няма се създава, при следващото извикване заявката няма да се изпълни и ще бъде зареден кеш-а. ;)

Categories: MySQL, PHP Tags: ,