标签: sql-server

使未使用的数据库脱机的性能优势

我有几个用于遗留应用程序的数据库,它们在当前关闭的 VM 中运行,直到有人需要查看一些历史记录。我已将这些应用程序使用的每个数据库设置为离线,但我想知道:

让这些未使用的数据库处于脱机状态而不是处于联机状态但未与它们建立任何连接或对它们运行查询时未使用是否有性能优势?

performance sql-server

10
推荐指数
2
解决办法
3850
查看次数

如何配置 SQL Server 2012 以便它可以恢复和查看我的用户帐户中的文件?

我有一个 SQL Server 2012 实例作为服务在我的计算机上运行,​​根据服务页面,它以帐户“NT Service\MSSQLSERVER”登录。但是,我无法在计算机管理屏幕的“本地用户和组”区域中的其他任何地方看到该帐户名称,因为如下面的链接所述,这不是用户帐户,而是服务名称,在该框中微软非常有帮助地标记了“帐户”。在这一点上,我可以看到很多人感到困惑。

我试图完成的任务是使用 SSMS 对话框“定位备份文件”恢复文件,该对话框使用的对话框与任何标准的 Windows 文件打开对话框完全不同,可能是因为它正在执行“远程”工作并从SQL 服务器的安全上下文,这是最终用户困惑的另一个丰富来源,我希望这个问题可以帮助澄清。

到目前为止,如果我想恢复我的一个文件夹中的备份 .mdf/.bak 文件,我必须将该文件夹设置为每个人都可以读取,否则我无法使用 SQL Server“定位备份文件”窗口。我发现这样一个想法,即您正在使用 GUI 与具有与您不同的用户帐户和权限的服务进行对话,Microsoft 甚至没有人愿意向您说明这一点,即使我有多年的 Windows 系统管理经验,也非常令人困惑.

我希望我错过了一些 SQL Server 文档页面,这些页面会告诉您,在安装新的 SQL Server 实例后,您可以如何设置安全性。

像这样的论坛帖子甚至让微软工作人员说“这很复杂”,并且在 Denali 中“再次改变了”。这在 SQL Server 2012 中现在如何工作,以及如何将读取属于用户的文件的权限添加到 SQL 数据库引擎的安全性SID。

security sql-server

10
推荐指数
1
解决办法
3万
查看次数

SQL Server Express 可以拥有的最大连接数?

我在我的一台客户端机器上安装了 SQL Server 2005 Express 版本,许多其他用户也通过我提供的 C# 应用程序连接到该 SQL Server,作为接口。

有时电脑连接到 SQL Server 有时只是抛出异常

未找到 SQL Server....

我相信 Express 版本达到了它的最大连接限制,然后出现错误。

请指导我如何解决这个问题。

任何帮助我知道哪个版本有多少并行连接数的白皮书,

我愿意升级到 SQL Server 2008 或 SQL Server 2012,但更喜欢 Express 版本。如果他们真的在这种情况下回报我,我也可以选择其他版本,否则 Express 版本表现良好。

sql-server-2005 sql-server

10
推荐指数
1
解决办法
6万
查看次数

无法在单用户模式下连接到 sql server

我已经开始我SQL Server 2008 sqlcst02\inst01在Single User Mode通过附加;-m到该实例在启动参数结束SQL Server Configuration Manager。我已经停止SQL Server Agent了inst01实例。我的帐户是 的成员,Domain Admin group我尝试使用登录sqlcmd -S sqlcst02\inst01并不断收到错误,提示该服务已进入Single User Mode且只有一个管理员可以登录。我尝试添加;-m"sqlcmd"到启动参数以将连接限制为仅,sqlcmd但我得到了相同的结果。我已经尝试以我自己的帐户登录并以本地管理员帐户登录。我已经以我自己和管理员的身份启动了命令提示符,但我得到了相同的结果。我试过使用ADMIN:sqlcst02\inst01in连接SSMS。没运气。

我正在尝试重置sa密码,因为以前的管理员没有为我留下这些信息。这令人抓狂。我以前在其他机器上这样做过,没有任何问题。

sql-server-2008 sql-server

10
推荐指数
2
解决办法
2万
查看次数

为 50.000 多家商店使用一个数据库是个好主意吗?

我知道 Shopify 只为所有商店使用一个数据库。但是他们如何处理拥有如此大数据的数据库呢?为 50.000 多家商店使用单个数据库是个好主意吗?

database-design sql-server

10
推荐指数
1
解决办法
2252
查看次数

用过滤的(非空值)索引替换索引有什么影响?

我们的项目运行着一个非常大、非常复杂的数据库。所以大约一个月前,我们注意到包含空值的索引列使用的空间变得太大。作为对此的回应,我编写了一个脚本,该脚本将动态搜索包含超过 1% 的空值的所有单列索引,然后在该值不为空的情况下删除并重新创建这些索引作为过滤索引。这将删除并重新创建整个数据库中的数百个索引,通常会释放整个数据库使用的近 15% 的空间。

现在我有两个问题:

A) 以这种方式使用过滤索引的缺点是什么?我认为它只会提高性能,但是否涉及任何性能风险?

B) 我们在删除和重新创建索引时收到错误(“不能删除索引 XYZ,因为它不存在或您没有权限”),即使在事后检查时,一切都完全按预期进行。这怎么会发生?

