Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2023, 22:50   #1
rownong
Форумчанин
 
Регистрация: 06.11.2012
Сообщений: 105
По умолчанию Как ускорить выполнения PHP скриптов на VPS сервере?

Здравствуйте.
Есть несколько PHP скриптов на сервере. Обслуживают базу на 300 тыс. товаров (MySQL).
Некоторые скрипты выполняются очень долго (по несколько часов), например где запросы к нескольким таблицам и вычисления (выполнение php функций).

1. Подскажите какие есть пути решения проблемы?

2. Рассматриваю смену тарифа VPS для увеличения производительности.
CPU, 2x3.3ГГц => 4x3.3ГГц
RAM, 4Гб => 8Гб
NVMe, 50Гб => 80Гб
* Расположение сервера - Россия Санкт-Петербург.
* Канал, 200Мбит/с.

2.1. Как думаете смена тарифа ускорит выполнение скриптов?

2.2. На разных тарифах разное количество ядер процессора.
Я слышал некоторые программы не умеют использоваться несколько ядер для выполнения задача.
Как с этим обстоит у сервера mysql, Apache HTTP Server, php скриптов? Им помогает увеличение количество ядер на vps или выделенном серваке?

2.3. Если несколько скриптов работают, они работают на 1 ядре или Apache HTTP Server распределяет нагрузку по ядрам?

2.4. Если несколько скриптов работают они все дергаю БД MySQL. Какой параметр надо на серваке увеличивать чтобы они могли одновременно дергать без снижения производительности?
rownong вне форума Ответить с цитированием
Старый 13.12.2023, 07:51   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

Если тормозит работа с БД - то первым делом нужно произвести анализ структуры БД,
добавить где нужно индексы, если у вас есть выполнение SQL запросов в цикле - постараться избавится от этого... пусть все вычисления делает сам SQL

Изменение тарифа конечно ускорит процесс, но не решит изначальную проблему.
Для работы БД - процы особо не нужны .... тут оператива в основном играет роль
ADSoft вне форума Ответить с цитированием
Старый 13.12.2023, 11:05   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Вопросы к разработчикам, что там такое в коде, что оно по несколько часов выполняет запросы. Надо оптимизировать код в первую очередь. Смена тарифа в лучшем случае может дать, скажем, двухкратный прирост. Оптимизация алгоритмов может дать и 100-кратный прирост, что и тариф менять не придется, или придется, но на более дешевый
Arigato на форуме Ответить с цитированием
Старый 13.12.2023, 13:13   #4
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Я, вот, обнаружил, например, что в используемом мной движке горе-разработчики вшивают параметры в текст SQL-запроса, в результате чего кэш планов запросов на уровне СУБД не работает. Зато они нагородили файловый кэш наиболее общих запросов. Как понимаю, потому что «БД медленно работает».

Запросы здорового человека — со связываемыми параметрами. Как понимаю, для этого надо использовать PDO. Пока у меня работает и так, но со временем придется переписывать, однозначно.
Vapaamies на форуме Ответить с цитированием
Старый 13.12.2023, 17:40   #5
Liris
Пользователь
 
Регистрация: 09.05.2012
Сообщений: 20
По умолчанию

Цитата:
Сообщение от rownong Посмотреть сообщение
Некоторые скрипты выполняются очень долго (по несколько часов), например где запросы к нескольким таблицам и вычисления (выполнение php функций).
Это очень долго. Скорее всего есть проблемы.

В первую очередь вам нужно определить узкие места. Какие конкретно операции требуют такую длительную обработку.

В PHP-скриптах можно измерить время выполнения

Код:
$start = microtime( true );

// Операции, время которых нужно измерить

$end = microtime( true );

// Время выполнения операций в секундах
$executionTime = $end - $start;
Запросы можно анализировать при помощи EXPLAIN.
Liris вне форума Ответить с цитированием
Старый 13.12.2023, 21:30   #6
Liris
Пользователь
 
Регистрация: 09.05.2012
Сообщений: 20
По умолчанию

Мне встречался такой пример. Обычный ежегодный отчет о доходах/расходах. Скрипт получал информацию о всех финансовых операциях (довольно большая таблица с несколькими миллионами записей), затем по каждому контрагенту суммировал все операции, получая сальдо. Оно и нужно было в отчете. Вообще там была не совсем простая сумма, а с доп.условиями, и поэтому обработку вынесли в PHP, а не делали прямо в SQL-запросе.

Мы столкнулись с проблемой, что с ростом количества данных скрипт стал умирать по таймауту (не укладывался в выделенные 60 секунд на генерацию отчета). Стали анализировать - долго шла обработка данных.

Мы начали с малого. В скрипте была неудачно сделана выборка данных. Был цикл, в цикле для каждого контрагента делался запрос в БД. То есть скрипт для каждого контрагента бегал в БД за информацией, неся накладные расходы. Мы переписали только лишь этот код - один раз сходить в БД, выбрать данные по всем контрагентам, и дальше обрабатывать в цикле уже их.

Лишь один этот простой прием сократил время выполнения скрипта со ~120 до ~10 секунд на той же самой выборке. Конечно, были и другие оптимизации, но это уже совсем другая история.

Я предлагаю начать с малого, и сначала провести "дешевые" оптимизации. И если они не помогут, тогда уже будете подключать кеширование, накидывать индексы, перерабатывать запросы, докупать ресурсы и т.д.
Liris вне форума Ответить с цитированием
Старый 13.12.2023, 22:20   #7
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Я думаю вам нужно делать полный аудит кода и запросов в БД, настроить сервер(php,mysql,apache), вместо апача я бы вам посоветывал использование nginx.
uberchel вне форума Ответить с цитированием
Старый 15.12.2023, 12:04   #8
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Я вообще удивляюсь, почему до сих пор используют Apache. Ради mod_php, который грузится как библиотека внутри Apache, а не как программа — заново при каждом обращении к скрипту? Так это тоже решается, разве нет?

У меня работает связка Lighttpd + PHP как FastCGI (правда, под Виндой)...
Vapaamies на форуме Ответить с цитированием
Старый 15.12.2023, 13:06   #9
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
Я вообще удивляюсь, почему до сих пор используют Apache.
А при чем тут это? Смена сервера не улучшит ситуацию ТС ровным счетом никак...
Arigato на форуме Ответить с цитированием
Старый 18.12.2023, 12:38   #10
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
А при чем тут это?
Тоже пожаловаться решил.
Vapaamies на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не сохраняются результаты выполнения функций после завершения выполнения метода. rita616 ASP.NET 1 02.12.2022 14:58
ChromeDriver Selenium, ожидание выполнения скриптов OmegaBerkut Общие вопросы .NET 7 17.06.2018 18:55
TIdHTTP ждет ли выполнения запроса на сервере в таких вариантах Illusiony Компоненты Delphi 0 29.04.2016 18:56
библиотека скриптов с VM с поддержкой шага выполнения Пепел Феникса Общие вопросы по программированию, компьютерный форум 3 01.03.2016 15:39
Получение HTML после выполнения клиентских скриптов veter48 PHP 2 05.12.2013 00:46