«Выбрать количество (идентификатор) из таблицы» для расчета в SQL Azure занимает до 30 минут
У меня есть база данных в SQL Azure, которая не занимает от 15 до 30 минут, чтобы сделать простое:
select count(id) from mytable
База данных составляет около 3,3 ГБ, а счетчик возвращает около 2 000 000, но я попробовал это локально, и это занимает менее 5 секунд!
Я также запустил:
ALTER INDEX ALL ON mytable REBUILD
На все таблицы в базе данных.
Был бы признателен, если бы кто-нибудь мог указать мне на некоторые вещи, чтобы попытаться диагностировать / исправить это.
(Пожалуйста, перейдите к ОБНОВЛЕНИЮ 3 ниже, так как я теперь думаю, что это проблема, но я все еще не понимаю ее).
ОБНОВЛЕНИЕ 1: Похоже, что на изображении ниже показано 99% времени сканирования кластерного индекса. я имею
ОБНОВЛЕНИЕ 2: И это то, что сообщения статистики возвращаются, когда я делаю:
SET STATISTICS IO ON
SET STATISTICS TIME ON
select count(id) from TABLE
Статистика:
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 317037 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
(1 row(s) affected)
Table 'TABLE'. Scan count 1, logical reads 279492, physical reads 8220, read-ahead reads 256018, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
(1 row(s) affected)
SQL Server Execution Times:
CPU time = 297 ms, elapsed time = 438004 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
ОБНОВЛЕНИЕ 3: хорошо - у меня есть другая теория теперь. Портал Azure предлагает каждый раз, когда я тестирую этот простой запрос, доводит мой процент DTU до почти 100%. Я использую экземпляр SQL Azure Standard с уровнем производительности S1 (20 DTU). Возможно ли, что этот простой запрос замедляется моим пределом DTU?