我有一个类似如下的查询:
DELETE FROM tblFEStatsBrowsers WHERE BrowserID NOT IN (
SELECT DISTINCT BrowserID FROM tblFEStatsPaperHits WITH (NOLOCK) WHERE BrowserID IS NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
tblFEStatsBrowsers 有 553 行。
tblFEStatsPaperHits 有 47.974.301 行。
tblFEStatsBrowsers:
CREATE TABLE [dbo].[tblFEStatsBrowsers](
[BrowserID] [smallint] IDENTITY(1,1) NOT NULL,
[Browser] [varchar](50) NOT NULL,
[Name] [varchar](40) NOT NULL,
[Version] [varchar](10) NOT NULL,
CONSTRAINT [PK_tblFEStatsBrowsers] PRIMARY KEY CLUSTERED ([BrowserID] ASC)
)
Run Code Online (Sandbox Code Playgroud)
tblFEStatsPaperHits:
CREATE TABLE [dbo].[tblFEStatsPaperHits](
[PaperID] [int] NOT NULL,
[Created] [smalldatetime] NOT NULL,
[IP] [binary](4) NULL,
[PlatformID] [tinyint] NULL,
[BrowserID] [smallint] NULL, …Run Code Online (Sandbox Code Playgroud) 通常我们每周的完整备份在大约 35 分钟内完成,每日差异备份在大约 5 分钟内完成。从星期二开始,每天的日常工作需要将近 4 个小时才能完成,远远超出了应有的要求。巧合的是,这在我们获得新的 SAN/磁盘配置后立即开始发生。
请注意,服务器正在生产中运行,我们没有整体问题,它运行平稳 - 除了主要表现在备份性能中的 IO 问题。
在备份期间查看 dm_exec_requests,备份一直在等待 ASYNC_IO_COMPLETION。啊哈,所以我们有磁盘争用!
但是,MDF(日志存储在本地磁盘上)和备份驱动器都没有任何活动(IOPS ~= 0 - 我们有足够的内存)。磁盘队列长度 ~= 0 也是如此。CPU 徘徊在 2-3% 左右,也没有问题。
SAN 是 Dell MD3220i,LUN 由 6x10k SAS 驱动器组成。服务器通过两条物理路径连接到 SAN,每条路径都通过一个单独的交换机与 SAN 的冗余连接 - 总共有四个路径,其中两个随时处于活动状态。我可以通过任务管理器验证两个连接是否都处于活动状态 - 完美均匀地分配负载。两个连接都运行 1G 全双工。
我们曾经使用巨型帧,但我已禁用它们以排除此处的任何问题 - 没有变化。我们有另一台服务器(相同的操作系统 + 配置,2008 R2)连接到其他 LUN,它没有显示任何问题。然而,它没有运行 SQL Server,而只是在它们之上共享 CIFS。但是,它的 LUN 首选路径之一与麻烦的 LUN 位于同一 SAN 控制器上 - 所以我也排除了这一点。
尽管存在以下问题,但运行几个 SQLIO 测试(10G 测试文件)似乎表明 IO 是不错的:
sqlio -kR -t8 -o8 -s30 -frandom -b8 -BN -LS -Fparam.txt
IOs/sec: 3582.20 …Run Code Online (Sandbox Code Playgroud)