Если вам нравится SbUP Форум, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....

 

Нагрузка на MySQL - результат массовой рaссылки писем?

Автор ProT, 09-10-2012, 14:54:57

« назад - далее »

ProTTopic starter

Всем привет) У меня такая проблема...Есть сайт - интернет-магазин:
1. Последнее время стало периодически приходить письмо от хостера о превышении допустимой нагрузки на MySQL
2. Так же не так давно CMS сайта начала выдавать ошибку при массовой рaссылке писем "Невозможно определить функцию отправки почты"
3. Массовая рaссылка происходит методом PHP mail function
4. Я, естественно, посчитал, что эти два факта связаны между собой. Построил для сравнения график нагрузки на MySQL и график массовой рaссылки - графики почти-что совпадают по датам!Сделал вывод,что причина именно в рaссылке.
5. Задал вопрос хостеру,выяснилось, что они поддерживают максимум 1000 писем при единовременной отправке методом PHP mail function, а у нас уже более 1800 пользователей, которым идет рaссылка.
6. Так же хостер пояснил,что проблема может быть в не правильно оптимизированном запросе к БД при массовой рaссылке...
7. Как же оптимизировать этот запрос? Как я понимаю что-то в файле phpmailer.php менять? Но вот что именно?
«Когда Вселенная расширится, все в ней встанет на свои прежние места!» (с)
  •  


Greenex Studio

Закажите дешовый VPS да и проблем с ограничениями не будет)
  •  


parmactep

вам поможет отправка через smtp
phpmailer поддерживает такую возможность...
http://blog.brainf.net/php/klass-phpmailer-pishite-pisma/
  •  

remind4me

#3
Цитата: ProT от 09-10-2012, 14:54:57Как же оптимизировать этот запрос? Как я понимаю что-то в файле phpmailer.php менять? Но вот что именно?
Я думаю, что не запрос к БД нужно оптимизировать, а скрипт активирующий е-мэйл рaссылку, а phpmailer.php вообще не желательно трогать.
Конкретнее - нужно разбить процесс отправки писем на порции, т.е. чтобы рaссылка отправлялась не за один присест, а небольшими порциями, например по 100-200 писем за раз, с относительно небольшими временными интервалами между отправками очередных пачек писем.

parmactep

remind4me, на таком количестве можно пачкой отправлять... но дело в том что mail() грузит процессор... а при таком количестве запросов в цикле - грузит его на долго... тоесть должно быть либо распараллеливание запросов, либо slip() между запросами....
  •  


remind4me

parmactep, так я собственно об этом и писал, просто нужно не зацикливать с паузами, а запускать скрипт управления для каждой "пачки" писем заново (завершив предыдущий конечно же), чтобы не висел процесс постоянно, и перед запуском очередной пачки отправки писем делать небольшую паузу.

parmactep

remind4me, так я как раз о том что можно зациклить с паузами в данном случае.....
  •  

jefffspb

А как почта прoстите с базой данных связана ?
проблема с почтой это отдельная история а с базой отдельная.

по поводу впс - что-то я сомневаюсь, что пользователь вирт хостинга так легко перепрыгнет на впс и установит, настроит оттюнит там все необходимое по. из коробки оно как правило рабоать будет ещё хуже чем вирт хостинг.

по поводу тормозов базы - проанализируйте что у вас там большое есть, запросите у хостера файл slow_log от mysql.и оптимизируйте =)



Если вам нравится SbUP Форум, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....