|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.12.2023, 22:50 | #1 |
Форумчанин
Регистрация: 06.11.2012
Сообщений: 119
|
Как ускорить выполнения 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. Какой параметр надо на серваке увеличивать чтобы они могли одновременно дергать без снижения производительности? |
13.12.2023, 07:51 | #2 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,179
|
Если тормозит работа с БД - то первым делом нужно произвести анализ структуры БД,
добавить где нужно индексы, если у вас есть выполнение SQL запросов в цикле - постараться избавится от этого... пусть все вычисления делает сам SQL Изменение тарифа конечно ускорит процесс, но не решит изначальную проблему. Для работы БД - процы особо не нужны .... тут оператива в основном играет роль |
13.12.2023, 11:05 | #3 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,651
|
Вопросы к разработчикам, что там такое в коде, что оно по несколько часов выполняет запросы. Надо оптимизировать код в первую очередь. Смена тарифа в лучшем случае может дать, скажем, двухкратный прирост. Оптимизация алгоритмов может дать и 100-кратный прирост, что и тариф менять не придется, или придется, но на более дешевый
E-Mail: arigato.freelance@gmail.com
|
13.12.2023, 13:13 | #4 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,834
|
Я, вот, обнаружил, например, что в используемом мной движке горе-разработчики вшивают параметры в текст SQL-запроса, в результате чего кэш планов запросов на уровне СУБД не работает. Зато они нагородили файловый кэш наиболее общих запросов. Как понимаю, потому что «БД медленно работает».
Запросы здорового человека — со связываемыми параметрами. Как понимаю, для этого надо использовать PDO. Пока у меня работает и так, но со временем придется переписывать, однозначно. |
13.12.2023, 17:40 | #5 | |
Пользователь
Регистрация: 09.05.2012
Сообщений: 21
|
Цитата:
В первую очередь вам нужно определить узкие места. Какие конкретно операции требуют такую длительную обработку. В PHP-скриптах можно измерить время выполнения Код:
|
|
13.12.2023, 21:30 | #6 |
Пользователь
Регистрация: 09.05.2012
Сообщений: 21
|
Мне встречался такой пример. Обычный ежегодный отчет о доходах/расходах. Скрипт получал информацию о всех финансовых операциях (довольно большая таблица с несколькими миллионами записей), затем по каждому контрагенту суммировал все операции, получая сальдо. Оно и нужно было в отчете. Вообще там была не совсем простая сумма, а с доп.условиями, и поэтому обработку вынесли в PHP, а не делали прямо в SQL-запросе.
Мы столкнулись с проблемой, что с ростом количества данных скрипт стал умирать по таймауту (не укладывался в выделенные 60 секунд на генерацию отчета). Стали анализировать - долго шла обработка данных. Мы начали с малого. В скрипте была неудачно сделана выборка данных. Был цикл, в цикле для каждого контрагента делался запрос в БД. То есть скрипт для каждого контрагента бегал в БД за информацией, неся накладные расходы. Мы переписали только лишь этот код - один раз сходить в БД, выбрать данные по всем контрагентам, и дальше обрабатывать в цикле уже их. Лишь один этот простой прием сократил время выполнения скрипта со ~120 до ~10 секунд на той же самой выборке. Конечно, были и другие оптимизации, но это уже совсем другая история. Я предлагаю начать с малого, и сначала провести "дешевые" оптимизации. И если они не помогут, тогда уже будете подключать кеширование, накидывать индексы, перерабатывать запросы, докупать ресурсы и т.д. |
13.12.2023, 22:20 | #7 |
Участник клуба
Регистрация: 19.01.2009
Сообщений: 1,457
|
Я думаю вам нужно делать полный аудит кода и запросов в БД, настроить сервер(php,mysql,apache), вместо апача я бы вам посоветывал использование nginx.
|
15.12.2023, 12:04 | #8 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,834
|
Я вообще удивляюсь, почему до сих пор используют Apache. Ради mod_php, который грузится как библиотека внутри Apache, а не как программа — заново при каждом обращении к скрипту? Так это тоже решается, разве нет?
У меня работает связка Lighttpd + PHP как FastCGI (правда, под Виндой)... |
15.12.2023, 13:06 | #9 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,651
|
А при чем тут это? Смена сервера не улучшит ситуацию ТС ровным счетом никак...
E-Mail: arigato.freelance@gmail.com
|
18.12.2023, 12:38 | #10 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,834
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не сохраняются результаты выполнения функций после завершения выполнения метода. | 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 |