Laravel — SQLSTATE [HY001] Не удалось выделить достаточно памяти — MsSQL

Я делаю второе подключение моего проекта в laravel с представлением в базе данных MsSql, я правильно настроил свой .env и конфигурацию, однако это ошибка переполнения памяти:

$ php artisan tinker
Psy Shell v0.10.5 (PHP 7.3.24-3+ubuntu18.04.1+deb.sury.org+1 — cli) by Justin Hileman
>>> use App\Condinvest\BoletoPropCondominio as BPC
>>> BPC::first();
Illuminate\Database\QueryException with message 'SQLSTATE[HY001] Unable to allocate sufficient memory (meudominio.com.br:5000) (severity 8) (SQL: select top 1 * from [View_Boleto_Prop_Condominio])'
>>> 

уже изменено в моем php.ini:

memory_limit = 128M

но ошибка продолжается.

Мои модели кратко выглядят так:

BaseView.php

<?php
    
namespace App\Condinvest;

use Illuminate\Database\Eloquent\Model;

class BaseView extends Model
{
    protected $connection = 'condinvest';
}

BoletoPropCondominio.php

<?php

namespace App\Condinvest;

class BoletoPropCondominio extends BaseView
{
    protected $table = 'View_Boleto_Prop_Condominio';

    protected $fillable = [
        'Id_Condo_lan',
        ...
        'Id_titular'
    ];
}

когда я делаю тот же запрос непосредственно через командный терминал:

SELECT TOP 1 * FROM View_Boleto_Prop_Condominio;

успешно возвращает мои данные.

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

РЕДАКТИРОВАТЬ

>>> DB::connection('condinvest')->getConfig()['driver']
=> "sqlsrv"

Насколько вы увеличили memory_limit до?

dazed-and-confused 21.12.2020 20:16

Я поставил memory_limit = -1

Marcius Leandro 21.12.2020 20:22

Когда у меня возникла проблема с памятью, установка значения -1 не решила ее, хотя я этого и ожидал. Затем я попробовал что-то вроде 2G, и ошибка исчезла. Я не пытался использовать пакет, который вы используете, но решил, что по крайней мере поделюсь своим опытом с этой ошибкой месячной давности.

dazed-and-confused 21.12.2020 20:38

Не решить, пробовал перезапустить с помощью "apache2ctl restart" тоже не получилось, есть ли шанс, что ошибка на стороне сервера базы данных?

Marcius Leandro 21.12.2020 21:55

@MarciusLeandro Никогда не устанавливайте ограничение памяти на -1, это означает, что ограничения больше нет. Я думаю, что это не предел памяти php, потому что это вызовет ошибку php, а не ошибку sql. В любом случае, решение должно заключаться не в увеличении лимита памяти, а в уменьшении использования памяти.

Gert B. 28.01.2021 08:34

какая у вас версия mssql?

bhucho 28.01.2021 11:08

@bhucho Я не знаю, база данных от третьего лица, и у меня есть доступ только к маршруту просмотра

Marcius Leandro 28.01.2021 11:28

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

sykez 28.01.2021 19:14

Другие запросы работают?

Olivier 29.01.2021 09:49

напрямую через терминал да, через тинкер нет

Marcius Leandro 03.02.2021 13:59

@MarciusLeandro, похоже, проблема существует либо в конфигурации БД, либо в настройке, если у вас нет проблем с подключением БД mssql из Laravel. На всякий случай проверьте выделенную память в БД. пожалуйста, обратитесь к проверьте память сервера mssql. Если для mssql выделено достаточно памяти, у tinker могут возникнуть проблемы совместимости с mssql.

John 04.02.2021 05:05
Стоит ли изучать 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 и хотите разрабатывать...
2
11
1 909
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Поскольку об ошибке, по-видимому, сообщает процесс базы данных (а не процесс php), я бы не ожидал, что изменения ограничений памяти в php.ini окажут какое-либо влияние.

Я нашел эту проблему, в которой упоминается эта конкретная ошибка при использовании устаревшего драйвера с MSSQL Server. Чтобы проверить, какой драйвер использует Laravel, введите DB::connection()->getConfig()['driver'] в консоль Tinker. Если вы видите sqlsrv, то здесь все в порядке, но если вы видите dblib, то это может быть источником ошибки. Эта проблема предположительно была исправлена ​​ в Laravel 5.7, чтобы предпочесть поддерживаемые драйверы, если доступно более одного, но также возможно, что ваш database.php файл конфигурации использует неправильный.

Также возможно, что ограничения памяти сервера базы данных или системы, в которой он находится, фактически превышены. Возможность запустить запрос в командной строке без получения ошибки предполагает, что это не так, но, возможно, стоит изучить. Если доступной памяти очень мало, возможно, ее недостаточно для одновременного запуска php и запроса к базе данных. Вы можете проверить доступную системную память, выполнив команду free -h в терминале, если процесс базы данных запущен на том же компьютере, что и ваш терминал. Однако, если вы используете провайдера виртуального хостинга, возможно, что база данных находится на отдельной машине.

Я видел в нескольких местах, что это могло быть, но я исправил это на диске, и ошибка все еще сохраняется.

Marcius Leandro 03.02.2021 13:56

@MarciusLeandro, какую версию Laravel вы используете (php artisan --version)? Кроме того, каковы результаты проверки свободной системной памяти и какой драйвер базы данных использовался соединением DB?

Travis Britz 03.02.2021 18:36

Если это поможет, я столкнулся с той же проблемой. Что я сделал, чтобы исправить это, так это проверил мою конфигурацию в database.php, если вы используете sqlserver, убедитесь, что у вас установлена ​​кодировка utf8 следующим образом. Ранее он был установлен на utf8mb4.

'sqlserver' => [
        'driver' => 'sqlsrv',
        'host' => env('DB_SQL_HOST'),
        'port' => env('DB_SQL_PORT'),
        'database' => env('DB_SQL_DATABASE', 'forge'),
        'username' => env('DB_SQL_USERNAME', 'forge'),
        'password' => env('DB_SQL_PASSWORD', ''),
        'charset' => 'utf8',
        'prefix' => '',
        'options' => [
            PDO::ATTR_TIMEOUT => 300
        ]
    ]

Не используйте utf8, он не позволяет в полной мере использовать Unicode.

miken32 27.08.2021 03:26

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