默认的 FILLFACTOR 是 100,我有时被告知将其减少到 80 或更低,以便由于每页上的空白空间而减少页面拆分。
我不明白这一点——如果在默认 FILLFACTOR 为 80 的表上创建新索引,则每页的 20% 空间留空。所以假设一行需要使用 10% 的页面,所以当它满时它可以容纳 10 条记录。FILLFACTOR 为 80,现在只能保存 8 条记录。那么当你添加第 9 条记录时,会出现分页吗?使用 100% FILLFACTOR 时,页面拆分只会发生在第 11 条记录上,因此似乎较低的填充因子会使情况变得更糟。
我有一个具有多个数据库(DB-A、DB-B、DB-C)和多个辅助数据库(SEC-B、SEC-C)的可用性组 (AG),其中一个数据库不会仅在其中一个数据库上恢复同步次要。
对于此示例,DB-C 未在 SEC-C 上同步,并且重新启动 SQL Server 或恢复 HADR 再多也不会使它重新启动。
我不想从 AG 中删除副本(辅助 SEC-C),因为我将不得不重新同步所有数据库(DB-A、DB-B 和 DB-C),这将花费更多时间比必要的。
我也不想从 AG 中完全删除数据库 (DB-C),因为还有其他辅助 (SEC-B) 没有问题,而且我不想重新同步它或暂时丢失我的HADR 在它工作的辅助节点上。
如何从 AG 中仅删除这个辅助数据库,重新同步它,然后将其添加回 AG?
最近,在我们进行统计更新时,我们的阻止进程仪表板一直在报告被阻止的进程。
很快就找到了原因:更新统计作业步骤 (T-SQL) 在辅助 SQL Server 实例和主 SQL Server 实例上都启动。该作业更新同一数据库的多个统计信息,该数据库是 AlwaysOn 可用性组的一部分。我希望这会在辅助实例上失败。
故障转移历史的简要概述:
由于许可而应保持活动状态的服务器 A(将被命名为活动服务器),在 20/02 晚上 9 点意外故障转移到服务器 B(被动服务器)。
在计划外故障转移之后,我们在 2002 年 2 月 21 日中午 12 点进行了另一次(但这次是计划内的)手动故障转移回 Active Server。
工作经历
在第一次故障转移之前一切都很好,活动服务器是唯一运行该作业的服务器。
一项工作正在运行。
我们看到在活动端运行的统计更新。(这是当时的主要副本)
在无源服务器作为主要副本的短时间内,我们没有任何监控并且作业历史记录被清除。
故障转移后,回到“正常”状态,在被动节点上处于主节点不到 24 小时后,被动实例上的作业步骤也已在主动实例上启动并运行。
现在对我来说有趣的部分是,这两个作业都在活动服务器上运行,似乎该作业正在使用侦听器访问数据库。但这可能是一个完全不同的原因。
有一个复制作业 PowerShell 任务在每晚凌晨 01 点运行 (dbatools):
powershell.exe Copy-DbaAgentJob -ExcludeJob "CopyJobs,CopyLogins" -Source INDCSPSQLA01 -Destination INDCSPSQLP01 -Force
Run Code Online (Sandbox Code Playgroud)
我的猜测现在是针对一次,作业复制发生在主动、次要节点 --> 带有 -Force 的主要被动节点。这发生在 21/02 01 AM。
问题
为什么被动实例上的作业步骤在主动实例的数据库上执行?
清单
在这两种情况下,作业目标都是本地的:
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
Run Code Online (Sandbox Code Playgroud)
服务器名称正确
select …
Run Code Online (Sandbox Code Playgroud) 我目前正在检查我们数据仓库中的所有索引作为性能调整练习。其中一些索引未在系统统计中使用,我正在考虑删除它们以减少批处理过程中的开销。
其中一些没有意义,因为 PK 列被用在其他索引的中间,等等。但是,我想知道 SQL Server 如何处理多列索引(具有重叠列)。
例子:
NONCLUSTERED INDEX Index1 (A, B, C)
NONCLUSTERED INDEX Index2 (A, B)
Run Code Online (Sandbox Code Playgroud)
SQL Server 是否能够将 Index1 用于与 Index2 和 Index2 不需要的行相同的行?我知道 rowID 包含在 B+tree 的叶级节点中,但是 C 的所有记录在 Index1 中都是有效的。
可以在不影响性能的情况下删除 Index2 吗?
据我所知,索引还可以帮助执行计划中的排序。Index1 也可以用于这些吗?
我正在使用 SQL Server 2012。我有一个最终会被调整的存储过程,但我有一个问题。我的服务器内存为 32 GB,在 SQL Server 中分配的最大内存为 20 GB。当我执行这个 SP 时,逻辑读取大约是 4000000,所以 8kb 的 4M 数据页时间,除以 1024,我将在内存中获得 30 GB 的数据。
我的问题是如果我只分配了 20 GB 的内存,SQL Server 如何在内存中保留 30 GB 的数据?可能我的问题看起来很傻,但需要你们的帮助。谢谢
它看起来像在客户端站点,在数据库备份和还原(从 SQL Server 2008 到 SQL Server 2012)之后,看起来它们从表中丢失了索引,我们不得不手动创建它们。我们已经看到了两个这样的例子。
我认为备份和恢复可以保持所有对象完好无损。这可能吗?是否有一个设置可以让用户在还原过程中忽略对象?
我已将一个数据库添加到已经拥有一些数据库的可用性组,所有这些数据库都已播种并同步到辅助数据库。
最后一个似乎被添加到可用性组中,但被标记为“不同步”并且不会返回任何错误。我已经尝试了多次,结果相同。
我查看了扩展事件、事件查看器......什么也没有。单击仪表板中的“警告”没有任何有用的信息。辅助数据库上根本不存在数据库文件。我怀疑它在播种过程开始时就被阻止了(但显然是在“添加到 AG”向导中的初始验证之后)。
我有一种明显的感觉,SQL Server 一定正在将相关的故障消息记录到一些我不知道的 DMV 中。
是否有一个规范的指南来指导人们应该在所有地方寻找与AlwaysOn相关的错误?
我有一个关于将 SQL Server 2017 设置为服务的最佳方式的问题。
我有客户将 SQL Server 数据库作为服务购买,就好像它是 Azure 或 AWS 实例一样,他们无法访问服务器。他们在实例中只有用户名和密码,我需要向这些用户隐藏可通过 SQL Server Management Studio 或 T-SQL 命令访问的服务器配置,例如分配给实例的内存、CPU 数量等.
在 SQL Server 2016 中,我通过删除 master..xp_msver 视图的权限来完成此操作。例如,如果没有此权限,他们将无法查看实例属性(在 SSMS 中右键单击服务器)和 Facets 表单中的一些数据。即使没有此权限,他们也可以登录并在其数据库中执行所需的一切操作。
但在 SQL Server 2017 中,这不再有效,如果我拒绝此视图的权限,则无法再登录 SQL Server。
我知道将标准 SQL Server 用作服务可能不正确,也许它还没有为此做好准备,但是有正确的方法吗?或者可以使用哪些替代方案?
我花了很多时间在 Google 上试图寻找替代方案,但是对于 SQL Server 2017,我没有找到任何隐藏服务器设置的东西。
注意:我的用户使用 SQL Server Management Studio...
具有 SQL Server Integration Services 包步骤的 SQL 代理作业失败并显示以下消息:
以用户身份执行:DOMAIN\SQLAGENTACCOUNT。适用于 64 位的 Microsoft (R) SQL Server 执行包实用程序版本 13.0.4259.0 版权所有 (C) 2016 Microsoft。版权所有。指定的报告选项无效。仅允许 E、W、I、C、D、P、V 和 N。命令行参数无效。这一步失败了。
sql-server ×10
index ×3
backup ×1
index-tuning ×1
jobs ×1
memory ×1
restore ×1
ssis ×1
t-sql ×1