Questions tagged «sql-server»

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

3
自联接主键
考虑以下由N自我联接组成的查询: select t1.* from [Table] as t1 join [Table] as t2 on t1.Id = t2.Id -- ... join [Table] as tN on t1.Id = tN.Id 它生成具有N个聚集索引扫描和N-1个合并联接的执行计划。 老实说,我看不出没有理由不优化所有联接而仅执行一个聚集索引扫描,即为此优化原始查询: select t1.* from [Table] as t1 问题 为什么没有优化联接? 说每个联接都不会改变结果集在数学上是不正确的吗? 经过测试: 源服务器版本:SQL Server 2014(12.0.4213) 源数据库引擎版本:Microsoft SQL Server标准版 源数据库引擎类型:独立SQL Server 兼容性级别:SQL Server 2008(100) 查询没有意义;它只是浮现在我的脑海,我对此感到很好奇。 这是创建表和3个查询的小提琴:带有inner …


1
为什么对分区视图执行删除会导致聚集索引插入?
我有一个分区视图,具有下面的插入触发器(可怜的芒分区)。当我执行DELETE时,我得到以下查询计划: delete from factproductprice where pricedate = '20170725' 在视图上触发: ALTER TRIGGER [dbo].[factProductPriceDelete] ON [dbo].[FactProductPrice] INSTEAD OF DELETE AS BEGIN IF @@ROWCOUNT = 0 RETURN; DECLARE @PriceDate DATE SELECT @PriceDate = CAST(PriceDate AS DATE) FROM DELETED IF @PriceDate BETWEEN '20140101' AND '20141231' BEGIN DELETE FROM dbo.FactProductPrice2014 WHERE ProductId IN (SELECT ProductId …

1
全文:创建多个全文索引(服务器挂起)后,许多FT_MASTER_MERGE以SUSPENDED状态等待
我们在SQL Server 2014上进行了测试,当时我们有10个数据库,每个数据库中有100个不同的架构,每个架构中有10个小表(〜50行)(总共有10K个表),并在所有这些表上创建了全文本索引所有这些数据库中的表。 几分钟后,我们发现SQL Server停止接受任何连接(ADMIN:.连接除外)。如果重新启动服务器,则可以连接,但有时会再次挂起。经过一些调查,我们发现它是由消耗所有工作线程引起的dm_os_tasks,dm_os_waiting_tasks并向我们​​显示了状态中有很多FT_MASTER_MERGE等待SUSPENDED。我们用谷歌搜索“全文正在等待主合并操作”,但没有找到更多有关它的实际信息。 我们尝试了不同的全文目录配置:每个DB一个目录,每个模式一个目录,每个索引一个目录。无论如何,服务器将所有这些挂起的任务挂起。 什么是等待的根本原因,如何解决/减轻这种等待? 在如此大量的表上启用全文的推荐方法是什么?

2
在过去4小时内重新创建了大多数查询计划
我的SQL Server数据库性能出现问题。我已经找到了此工具sp_BlitzCache。命令执行后,我得到以下语句: 您在过去24小时内创建了92.00%的计划,在过去4小时内创建了92.00%的计划。 在确定问题的同时(使用SQL Server Profiler,我检查了StmtRecompile事件的发生),但我只能找到一些经常被重建的全文本搜索查询。但是,全文搜索查询仅占所有查询的5%。 您有什么建议可能导致其余87%的计划重新生效吗? 我有SQL Server 2012(版本11.0.6567.0)。 编辑:我添加了我的性能计数器 +---------------------------+--------------------------------+--------------+ | object_name | counter_name | cntr_value | +---------------------------+--------------------------------+--------------+ | SQLServer:Buffer Manager | Background writer pages/sec | 0 | | SQLServer:Buffer Manager | Buffer cache hit ratio | 28436 | | SQLServer:Buffer Manager | Buffer cache hit ratio base …

2
使用SQL Server TDE编写远程备份时,网络通信是否已加密?
他们确实说没有“愚蠢的问题”之类的东西,所以去了: 我了解SQL Server 透明数据加密(TDE)会加密静态数据,以便在有人闯入您的存储并窃取这些文件时对您的数据库文件(.mdf)和备份文件(.bak)进行加密。我还了解到,从磁盘读取数据时,数据将被解密,因此不会在内存中(移动中)对数据进行加密。因此,运行远程查询(从SensitiveData中选择*)的用户请求的数据在通过网络传输时不会被加密,因此很容易被拦截。 因此,假设以上所有方法都是正确的,这是我的愚蠢问题:如果我的SQL Server实例在计算机A上并且我的TDE数据库备份被写到远程计算机B上的存储中,那么备份操作数据是否在从计算机A传输时被加密了?将计算机A写入计算机B的磁盘上?我认为必须这样做(因为我想加密操作首先在计算机A上进行),但是在任何Microsoft文档或博客中都找不到对此的确认。同样,在还原操作过程中-是否有人在计算机B处拦截从磁盘上传输的数据以在计算机A上还原数据库-他们会发现运动中的数据已加密吗?

3
在一列上区分并返回TOP行
您如何查询三个最大的唯一客户Purchase_Cost? 我想在上应用DISTINCT唯一Customer_Name,但是下面的查询在所有三列上应用了非重复。我应该如何修改查询以获得所需的输出? SELECT DISTINCT TOP 3 customer_name, order_no, Purchase_Cost FROM PurchaseTable ORDER BY Purchase_Cost

1
无法截断事务日志log_reuse_wait_desc-AVAILABILITY_REPLICA
今天早上,我被我们的数据库之一的事务日志已满警报惊醒。该服务器是Alwayson群集,也是事务复制订阅服务器。我检查了log_reuse_wait_desc,它显示了logbackup。某人四天前不小心禁用了日志备份作业,我重新启用了日志备份作业,日志被清除。从凌晨4点开始,我想我将在那天早上晚些时候去上班,因为日志已经增长到400GB,所以请顺便去。 上午10点-我在办公室,我在缩小之前检查日志使用率,大约是16%。我很惊讶,检查显示复制的log_reuse_wait_desc。我很困惑,因为这是一个复制订户。然后,我们看到该数据库已启用CDC,并认为这可能是原因,因此禁用了CDC,现在log_reuse_wait_desc显示了AVAILABILITY_REPLICA。 同时,日志使用量仍在稳定增长,目前为17%。我检查了Alwayson仪表板,并检查了已发送和重做队列,两者实际上都为零。我不确定为什么日志重用显示为AVAILABILITY_REPLICA并且无法清除日志。 知道为什么会这样吗?

1
我应该对链接SQL Server有什么大的限制?
我们的产品基于Microsoft SQL Server。当前,我们正在使用三个数据库,并且始终将它们部署在一个SQL Server实例上。 这三个数据库是OLTP,OLAP和审计。OLAP数据库使用跨数据库查询,具有来自OLTP和审计的有关EOD的大量入站数据。 问题 如果我们要将这三个数据库部署到单个物理服务器内的三个单独的Standard Edition 实例上,并使用SQL Server的链接服务器功能将它们绑定在一起: 对应用程序代码的透明度如何?我应该期待多少变化? 到OLAP的入站数据总计为5万至10万行,每个EOD负载为200-500MB。我应该期望多少性能下降? 我还应该期待其他哪些重大限制? 背景 目前,我们正在为潜在的第一个客户提供500多个并发用户。 我们正在起草服务器规范,其中包括64个内核和256GB RAM。为了使SQL Server能够利用所有这些丰富的资源,客户端必须购买Enterprise Edition,而对于SQL Server 2016,Enterprise Edition仅在基于每核的许可中可用。 我们担心光是许可成本(64 x 7400美元)就会使他们失望。因此,我正在考虑将数据库分为Standard Edition的三个实例,并将它们链接在一起,希望链接功能对应用程序代码是透明的。

1
COALESCE现在可燃了吗?
我的一位开发人员争辩说COALESCE(column, default value) = default value现在可以精打细算了。那正确吗? 我进行了以下测试,并认为这暗示着COALESCE不可持久。 USE tempdb; SELECT @@VERSION; -- Microsoft SQL Server 2016 (RTM-CU3-GDR) (KB3194717) - 13.0.2186.6 (X64) Oct 31 2016 18:27:32 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows 10 Pro 6.3 <X64> (Build 14393: ) (Hypervisor) CREATE TABLE Test ( ID int primary key …

3
创建数据库级别的常量(枚举)而不使用CLR?
我有几个SQL对象,它们需要根据请求的期望状态采取其他操作。有没有一种方法可以创建数据库级别的常量(枚举),这些常量可以传递给存储过程,表值函数并可以在查询中使用(不使用CLR)? CREATE PROCEDURE dbo.DoSomeWork(@param1 INTEGER, ..., @EnumValue myEnumType) AS ...; 然后使用它: EXEC doSomeWork 85, ..., (myEnumType.EnumValue1 + myEnumType.EnumValue2); 哪里myEnumType将保留一些枚举值。 在该过程中,我将能够使用@EnumValue它并针对其中的值进行测试myEnumType以完成所需的工作。我将myEnumType考虑的情况下使用位掩码的值。 举一个简单的例子,考虑一个昂贵的过程,该过程需要一个庞大的数据集并将其缩减为较小但仍然非常大的数据集。在此过程中,您需要在过程的中间进行一些调整,以免影响结果。说这是基于归约内中间计算的某些状态来过滤(或针对)某些类型的记录。该@EnumValue类型的myEnumType可以用来测试此 SELECT ... FROM ... WHERE (@EnumValue & myEnumType.EnumValue1 = myEnumType.EnumValue1 AND ...) OR (@EnumValue & myEnumType.EnumValue2 = myEnumType.EnumValue2 AND ...) OR ... 在不使用CLR的情况下,SQL Server中是否可能存在这类数据库级别的常量? 我正在寻找数据库级别的枚举或常量集,这些枚举或常量集可以作为参数传递给存储过程,函数等。

1
持久的计算列导致扫描
将常规列转换为持久计算列会导致此查询无法执行索引查找。为什么? 在多个SQL Server版本上进行了测试,包括2016 SP1 CU1。 复制 使用计算列 带有常规列 麻烦的是table1,col7。 表格和查询是原始文档的部分(简化)版本。我知道查询可以用不同的方式重写,并且出于某种原因可以避免该问题,但是我们需要避免触摸代码,而为什么table1找不到原因仍然存在。 正如保罗·怀特(Paul White)所展示的(谢谢!),寻道在强制的情况下仍然可用,所以问题是:为什么寻道未由优化程序选择,以及我们是否可以做一些不同的事情来使寻道按原样进行而不改变?码? 为了澄清有问题的部分,以下是不良执行计划中的相关扫描:


4
有什么原因停止SQL Server?
我所读到的只是停止SQL Server可能造成的破坏,因为它会创建一个冷缓存并占用内存。那么为什么有人要停止SQL Server?如果您可以提供文章的任何链接,以便我可以阅读更多文章,我将不胜感激! 这个问题是我老师提出的。除非是一个棘手的问题,否则我绝对会感到困惑。他的确切问题是: 使用Internet进行研究,并了解为什么有人想要停止SQL Server。解释你的答案。 这是在我们探索如何使用SQL Server 2008 R2的上下文中。我不确定他是否在寻求明显的答案,或者我缺少什么。

2
SQL Server关于旧黑客的建议[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 3年前关闭。 晚上伙计们和女孩们,我希望你们中的一些传说能够在这里帮助我:) 我上次在黑暗时代使用SQL Server的版本是7(我们一起擦了两根木棍以使之运转)。现在,我在21世纪,并且想再次回到DBA的工作。 我想设置一个“廉价”虚拟机和实例,然后进行最新的认证(我认为最新的认证将于2017年4月开始,这对我来说是个不错的时机)。我对BI方面特别感兴趣。 谁能为虚拟机推荐好的托管服务提供商?我是简单地获取Windows Server并从那里去还是可以在某处获取软件包?我承担的Azure还是其他地方?我怀疑有很多选择,希望您可以分享一些不错的选择:) 加上其他有用的提示,我们非常欢迎!

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.