Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。


2
ON子句的位置实际上意味着什么?
普通JOIN ... ON ...语法是众所周知的。但是也可以将ON子句JOIN与其对应的子句分开放置。这是在实践中很少见到的东西,在教程中找不到,而且我还没有找到任何 Web资源甚至提到这是可能的。 这是一个可以使用的脚本: SELECT * INTO #widgets1 FROM (VALUES (1), (2), (3)) x(WidgetID) SELECT * INTO #widgets2 FROM (VALUES (1, 'SomeValue1'), (2, 'SomeValue2'), (3, 'SomeValue3')) x(WidgetID, SomeValue) SELECT * INTO #widgetProperties FROM (VALUES (1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')) x(WidgetID, PropertyName) --q1 SELECT w1.WidgetID, w2.SomeValue, …
23 sql-server  t-sql 

2
如何还原“包含”数据库?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 4年前关闭。 我最近尝试将网络实例的备份还原到本地开发SQL Server。令我惊讶的是,我收到以下错误消息: 消息12824,级别16,状态1,行3必须将sp_configure值“包含数据库身份验证”设置为1,才能还原包含的数据库。您可能需要使用RECONFIGURE来设置value_in_use。消息3013,级别16,状态1,第3行RESTORE DATABASE正在异常终止。 要成功还原数据库,必须遵循哪些步骤?

3
授予文件系统对SQLSERVERAGENT虚拟帐户的访问权限
我正在尝试NT Service\SQLSERVERAGENT根据此问题中的标记答案授予Windows帐户文件系统访问权限。我相信这是一个虚拟服务帐户,并且不会显示在控制面板->用户帐户区域中。 如何授予该服务帐户访问文件系统的权限?特别是在Windows 7上。 我已经阅读了几种方法,但似乎没有一种方法可供我选择。我尝试使用PowerShell方法,但是AD命令不是有效命令。我什至下载并安装了这些命令所需的Windows补丁。我还读到我应该能够通过SQL Server配置管理器或Management Studio来执行此操作。不过,我似乎无法弄清楚在何处调整这些权限。 SQL Server代理进程无法启动,并显示以下错误消息: Login failed for user 'NT SERVICE\SQLSERVERAGENT'. Reason: Failed to open the explicitly specified database 'msdb'. [CLIENT: <local machine>] 根据我的Google搜索,它与该帐户的权限有关。 我不确定数据库是否损坏,但是它表示数据库处于正常状态。SQL Server代理登录是sysadmin和public组的一部分。

3
警告执行计划中缺少统计信息
我有一种我无法理解的情况。我的SQL Server执行计划告诉我,表上缺少统计信息,但是已经创建了统计信息: 但是,如果我们看一下表格,将会看到有一个自动创建的统计信息: 有人可以帮助您了解情况如何吗? 当前数据库上的Auto_Update和Auto_Create统计信息已打开。 我正在使用SQL Server 2014。



1
为什么删除行时非聚集索引使用更多空间?
我有一张有75亿行和5个索引的大表。当我删除大约1000万行时,我注意到非聚集索引似乎增加了它们存储在页面上的数量。 我写了一个查询dm_db_partition_stats来报告页面中的差异(之后-之前): 索引1是聚集索引,索引2是主键。其他的则是非集群且非唯一的。 为什么这些非聚集索引上的页面增加? 我希望最坏的数字保持不变。 我确实看到性能计数器报告了删除期间页面拆分的增加。 删除时,幻像记录是否必须移至另一页?这和“唯一符”有关吗? 我们正处于推出RCSI的中间阶段,但是现在,RCSI已关闭。 它是可用性组中的主要节点。我知道快照以某种方式在次要上使用。如果这很有意义,我会感到惊讶。我计划对此进行深入研究(查看dbcc页面输出)以了解更多信息。希望有人看到过类似的内容。

3
服务器重新启动后,SQL Server分布式可用性组数据库未同步
我们已经准备好在SQL Server上执行大型升级,并注意到我正在尝试解决的Distributed Availability Groups的一些异常行为,然后再进行下一步。 上个月,我将远程辅助服务器从SQL Server 2016升级到SQL Server2017。该服务器是多个分布式可用性组(DAG)和单独的可用性组(AG)的一部分。升级该服务器时,我们没有意识到它会进入无法读取的状态,因此在过去的一个月中,我们仅依赖主服务器。 作为即将进行的升级的一部分,我将CU 4修补程序应用于服务器并重新启动了它。当服务器重新联机时,刚刚打补丁的辅助服务器显示所有DAG / AG都在同步,没有任何问题。 但是,小学的故事却截然不同。据报道 单独的AG正在同步,没有任何问题 但是DAG处于“ 不同步/不正常”状态 最初出现恐慌之后,我尝试了以下操作以使DAG中的内容再次同步: 从主服务器开始,我停止并恢复了数据移动。这没有开始同步数据。 在第二个(我刚刚打过补丁的)上,我运行了ALTER DATABASE [<database] SET HADR RESUME;-执行时没有错误,但是没有恢复任何同步 我最后一次再次同步数据的尝试是登录到辅助数据库,然后手动重新启动SQL Server服务。手动重新启动服务似乎有些极端,因为我希望重新启动服务器就足够了。 是否有人遇到过重启后DAG无法开始同步到辅助服务器的问题?如果是这样,如何解决? 我同时检查了SQL Server错误日志和辅助服务器上的事件查看器,没有发现异常。

