Может ли ошибка нехватки памяти быть вызвана размером базы данных?

У меня есть веб-приложение, написанное на PHP с базой данных MySQL. Это оптимизированная и эффективная структура. Он существует уже более 5 лет, каждый день пользователи регистрируются и/или вносят свой вклад в расширение единой базы данных, которая всегда больше.

Что происходит уже около 15 дней, так это то, что 1 или 2 раза в день возникает ошибка

PHP Fatal error: Out of memory (allocated X (tried to allocated Y bytes)

У меня есть виртуальный хостинг, для memory_limit установлено значение 512 МБ. База, скачанная через бэкап (.sql), весит около 750Мб, но на диске места больше 1Гб.

Может размер базы влияет? Или это потому, что так много запросов, которые создают критические условия для сервера?

У вас есть какие-нибудь предложения для меня?

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

CD001 22.01.2019 17:16

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

aynber 22.01.2019 17:16

Эта ошибка (напрямую) не связана с размером вашего база данных. Это говорит о том, что во время работы вашего PHP, вы создали переменные, которые занимают между собой более 512 МБ. Например, while(true) { $a[] = 'hello'; } теоретически может создать столько копий hello в памяти, что вы получите эту ошибку без какой-либо базы данных. Таким образом, этот вопрос не имеет ответа с предоставленной информацией.

IMSoP 22.01.2019 17:20

Это сообщение об ошибке должно содержать номер строки. Есть ли какая-либо конкретная причина, по которой вы почувствовали необходимость опустить номер строки и решили не указывать код, который находится под этим номером строки.

MonkeyZeus 22.01.2019 17:22

@MonkeyZeus Справедливости ради следует отметить, что в случае ошибок нехватки памяти вопрос удачи показывает ли номер строки вам что-нибудь полезное. Если вы выделите 511,999 МБ в одной функции, а затем попытаетесь выделить несколько байт в другом месте, ошибка ничего не скажет вам о том, куда делись 511,999 МБ.

IMSoP 22.01.2019 17:27

Я работал постоянно 5 лет, уделяя внимание улучшению запросов MySQL. В начале, когда база данных была небольшой, мне не приходилось сталкиваться с проблемами производительности. Потом, запрос за запросом, анализ за анализом, я многое понял и применил: поэтому всегда сокращал объемы извлекаемых данных, различные cron-сервисы, которые регулярно генерируют какие-то кэш-файлы, чтобы избежать очень сложных и частых запросов. Тем не менее, есть один тип запроса, который, я думаю, мне нужно лучше проверить и понять, может ли этот тип запроса быть проблемой.

bebe03 22.01.2019 17:43

Судя по всему на моем пк нет проблем запустить приложение с memory_limit=128 Мб, я мог бы и с меньшими лимитами попробовать. Итак, я хотел бы знать, учитывает ли memory_limit одиночный запрос или он является кумулятивным, и поэтому многие подключенные пользователи способствуют достижению 512 МБ? Честно не знаю.

bebe03 22.01.2019 21:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
318
1

Ответы 1

После нескольких дней замедлений, при которых часто возникали такие ошибки, как

  • Неустранимая ошибка PHP: недостаточно памяти

  • Mysql слишком много подключений

  • Не удается подключиться к локальному серверу MySQL через сокет «/tmp/mysql.sock»

Я связался с техподдержкой и мне сказали что идет DDoS атака

Другие вопросы по теме