О проблемах с большой базой данных при использовании DLE | Вебмастер DataLife Engine

О проблемах с большой базой данных при использовании DLE

А вот что пишут про движок его создатели: Особенностью DataLife Engine является низкая нагрузка на системные ресурсы, даже при очень большой аудитории сайта нагрузка не сервер будет минимальной, и вы не будете испытывать каких-либо проблем с отображением информации;

Не будем оспаривать это утверждение, т.к оно абсолютно справедливо, но спустя какое-то время администратор сайта сталкивается с тем, что нагрузка на сервер создаваемая движком превышает все установленные хостером лимиты. Сайт переводят на VDS где нагрузка продолжает расти и администратор начинает задумываться о ее причинах.

Если Вы уже перешли на VDS, то набрав команду top в shell Вы будете наблюдать как сразу после перезагрузки сервера, если у сайта хорошая посещаемость, начинает расти количество процессов. Каждый из созданных процессов отъедает свою часть памяти и все заканчивается тем, что гарантированная и уже даже негарантированная память заканчивается, что приводит к падению mysql сервера, т.к он является самым слабым звеном в работающих сервисах и сайт перестает функционировать, пока не будет перезагружен сервер.

Происходит это по двум причинам. Во первых это связано с работай веб-сервера Apache. Он создает процесс на каждую формирующуюся страницу и пока она не будет полностью отдана пользователю, который ее открывает, процесс будет висеть в памяти. Скорость конечных пользователей сайта ограничена и открытие страницы занимает какое-то время. И все это время в памяти сервера будет находиться процесс съедающий приличный объем памяти. А что происходит, когда у Вас на сайте одновременно несколько посетителей открывающие сразу по несколько страниц? Вот Вам и переполнение памяти. Эта проблема решается достаточно просто установкой на сервер ngnix который выступает посредником между посетителем сайта и Apache. Nginx достаточно быстро принимает от Apache сформированные страницы и дальше отдает их посетителю не расходуя при этом особо память.

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

Весь ход проделанной мной работы в этом направлении будет описан ниже. А пока хочу сказать, что бы мы не делали, это не уменьшит нам базу данных, а чем больше база, тем сложней ее обрабатывать. Поэтому хочу порекомендовать при создании сайта на движке DLE создать шаблон так, что бы в полной новости не хранилось краткой, а краткая сама подставлялась при открытии полной. Другими словами ячейка с краткой новостью не должна дублироваться в ячейке с полной новостью в таблице dle_post, в которой хранятся все публикации. Это приведет к меньшему объему БД. А движок при всех обращениях к БД и при выводе списка новостей, и при открытии полной новости всегда извлекает из базы всю строку с новостью которая включает и краткую и полную новости. Я при создании сайта этого не учел, а сейчас уже поздно. В БД уже накопился огромный объем публикаций и перелопатить каждую новость я уже просто не в состоянии, да и журналисты публикующие свои материалы на моем сайте наверняка используют программы в которых прописали способ публикации новости и не сразу обратят внимание на изменение в правилах публикации.

  • Posted on 1. июля 2009
  • Written by admin
Оставить комментарий
 

Еще нет никаких комментариев.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *