Я тестирую с очень простой очередью базы данных, чтобы увидеть, как быстро я могу его обработать. На данный момент, даже не делая ничего другого, тогда просто извлекая его из очереди. Столбцы, используемые в пункте «Где», проиндексированы, а порядок - на первичном ключе. Таблица очередей была заполнена миллионом записей и статусом 0. Каждое последующее выполнение без сброса очереди сделает его медленнее и медленнее со временем. Если я вручную обновляю 500000 строк до статуса 1 и запускаю сценарий, это займет всего около 50 за 10 секунд. Вручную сбросить все строки в статус 0 снова увеличит скорость. 32 ядра и 32 ГБ ОЗУ, предоставленные для каждого сервера. Ни один сервер каждый не превышает 10% ЦП или 25% ОЗУ. Физический сервер имеет 256 ГБ ОЗУ, 96 x AMD EPYC 9454P 48-ядерный процессор (1 розетка) и диски NVME SSD. Сеть между ними составляет около 12 гбит/сек в соответствии с iperf3.
Определение моей таблицы:
Я тестирую с очень простой очередью базы данных, чтобы увидеть, как быстро я могу его обработать. На данный момент, даже не делая ничего другого, тогда просто извлекая его из очереди. Столбцы, используемые в пункте «Где», проиндексированы, а порядок - на первичном ключе. Таблица очередей была заполнена миллионом записей и статусом 0. Каждое последующее выполнение без сброса очереди сделает его медленнее и медленнее со временем. Если я вручную обновляю 500000 строк до статуса 1 и запускаю сценарий, это займет всего около 50 за 10 секунд. Вручную сбросить все строки в статус 0 снова увеличит скорость. 32 ядра и 32 ГБ ОЗУ, предоставленные для каждого сервера. Ни один сервер каждый не превышает 10% ЦП или 25% ОЗУ. Физический сервер имеет 256 ГБ ОЗУ, 96 x AMD EPYC 9454P 48-ядерный процессор (1 розетка) и диски NVME SSD. Сеть между ними составляет около 12 гбит/сек в соответствии с iperf3. Определение моей таблицы: [code]CREATE 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, CONSTRAINT [PK_testqueue] PRIMARY KEY CLUSTERED ([id] ASC) ) CREATE INDEX [ix_guid] ON [dbo].[testqueue] ([guid]) CREATE INDEX [ix_selector] ON [dbo].[testqueue] ([status],[notbefore]) < /code> И это мой скрипт PHP: < /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]