sql - SQL Azure 上的查询性能极差

标签 sql sql-server azure

我们有 S1:20 DTU 250GB SQL Azure 数据库,如下表

CREATE TABLE [dbo].[Reads]
(
    [ReadId] [INT] IDENTITY(1,1) NOT NULL,
    [LicenseNumber] [VARCHAR](50) NULL,
    [Name] [VARCHAR](50) NULL,
    [Serial] [VARCHAR](20) NULL,
    [FirstSeenUtc] [DATETIME] NULL,
    [LastSeenUtc] [DATETIME] NULL,
    [Count] [INT] NOT NULL,
    [Model] [VARCHAR](100) NULL,
    [Make] [VARCHAR](100) NULL,
    [TimestampUtc] [DATETIME] NOT NULL,
    [PortNumber] [INT] NOT NULL,
    [Code] [VARCHAR](50) NULL,
    [Peak] [FLOAT] NULL,

    CONSTRAINT [PK_Reads] 
        PRIMARY KEY CLUSTERED ([ReadId] ASC)
                WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

该表有超过 8000 万行,简单查询为

select count(1) from dbo.Reads

运行时间为 1 小时 30 分钟。数据库上的负载极小,进程每分钟可能添加大约 1000 行。目前没有从该表中读取任何内容,总体而言数据库上几乎没有负载。

DTU Usage

Data IO

我将数据库升级到 S2: 50 DTU,上面的查询运行了 18 分钟。

我更新了统计数据,但没有多大帮助。当上面的查询运行时,我运行了 Brent Ozar 的 BlitzFirst 存储过程,它说数据库正在最大化数据 IO。在我的 Surface 笔记本电脑上恢复的同一数据库会在一秒钟内返回行数。数据库性能选项卡没有任何建议。

S2:50 DTU 每月费用 75 美元,下一个选项是 S3:100 DTU 每月 150 美元。

我的计划是为我注册的每个客户创建一个数据库,但每个数据库每月 150 美元,我很快就会倒闭!

这是 SQL Azure 的预期性能水平吗?这种基本查询不应该产生即时结果吗?迁移到 VM 上的 SQL Server 会更好吗?

[美国东部时间 2019 年 3 月 10 日上午 11:35 更新]

该表确实有以下 IX

CREATE NONCLUSTERED INDEX [IX_Read_License_Code_TimeStamp] ON [dbo].[Reads]
(
    [LicenseNumber] ASC,
    [Code] ASC,
    [TimestampUtc] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]

我现在发现一些列可以安全地更改为 NOT NULL,并且可以帮助改善情况。

[更新:美国东部时间 2019 年 3 月 10 日晚上 8:40]

我修改了表,使 LicenseNumber 和 Code NOT NULL,这花了 6 个多小时。此后,计数查询运行了 1 分 32 秒。

以下查询在 40 秒内返回结果

select Code, LicenseNumber, TimeStampUtc from dbo.Reads Where TimestampUtc >= '2019-03-10'

最佳答案

删除索引并再次创建它对我来说是这样。在此之前,即使是索引完全覆盖的查询也需要几分钟的时间才能执行。重新创建索引后,相同的查询运行时间不到一秒。

感谢所有对此问题发表评论的人。我学到了新东西。

关于sql - SQL Azure 上的查询性能极差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55084500/

相关文章:

sql-server - SSRS 2008 - 如何向矩阵添加小计

sql-server - SQL Server 2012 中带有空值的移动平均值

Azure 自动化 RunAs 帐户对 Active Directory 资源的访问权限

caching - 更新我的 Windows Azure 存储上的图片(刷新)

sql - 如何在 SELECT 查询中将数组的第一个元素附加到自身

mysql - 使用另一个表数据更新表行

mysql - 如何从 SSIS 包将 MySQL 模式设置为 'ANSI'

mysql - 查找 MySQL/MariaDB 中项目的排名和总数

sql - 如何检查哪个函数使用类型?

Azure 函数 - 报告失败