Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скорость при работе с MySQL 5, критичный параметр 
:(
    Опции темы
Vidocq
Дата 19.10.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



Какие либы следует использовать для оптимизации скорости работы с БД? Сейчас в проекте используется стандартная ext/mysql. Но так как нагрузка на серверы БД очень высока (около 44 запросов в секунду ), хотелось бы по возможности как-то оптимизировать. 
Первая мысль была - использовать ext/mysqli. Я провел несколько тестов на скорость.

ТЕСТ НА СКОРОСТЬ ВЫБОРКИ С 1 ПАРАМЕТРОМ

EXT/MYSQL
Код

$start = time();

$r_general=db_connect(get_db_name());

for($i=0;$i < 30000; $i++) 
{

$s_query = "SELECT *
                        FROM
                                soft_update
                        WHERE
                                version > '".$i."' AND
                                enabled = 1
                        ORDER BY date_added DESC LIMIT 1";

$r_result_1 = db_query_mysqli($r_general, $s_query);
}
$end = time();
echo $start;
echo '<br>';
echo $end;



EXT/MYSQLI
Код

$mysqli = new mysqli("localhost", "root", "", "db_contalb");

$start = time();

$s_query = "SELECT *
                        FROM
                                soft_update
                        WHERE
                                version > ? AND
                                enabled = 1
                        ORDER BY date_added DESC LIMIT 1";


$stmt = $mysqli->prepare($s_query);

for($i=0;$i < 30000; $i++) 
{
    //bind parameters for markers
    $stmt->bind_param("s", $i);
    
    //execute query
    $stmt->execute();
}
$end = time();

echo $start;
echo '<br>';
echo $end;



ТЕСТ №2. FETCHING RESULTS
EXT/MYSQL
Код

$start = microtime();
$r_users=db_connect('db_contalb_users_001');

for($i_userID=1;$i_userID < 30000; $i_userID++) 
{
   
    $s_query = "
        SELECT
            id,
            affiliate_id,
            country,
            version,
            DATE_FORMAT(date_added,'%Y-%m-%d') as date_added,
            UNIX_TIMESTAMP(date_added) as unix_date_added
        FROM
            user
        WHERE
            id = " . $i_userID;
    
        $r_result = db_query($r_users,$s_query);
    
        $h_user = mysql_fetch_assoc($r_result);
}
$end = microtime();

echo $start;
echo '<br>';
echo $end;
echo '<br>';



EXT/MYSQLI

Код

$start = microtime();
echo '<br>';
echo $start;

$mysqli = new mysqli("localhost", "root", "", "db_contalb_users_001");
for($i_userID=1; $i_userID < 3001; $i_userID++) 
{
    $s_query = "
            SELECT
                id,
                affiliate_id,
                country,
                version,
                DATE_FORMAT(date_added,'%Y-%m-%d') as date_added,
                UNIX_TIMESTAMP(date_added) as unix_date_added
            FROM
                user
            WHERE
                id = ?";


    $stmt = $mysqli->prepare($s_query);

    //bind parameters for markers
    $stmt->bind_param("i", $i_userID);
    
    //execute query
    $stmt->execute();
    
    $stmt->bind_result($id, $aff_id, $country, $version, $date_added, $unix_date_added);

    // fetch value
    $stmt->fetch();
}

$end = microtime();
echo '<br>';
echo $end;




В обоих случаях ext/mysqli был быстрее. В первом случае чуть более чем на 1 секунду, во втором - на 3 секунды.

Насколько такие тесты объективны? Какие ещё библиотеки можно использовать для повышения производетельности/скорости?
Заранее благодарен

P.S. В случае ext/mysql используются custom функции из проекта. Поэтому переделывать, а взял "as is"

Это сообщение отредактировал(а) Vidocq - 19.10.2007, 11:21


--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
Ignat
Дата 21.10.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 21
Всего: 73



Цитата(Vidocq @  19.10.2007,  11:13 Найти цитируемый пост)
В обоих случаях ext/mysqli был быстрее. В первом случае чуть более чем на 1 секунду, во втором - на 3 секунды.

Сильно сомневаюсь. Скорее всего свою роль сыграл кэш запросов. Ощутимой разницы быть не должно.
Если так уж необходим тест, то замеры выполняйте на двух серверах.


--------------------
Теперь при чем :P
PM   Вверх
Vidocq
Дата 22.10.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



Ignat,  а может просто выключить кеширование? К тому же, если я понял правильно,  то кешироваться могут только запросы с неизменным текстом. Запросы же с переменными параметрами (как в моем случае) попадать в кеш не могут


--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1156 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.