2
触发器每次都编译吗?
我们正在对CPU利用率高的服务器进行故障排除。在发现查询并非真正引起查询之后,我们开始研究编译。 性能监视器显示少于50次编译/秒和少于15次重新编译/秒。 在运行XE会话以查找编译之后,我们每秒看到数千个编译。 该系统正在使用触发器来审核更改。大多数编译是由于触发器引起的。触发器参考sys.dm_tran_active_transactions。 我们的第一个想法是,在触发器中引用DMV会使它每次都编译,或者仅此特定DMV会导致它编译。因此,我开始测试该理论。它确实每次都编译,但是当它不引用DMV而是硬编码一个值时,我没有检查触发器是否在每次触发时都编译。每次触发时它仍在编译。放下触发器将停止编译。 我们在XE会话中使用sqlserver.query_pre_execution_showplan来跟踪编译。为什么与PerfMon计数器之间存在差异? 每次触发运行时,您都会收到一个编译事件是否正常? 复制脚本: CREATE TABLE t1 (transaction_id int, Column2 varchar(100)); CREATE TABLE t2 (Column1 varchar(max), Column2 varchar(100)); GO CREATE TRIGGER t2_ins ON t2 AFTER INSERT AS INSERT INTO t1 SELECT (SELECT TOP 1 transaction_id FROM sys.dm_tran_active_transactions), Column2 FROM inserted; GO --Both of these show compilation …

4
索引空间大于数据空间是否不好?
我经常需要对没有正确索引的大型表运行查询。因此,我要求DBA创建此类索引。他要做的第一件事是查看表统计信息,并查看索引空间大小。 他经常告诉我找到替代解决方案,因为“索引已经大于表”。他认为索引必须小于数据,因为他告诉我“您见过书中的索引吗?它比书本小得多,这就是表索引应该的样子”。 我认为他的理念不正确,但是我不能挑战他,因为他是首席DBA,而我是一名开发人员。我觉得如果查询需要索引,则应该只创建索引,而不是查找只会使SP变得不可读和无法维护的“替代方法”。 我只选择必填列。问题是我按日期过滤,因此引擎必须进行表扫描以匹配列。该查询每天晚上运行一次,以收集统计信息,但是运行需要15分钟(我们有另一条严格的规则:任何过程都不应超过3分钟)。 DBA向我显示了索引统计信息。该表上大约有10个索引,其中只有6个被使用(统计数据显示零命中4个)。这是一个大型系统,有20多个开发人员参与。索引是出于任何原因而创建的,并且可能不再使用。 我们需要支持SQL Server 2008,因为这就是运行测试数据库的基础。但是客户都在2014年和2016年。
22 sql-server  index 

2
使用MAX文字或更具体的小字体
有人正在查看我的DDL代码以创建表,并提出了建议,当他们看到我看到使用VARCHAR(256)文本字段时,我希望它很小,例如名字或其他名称,我应该始终使用VARCHAR(MAX)并链接为什么使用varchar(max )。我读了它,但它似乎过时了,因为它专注于2005年,并且似乎没有提供任何真正的理由在所有文本字段上每行可能分配多达2 GB的空间。 从性能,存储等方面来看,应该如何决定是否VARCHAR(MAX)对现代版本的SQL Server 使用或更小的更具体的类型?(例如,2008、2012、2014)

1
重建索引时何时使用sort_in_tempdb?
我们正在讨论是否对DW表使用SORT_IN_TEMPDB选项。我的理解是,使用此选项时会有更多的写入,尽管它们的顺序更大。我们有一个SAN(众所周知,它有时速度很慢),因此在我们的情况下,我们希望尽可能地限制写入次数。我相信tempdb位于单独的LUN(磁盘集)上。 我们的数据文件和tempdb文件中都有足够的磁盘空间。在这种情况下,我们可以从使用SORT_IN_TEMPDB中受益吗? 令我震惊的是对此答案的评论 重建索引时,您将需要索引空间的两倍+ 20%进行排序。因此,通常来说,要重建数据库中的每个索引,您只需要数据库中最大索引的120%。如果您使用SORT_IN_TEMPDB,则只能赢20%,您的数据文件中仍然需要100%的附加收入。此外,在tempdb中使用sort会大大增加您的IO负载,因为您现在不再将索引一次写入数据文件,而是一次将其写入tempdb,然后再将其写入数据文件。因此,这并不总是理想的。 我们绝对不希望通过慢速/可能配置错误的SAN增加IO负载。 最好的测试方法是什么?通过简单地重建带有和不带有该选项的表并记录时间? 编辑:我们有8个tempdb文件,每个15GB。我们确实设置了TF 1117/1118标志,并且启用了IFI。当前,我们使用sort_in_tempdb选项(不带该选项)进行混合重建。 谢谢! SQL Server 2012企业版


4
如何删除SSMS中的换行符?
我正在处理如下所示的SQL create procedure as begin 请注意,例如as和之间的差距很大begin。 如何删除这些?我使用了SQL格式化程序,但这不起作用。
22 sql-server  ssms 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.