Статьи :
Наглядный пример ускорения работы с базой
1 сентября 2012, 21:02 |
Типичная задача: есть каталог товаров в программе 1С. Из этой программы периодически делаются выгрузки на сайт в формате csv. Формат строчек файла простой: код 1С;цена1;цена2;количество Соответственно, скрипт PHP парсит этот файл, находит товары с соответствующим кодом и обновляет у них цены и количество. Вроде все просто, но на больших импортах начинаются проблемы: скрипт долго и натужно думает (и может даже вылететь по таймауту). Команда top показывает, что основная нагрузка в это время идет на MySQL. То есть основная причина в базе, а не в PHP или чем-то еще. Клиентом поставлена задача найти источник проблемы. Для решения внимательно смотрим на ту таблицу, куда идет импорт, и замечаем, что, оказывается, для поля с кодами 1С не сгенерированы ключи! Другими словами, на каждый новый запрос MySQL вынужден заново перелопачивать всю таблицу, чтобы найти одну-единственную строчку. Вот отсюда и была большая нагрузка. Для решения проблемы оказалось достаточно создать индекс по кодам 1С. В результате время выполнения скрипта: было – 107 сек. стало – 4 сек.
Чтобы получить консультацию по вопросу ускорения работы с базой на вашем сайте – пожалуйста, свяжитесь с нами через форму обратной связи.
|