谢谢你的帮助!

编辑:回应@Thomas Kejser

嗨,谢谢,但事实证明这是一场灾难。当时我们不明白一些事情,例如:

  1. 在查询期间,SQLOS 在确定它不能使用 NULL 值连接表列之前制定索引计划。IE,您确实需要有一个 WHERE 子句过滤器来拟合查询中使用的每个过滤索引的索引,否则根本不会使用该索引。
  2. 删除和创建索引并在之后再次冗余更新他们的统计信息仍然可能不足以生成更新的计划,我们假设他们会这样做。在某些情况下,似乎只有足够高的工作负载才会迫使 SQL Server 重新评估计划。
  3. 执行计划器的功能有一些奇异的东西,仅凭常识和逻辑就很难确定。甚至有数以千计的代码隐藏生成的不同查询的变体,看似无用的索引可以帮助某些最终在关键查询中使用的统计信息和查询计划。

最终,这些更改被还原。因此过滤索引是一个强大的工具,但您需要真正了解从这些列中提取的数据。除了空间问题之外,普通索引很容易应用,过滤索引代表了非常定制的解决方案。它们当然不是常规索引的替代品,而是在需要它们的特殊情况下对它们的扩展。

index sql-server filtered-index

10
推荐指数
1
解决办法
1216
查看次数

我可以通过恢复 MASTER 数据库来恢复 TDE 证书吗?

(幸运的是,我们目前并未处于这种情况,只是提前计划,看看如果发生这种情况,我们的选择是什么。)

对于使用透明日期加密 (TDE) 加密的数据库,除非您有用于加密它的证书的备份,否则数据库备份的副本是不可恢复的。

如果你没有那个怎么办?还有其他选择吗?

如果整个服务器发生故障,在新硬件上恢复 MASTER 数据库的备份是否也会恢复证书?

sql-server encryption transparent-data-encryption disaster-recovery

10
推荐指数
2
解决办法
6520
查看次数

在单个文件组上分区

我的数据库中有一些非常大的表,但是这些数据中有很大一部分是“旧的”。

由于我无法控制的情况,我不允许删除这些“旧”数据。另一个限制是我无法修改数据库,这意味着向其中添加文件组。现在的情况是,一切都驻留在PRIMARY文件组中。

我想将这些表分成几个分区,例如“新”、“旧”、“存档”等。我确实有一个“状态”列,我想用于此目的。

鉴于所描述的场景和限制,我想知道分区在这里是否有意义。换句话说,如果我的表以这种方式分区,但所有分区都位于同一个文件组中,SQL Server 是否足够聪明,可以在底层文件中找到我的“新”数据所在的特殊区域,而不触及具有“旧”数据的区域?

换句话说,假设我 80% 的数据是“旧的”。SQL Server 是否有一种机制可以避免访问 100% 的底层文件,而只访问 20% 包含“新”数据的内容(当然,假设我WHERE在查询子句中指定了我的分区列)。

我想要回答这个问题,需要了解分区是如何在内部实现的。我很感激任何指点。

sql-server filegroups partitioning

10
推荐指数
2
解决办法
9521
查看次数

镜像数据库上的事务日志维护

SQL Server 版本:2008 R2 Enterprise SP2

我正在尝试处理我们的 SQL Server 维护,但我遇到了一些我认为不正确的事情。我们有一个带有 3 个数据库的单个生产实例,每个数据库都异地镜像到一个 DR 实例。

在查看 DR 实例时,我注意到 LDF 文件很大,对于频繁使用的数据库超过 35GB。

我知道这可能是由于镜像数据库处于完全恢复模式并且日志从未备份过,它们只会继续增长,直到驱动器空间耗尽。

我们在主体数据库上做日志备份,我的问题是在镜像上做日志备份有什么问题?

在进行日志备份之前,必须至少完成一次来自镜像的完整数据库备份,在这种情况下,是否需要使用特殊选项,因为它是镜像?

这也是MIRROR数据库上的事务日志维护建议。

感谢您提供任何意见

sql-server-2008 sql-server mirroring transaction-log

10
推荐指数
1
解决办法
1万
查看次数

对于来自同一行的多个选择,是否有比 Union All 更好的选择?

示例架构:

CREATE TABLE [dbo].[Base](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Option1ID] [int] NULL,
[Option2ID] [int] NULL,
[Option3ID] [int] NULL,
[Option1Name] [varchar] NULL,
[Option2Name] [varchar] NULL,
[Option3Name] [varchar] NULL,
[Option1LName] [varchar] NULL,
[Option2LName] [varchar] NULL,
[Option3LName] [varchar] NULL,)
Run Code Online (Sandbox Code Playgroud)

有没有办法让结果显示如下:

ID | OptionID | OptionName | OptionLName
Run Code Online (Sandbox Code Playgroud)

我尝试使用 UNION ALL 来实现这一点,但这意味着在我的示例中,在同一行上重复 3 次,在我的实际问题中,我必须这样做 10 次。由于遗留代码,我无法对表进行规范化。有没有办法只遍历 Base 行一次?

sql-server sql-server-2012

10
推荐指数
1
解决办法
1万
查看次数