Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Разница в работе 3,23,59 и 4,1,18 (Константин) 31/05/2006 - 21:10:12
      Re: Разница в работе 3,23,59 и 4,1,18 (Const) 01/06/2006 - 12:10:42
      Re: Разница в работе 3,23,59 и 4,1,18 (Dinky) 01/06/2006 - 23:50:09



From: Константин - 31/05/2006 - 21:10:12
Subject:Разница в работе 3,23,59 и 4,1,18
-----------------
Приветствую.

Есть ситуация.
Два сервера - разработчиков (FreeBSD 5.4 + Apache 1.33 + PHP4.4 + MySQL 3.23.59, Celeron 900 + 512Mb RAM) и хостинг (Trustix Linux + Apache 2.0 + PHP4.4 + MySQL 4.1.18, Dual Xeon 3.0 HT + 2Gb RAM).

Есть программа на PHP которая делает сложные выборки из базы.
Изначально алгоритм был построен "не особо" оптимально и делал в нескольких циклах около 2000 запросов. На сервере разработчиков эта радость работала около 30 секунд, на хостинге - 7-8 секунд.

Взялся я оптимизмровать алгоритм - успешно снизил количество запросов до 160 - 200. На сервере разработчиков всё стало летать - время выполнения не более 3-х секунд. Каково же было моё изумление, когда я проапдейтил программу на хостинг и увидел, что 200 запросов занимают по времени 16-19 секунд!!!

В результате получается, что на MySQL 3.23 большое количество запросов выполняется медленнее нежели малое (что на мой взгляд вполне разумно), а на MySQL 4.1 с точностью наоборот!!!

Провёл я тогда один тест - взял такой сервер: Celeron 2000 + 512RAM, на нём - FreeBSD 5.4 + Apache 1.33 + PHP4 + MySQL 4.1.18 и выполнил свои запросы (скопировав базу с хостинга) на нём. Результат оказался такой: количество запросов не изменилось (а с чего бы ему меняться-то), а время выполнения составило 36-40 секунд, т.о. тенденция сохранилась.

Из чего делается вывод, что мои выборки оказались оптимизированы под MySQL 3.23.

Вот вкратце алгоритм: первым запросом делается выборка из 4-х таблиц (LEFT join), причём одна из них подключается 4 раза LEFT join `table` as tb1, LEFT join `table` as tb2 и т.д.
Этот запрос возвращаяет около 300 записей.

Далее делается проход по каждой из возвращённых записей и, в зависимости от данных делается, либо нет, ещё один запрос по звум талицам с объединением их через where: select * from `t1`, `t2` where `t1`.`id` = `t2`.`sub_id`.

Итого сумма запросов составляет около 200.
С помощью phpmyadmin выяснил, что первый запрос (походу самый сложный) выполняется 0,2 секунды, а все осталльные 16 секунд на внешнем хостинге (на сервере разработчиков соответственно 0,3 и 2,5 секунды).

Такая вот петрушка...
Кто нить может подсказать, в каком направлении вести исследования, для повышения быстродействия???


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
28381



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |