我正在查看 SQL Server 上的 NUMA 节点上的 PLE(页面预期寿命),并发现了一个相当奇怪的分布。与 001 相比,NUMA 节点 000 的 PLE 非常低。我不确定为什么会这样。我已经检查了我们环境中的多个其他 SQL Server,其他生产服务器没有这种行为。
系统在带有 256GB RAM 的 Dell m620 上运行 SQL Server 2012 Enterprise Edition。这是一台 2 插槽、6 核(支持 HT)的机器。MAXDOP 设置为 6。AFAIK 内存模块均匀地安装在 CPU 的内存条上
有人告诉我 NUMA 节点 000 有其他 SQL 任务要执行,其他节点,但我忘记了我在哪里听到/看到它。



@@Version 显示:Microsoft SQL Server 2012 (SP1) - 11.0.3412.0 (X64)
这是我第一次在 SQL Server 中进行分区,我从 Brent Ozar 指南中学到了非常棒的 :)
有几次我遇到了一个奇怪的场景;当我运行时:
SELECT *
FROM ph.FileGroupDetail
ORDER BY partition_number
Go
Run Code Online (Sandbox Code Playgroud)
有相同的文件组显示两次,其中包含 2 个不同的 partition_number,其中 1 个正确地在末尾带有范围值,另一个在开头时带有空 range_value。

几个问题:
这是怎么回事,我哪里出错了?
我如何解决这个问题,这意味着如何摆脱一开始的问题,因为我一开始就已经有一个空分区。
我试过删除文件(在它为空时工作)和文件组,但文件组说它无法删除。
有人可以解释一下这是如何发生的以及如何摆脱分区 2 条目吗?
在我的开发环境中,我正在处理查询。为此,我需要重置 SQL Server 内存、计划等,这可以确保我的查询是所有值重置的服务器上唯一的压力/工作过程
我正在做的事情很少
我做得对吗?或者我需要更多的东西来清除或查看新的统计数据?
我得到的行比我期望的查询返回的行多。
我相信这与我的 join 语句有关。
有多个表,其中包含不同的信息。 Person保存有关此人的主要信息,但不保存地址、电话或电子邮件。这是因为最初的设计师希望桌子能够容纳多个电话号码、电子邮件和地址。
SELECT (person.FirstName + ' ' + person.LastName) as FullName
,ISNULL(Person.isClient, '')
,ISNULL(Person.UDF1, '')
,ISNULL(Address.City, '')
,ISNULL(Address.state, '')
,PersonAddress.Person
,PersonAddress.Address
,ISNULL(Phone.PhoneNumber, 'N/A')
,Email.Email
,Person.Website
FROM Person
left join PersonAddress on Person.ID = PersonAddress.Person
left join Address on PersonAddress.Address = Address.ID
left join PersonPhone on Person.ID = PersonPhone.Person
left join Phone on PersonPhone.Person = Phone.ID
left join Email with (nolock) on Person.ID = Email.Person
WHERE (
isclient = 'prospect'
or isclient = 'client'
)
and …Run Code Online (Sandbox Code Playgroud) 我们最近将我们的服务器从 SQL Server 2008R2 升级到 SQL Server 2014。我们有一个查询在 2008R2 中运行良好,但现在在 2014 年运行速度非常慢并且执行计划很糟糕。
我做了几次测试...
这两者都导致查询运行与 SQL Server 2008R2 相同且速度快。
为什么 SQL Server 2014 中的计划如此糟糕且查询运行时间如此之长?

