Почему этот запрос замедляет так сильно со временемPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Почему этот запрос замедляет так сильно со временем

Сообщение Anonymous »

Я тестирую с очень простой очередью базы данных, чтобы увидеть, как быстро я могу его обработать. На данный момент, даже не делая ничего другого, тогда просто извлекая его из очереди. Столбцы, используемые в пункте «Где», проиндексированы, а порядок - на первичном ключе. Таблица очередей была заполнена миллионом записей и статусом 0. Каждое последующее выполнение без сброса очереди сделает его медленнее и медленнее со временем. Если я вручную обновляю 500000 строк до статуса 1 и запускаю сценарий, это займет всего около 50 за 10 секунд. Вручную сбросить все строки в статус 0 снова увеличит скорость. < /P>
Я понятия не имею, что я мог бы сделать, чтобы оптимизировать это в качестве индексов, аппаратное обеспечение достаточно, а запрос примерно настолько просты. 24.04 для простого скрипта PHP работает на двух отдельных виртуальных машинах на Proxmox с 32 ядрами и 32 ГБ ОЗУ, предоставленной на каждый сервер. Ни один сервер каждый не превышает 10% ЦП или 25% ОЗУ. Физический сервер имеет 256 ГБ ОЗУ, 96 x AMD EPYC 9454P 48-ядерный процессор (1 розетка) и диски NVME SSD. Сеть между ними составляет около 12 гбит/с в соответствии с iPerf3.

База данных:

Код: Выделить всё

TABLE [dbo].[testqueue]
[id] [bigint] IDENTITY(1,1) NOT NULL,
[guid] [uniqueidentifier] NOT NULL,
[created] [datetime] NOT NULL,
[notbefore] [datetime] NOT NULL,
[status] [tinyint] NOT NULL,
[task] [nvarchar](255) NOT NULL,
[data] [nvarchar](max) NULL,
[completed] [datetime] NULL,

CREATE INDEX [ix_guid] ON [dbo].[testqueue] ([guid])
CREATE INDEX [ix_selector] ON [dbo].[testqueue] ([status],[notbefore])
< /code>
php script: < /p>
$connection = new \PDO('sqlsrv:Server='.$server.';Database='.$db.';', $user, $pass);
$connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

$time  = time();

$count = 0;
$query = '
WITH CTE AS (
SELECT TOP 1 *
FROM [dbo].[testqueue]
WHERE [status]=0
AND [notbefore]

Подробнее здесь: [url]https://stackoverflow.com/questions/79775969/why-does-this-query-slow-down-this-much-over-time[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»