此图显示了 2 个查询,一个使用 rownumber 其在 2008R2 中运行的方式,然后第二个是使用分页进行修复。两者都在 2014 年运行,两者都非常不同,但在 2008 年,我们看到的性能与 2014 年使用分页相同。
意外的数据库管理员在这里。
题:
即使该服务器的唯一目的是仅为 SQL Server 数据库引擎提供服务,您是否仍会手动限制 SQL Server 的最大 RAM?
我有 Microsoft Windows 2012 R2 Server、SQL Server 2012 Std、32GB RAM。
管理员不断登录到 SQL Server 以使用其控制台和所有内容。
其次,您如何检查此 Windows 服务器是否启用了 NUMA?
我有一个 SQL Server 2008 R2 表,其架构结构如下所示:
CREATE TABLE [dbo].[CDSIM_BE]
(
[ID] [bigint] NOT NULL,
[EquipmentID] [varchar](50) NOT NULL,
[SerialNumber] [varchar](50) NULL,
[PyrID] [varchar](50) NULL,
[MeasMode] [varchar](50) NULL,
[ReadTime] [datetime] NOT NULL,
[SubID] [varchar](15) NULL,
[ProbePosition] [float] NULL,
[DataPoint] [int] NULL,
CONSTRAINT [PK_CDSIM_BE]
PRIMARY KEY CLUSTERED ([ID] ASC, [EquipmentID] ASC, [ReadTime] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [MonthlyArchiveScheme9]([ReadTime])
) ON [MonthlyArchiveScheme9]([ReadTime])
CREATE NONCLUSTERED INDEX [idx_CDSIM_BE__SubID_ProbePosition]
ON [dbo].[CDSIM_BE] ([SubID] ASC, …Run Code Online (Sandbox Code Playgroud) performance sql-server optimization execution-plan sql-server-2008-r2 query-performance
我们目前有一个功能非常不足的 VM,并建议迁移到具有更好规格的 Azure VM。问题是,Azure VM 比原始 VM 慢得多,即使它的规格更高。
原始服务器是一个具有 2GB 内存的 2 核 VM,它也是一个 Web 服务器。它运行的是 Microsoft SQL Server Web Edition 2008 R2,并且由于该服务器用于其他用途,我们不得不将 SQL Server 中的最大服务器内存限制为512MB。
新服务器是一个具有 7GB 内存的 4 核 VM,它只是一个数据库服务器。它运行的是 Microsoft SQL Server Standard Edition 2008 R2,我们没有限制 SQL Server 可以使用的内存量。
这是在镜像环境中设置的两台服务器之一,但我正在运行测试的数据库没有镜像。该服务器上的其他数据库目前没有太多流量(实际上,当我运行这些测试时,活动监视器没有显示其他数据库上的活动)。
我确实意识到 Azure VM 的一个问题是硬盘驱动器是一种网络资源,因此这将是减速的根源,但即使 IO 统计数据中显示 0 次物理读取,它仍然更慢。
我在 Azure VM上遵循了此页面上的调整建议,包括对磁盘进行条带化(每个驱动器两个磁盘)并将日志和数据文件放在不同的驱动器上。
我唯一没有做的事情是启用页面压缩、限制数据库的自动增长以及将 SQL 服务器错误日志和跟踪文件目录移动到数据磁盘。我也没有在旧服务器上这样做。
旧服务器没有进行任何调整,日志和数据文件位于未条带化的同一驱动器上。
当前服务器上的数据库是 65 GB(45 条数据和 20 条日志),这对于传输到新服务器来说有点太大了,所以我正在一个较小的数据库上进行测试(6 条数据和 13.5 条日志)
旧服务器上的结果CPU time = 1311 ms, elapsed time = …
我想说的是,我每天都在日志文件中收到消息。
首先 I/O 被冻结在数据库 (DatabaseName) 消息出现在日志中。消息就像
I/O 在数据库 (DatabaseName) 上被冻结。不需要用户操作。但是,如果 I/O 没有立即恢复,您可以取消备份。
然后 I/O 在 Database(DatabaseName) 消息上恢复,如下所示
数据库 (DatabaseName) 上的 I/O 已恢复。无需用户操作。
最后备份已经成功完成了数据库,就像这条消息
无需用户操作
这是我的生产审计数据库,软件环境如下:
Windows Server 2012 R2
SQL Server 2012
VMware Tools
Run Code Online (Sandbox Code Playgroud)
我的生产数据库“恢复模式”是“完整”恢复模式。并从 SQL Server 中的哪个登录 ID 设置维护计划备份。它对所有数据库具有“系统管理员”权限。
备份已通过“维护计划”备份在特定时间安排(例如每天下午 4 点)进行设置。并且 Always Backup 在他们的计划时间间隔内成功完成。
为什么在计划备份时间会生成这种日志消息。这种消息是否会影响我的生产数据库性能。我的生产数据库中的(备份/恢复)数据一致性会有任何问题。
任何建议将不胜感激。
我正在尝试在 SQL Server 实例上运行此 SQL 脚本,以将测试数据库恢复到实时数据库的较新副本。
RESTORE FILELISTONLY
FROM disk = '\\staging_server\path\to\db_backup.bak'
-- Restore the files for
RESTORE DATABASE Test_DB
FROM disk = '\\staging_server\path\to\db_backup.bak'
WITH replace,
MOVE 'Test_DB' TO 'D:\R2_BIN\Test_DB.mdf',
MOVE 'Test_DB_log' TO 'D:\R2_BIN\Test_DB_log.ldf',
stats = 5
GO
Run Code Online (Sandbox Code Playgroud)
但是,在运行脚本时,我收到以下错误。
消息 3101,级别 16,状态 1,第 5 行
,无法获得独占访问权限,因为数据库正在使用中。
消息 3013,级别 16,状态 1,第 5 行
RESTORE DATABASE 异常终止。
有什么方法可以强制执行此操作,并终止完成它所需的任何连接?我试图关闭任何可能连接到数据库的应用程序,但我根本无法识别一些连接。我的用户名中有几个,但我只打开了一个 SQL Server Management Studio 实例。
无论如何,有没有办法杀死与特定数据库的所有连接?这个实例上运行着相当多的数据库,所以如果我能帮上忙,我不想只是关闭并重新启动实例。
sql-server ×10
performance ×3
numa ×2
azure-vm ×1
backup ×1
join ×1
memory ×1
optimization ×1
partitioning ×1
t-sql ×1