Questions tagged «sql-server»

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


2
可以默认配置/使用sp_executesql吗?
我正在寻找对SQL Server使用高度动态sql查询的应用程序。查看以非常奇怪和复杂的方式构造的查询,但这是一个不同的故事,我告诉它有一个很好的理由使我无法(太愚蠢)自己发现问题……我看不到查询用换行的任何代码sp_executesql。 但是,当我跟踪时,可以看到很多查询都用包裹了sp_executesql。整个应用程序解决方案甚至根本不包含命令sp_executesql。 因此,我想知道是否存在某种我不知道的配置,该配置默认情况下会强制软件使用sp_executesql包装查询? 什么可能导致这种行为?


3
仅在执行备份时,还原标头的用途是什么?
当我使用以下查询监视备份时: SELECT command, percent_complete, 'elapsed' = total_elapsed_time / 60000.0, 'remaining' = estimated_completion_time / 60000.0 FROM sys.dm_exec_requests WHERE command like 'BACKUP%' or command like 'RESTORE%' 我注意到,在备份之前,SQL Server仅执行备份头,然后执行备份。 我想知道它的用途是什么,以及是否可以以某种方式减少执行时间。它似乎比实际备份需要更长的时间。

1
如何重现“由于数据移动,无法使用NOLOCK继续扫描”
我偶尔会遇到NOLOCK一些大型作业“确实由于数据移动而无法继续扫描”的情况,这些作业确实存在WITH (NOLOCK)于选择查询中。 我知道这与尝试在发生页面拆分时选择数据有关,这导致数据不再位于应有的位置-我认为这就是我的环境中发生的事情。 我将如何重现? 我试图做一个短期的变通办法来捕获错误并在发生这种情况时重试,但是如果无法重现它,我将无法对其进行测试。是否有合理可靠的方法引起这种情况? 当发生这种情况时,再次执行查询会成功-因此,我对实际数据或数据库永久损坏没有任何担心。查询中的某些表(以及它们的索引)经常被删除,重新创建和重新填充,因此我假设它与此相关。 删除NOLOCK是我要解决的长期问题。首先NOLOCK放在这里的原因是,查询是如此糟糕,以至于它们陷入日常事务的僵局中,因此NOLOCK,用于阻止僵局(工作正常)的创可贴也是如此。因此,在我们可以做一个永久性解​​决方案之前,我需要一个创可贴。 如果我可以用《 Hello World》来复制它,我计划在不到一个小时的时间内将创可贴打入工作。无法进行搜索和替换删除NOLOCK,因为我将再次开始遇到应用死锁,这对我来说比偶尔的失败工作更糟糕。 使用读取提交的快照隔离是一种很好的可能性-我将不得不与我们的数据库团队合作以获取有关该快照的更多详细信息。问题的一部分是,我们没有SQL Server专家来处理此类问题,而且我对隔离级别的理解不充分,无法立即进行更改。

4
SQL Server 2012的FIRST()和LAST()版本是什么?
我有一个带value栏的桌子。我要计算最后一行减去第一行,如下所示: id value 1 10 2 45 3 65 4 95 . . . . . . 500 200 我想获得 200 - 10 = 190 我试着然而,在SQL Server 2012中使用下面的命令,LAST并且FIRST不工作。 SELECT LAST(Value) - FIRST(Value) FROM Counter; SQL Server中此命令的语法是什么?

1
无论我尝试什么,都无法使SQLCMD工作
无论我做什么,我都无法使SQLCMD正常工作。我试图运行一个大小为200mb +的脚本,并且无法从sql服务器应用程序运行,因此我需要通过SQLCMD进行此操作,但是,每当我尝试登录或运行该脚本时,它都会立即关闭。 我已经通过msdn跟随了sqlcmd实用程序。 我试图通过可信任的命令SQLCMD -EI getooo它: Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Named Pipes Provider: Could not open a connection to SQL Server [2]. . Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Login timeout expired. Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : A …

1
sys.dm_exec_sessions中的“读取”列实际上指示什么?
这似乎是一个非常基本的问题,确实应该如此。但是,作为科学方法的忠实拥护者,我喜欢创建一个假设,然后对其进行检验以查看我是否正确。在这种情况下,我试图更好地理解的输出sys.dm_exec_sessions,更具体地说,是单列“读取”的输出。 SQL Server联机丛书相当干脆地将其指定为: 在此会话期间,由该会话中的请求执行的读取次数。不可为空。 一个人可能会认为这将指示自会话开始以来从磁盘读取的页数,以满足该会话发出的请求。这是我以为我会检验的假设。 该logical_reads表中的列定义为: 在会话上执行的逻辑读取数。不可为空。 从使用SQL Server的经验来看,我相信此列反映了从磁盘和内存读取的页面数。换句话说,页面的总数曾经由会话,无论这些页面驻留阅读。具有两个提供相似信息的独立列的差异或价值主张似乎是,对于特定会话,人们可以理解从磁盘读取的页面reads与从缓冲区高速缓存读取的页面的比率logical_reads。 在测试平台上,我创建了一个新数据库,创建了一个表,该表具有已知数量的数据页,然后在新会话中读取该表。然后,我sys.dm_exec_sessions查看了reads和logical_reads专栏对会议的看法。在这一点上,我对结果感到困惑。也许有人可以为我阐明这一点。 测试装备: USE master; IF EXISTS (SELECT 1 FROM sys.databases d WHERE d.name = 'TestReads') BEGIN ALTER DATABASE TestReads SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE TestReads; END GO CREATE DATABASE TestReads; GO ALTER DATABASE TestReads SET RECOVERY SIMPLE; BACKUP DATABASE …

3
应用程序查询空表
我公司使用的应用程序存在很大的性能问题。我正在研究数据库本身存在许多问题,但是许多问题纯粹与应用程序有关。 在调查中,我发现有数百万个查询命中SQL Server数据库,查询空表。我们大约有300个空表,其中一些表每分钟最多查询100-200次。这些表与我们的业务领域无关,实际上是原始应用程序的一部分,当我的公司与他们签约为我们提供软件解决方案时,供应商并未删除这些原始应用程序。 除了我们怀疑应用程序错误日志中充斥着与此问题相关的错误以外,供应商还向我们保证,应用程序或数据库服务器不会对性能或稳定性造成影响。错误日志泛滥成灾,以至于我们看不到价值超过2分钟的错误来进行诊断。 这些查询的实际成本显然会在CPU周期等方面很低。但是,谁能说出对SQL Server和应用程序有什么影响呢?我怀疑发送请求,确认请求,处理请求,返回请求以及确认应用程序已收到请求的实际机制本身会对性能产生影响。 我们将SQL Server 2008 R2,Oracle Weblogic 11g用于该应用程序。 @ Frisbee-长话短说,我创建了一个包含querytext的表,该表命中了应用程序数据库中的空表,然后对其查询以获取我知道为空的所有表名,并得到了很长的列表。考虑到该应用通常在上午8点至下午6点使用,因此在30天的正常运行时间中,执行次数最高的是270万次执行,因此这些数字更多地集中在运营时间。多个表,多个查询,可能有些通过联接释放,有些则没有。命中率最高(当时为270万)是从一个带有where子句,无联接的空表中进行的简单选择。我希望连接到空表的较大查询可能包括对链接表的更新,但是我将检查并尽快更新此问题。 更新:有1000个查询,执行计数在1043-4622614之间(超过2.5个月)。我将不得不挖掘更多信息以找出缓存计划的产生时间。这只是为了让您了解查询的范围。大多数都相当复杂,有20多个连接。 @ srutzky-是的,我相信会有一个与计划编制时间相关的日期栏,因此您将对此感兴趣,因此我将对其进行检查。我想知道,当SQL Server位于VMware群集上时,线程限制是否会成为一个因素?值得庆幸的是,即将成为专用的Dell PE 730xD。 @Frisbee-对不起,您的回复很晚。正如您所建议的,我使用SQLQueryStress在空表中对24个线程运行了10,000次select *(实际上是240,000次迭代),并立即达到10,000个批处理请求/秒。然后,我在24个线程中减少了1000次,并达到了4,000个批处理请求/秒以下。我还仅在12个线程上尝试了10,000次迭代(因此总共进行了120000次迭代),这产生了持续的6,505批/秒。实际上,对CPU的影响非常明显,在每次测试运行期间,约占CPU总使用量的5-10%。网络等待时间可以忽略不计(例如,工作站上的客户端需要3毫秒),但是对CPU的影响是肯定的,就我而言,这是非常确定的。这似乎归结为CPU使用率和一些不必要的数据库文件IO。每秒总执行次数约为3000次,这比生产中的要多,但是我只测试了数十个这样的查询之一。数百个查询以每分钟300-4000次之间的速率命中空表的最终结果在CPU时间方面不可忽略。所有测试都是针对具有双闪存阵列和256GB RAM,12个现代内核的空闲PE 730xD进行的。 @ srutzky-好主意。默认情况下,SQLQueryStress似乎使用连接池,但是无论如何,我发现,是的,连接池复选框已选中。更新以跟随 @ srutzky-应用程序上的连接池显然未启用-如果已启用,则无法使用。我进行了探查器跟踪,发现对于审计登录事件,连接具有EventSubClass“ 1-Nonpooled”。 RE:连接池-检查了weblogics,发现启用了连接池。针对活着的发现更多痕迹,发现池化迹象没有正确/根本没有: 这是当我对填充的表没有连接的情况下运行单个查询时的样子。异常显示为“与SQL Server建立连接时发生与网络有关或特定于实例的错误。找不到服务器或无法访问该服务器。请验证实例名称正确并且已将SQL Server配置为允许远程连接。 (提供程序:命名管道提供程序,错误:40-无法打开与SQL Server的连接)“请注意批处理请求计数器。在生成异常的时间内对服务器执行ping操作会成功执行ping响应。 更新-两次连续的测试运行,相同的工作量(select * fromEmptyTable),启用/未启用池。CPU使用率略高,故障很多,并且从未超过500个批处理请求/秒。测试显示10,000个批处理/秒,并且在启用池的情况下没有失败,大约400个批处理/秒,然后由于禁用了池而导致很多失败。我想知道这些故障是否与连接可用性不足有关? @srutzky-从sys.dm_exec_connections中选择Count(*); 启用池化:即使在负载测试停止后也始终保持37 禁用池化:11-37,具体取决于是否 在SQLQueryStress 上发生异常,即:当这些低谷出现在Batchs / sec图上时,在SQLQueryStress上发生异常,并且 连接数下降到11,然后逐渐恢复到37当批次开始达到高峰且未发生异常时。非常非常有趣。 两个测试/活动实例上的最大连接数设置为默认值0。 已经检查了应用程序日志并且找不到连接问题,但是由于错误的数量和大小(即:大量的堆栈跟踪错误),只有几分钟的可用日志记录可用。应用程序支持的一位同事建议,发生大量与连接有关的HTTP错误。似乎基于此,由于某种原因,应用程序无法正确地建立连接池,结果服务器反复耗尽连接。我将进一步研究应用日志。我想知道是否有办法从SQL Server方面证明这种情况正在生产中发生? @ …

1
用XQuery替换SQL Server中强类型xml元素的值
给定一个元素,在XML Schema Collection中定义如下: <xsd:element name="xid"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="32" /> </xsd:restriction> </xsd:simpleType> </xsd:element> 您将如何使用XQuery更新元素? 该元素位于模式集合的ns命名空间中。我一直在尝试通过以下查询更新元素: update cm.item set data.modify( 'declare namespace ns="http://www.anon.com"; replace value of (/ns:*/ns:xid)[1] with "X00011793" cast as element(ns{http://www.anon.com}:xid,#anonymous) ?') where id = 11793 但这会产生以下错误: 消息9301,级别16,状态1,第2行XQuery [cm.item.data.modify()]:在此版本的服务器中,“ cast as”不可用。请使用“投射为?” 句法。 如果我完全删除演员表并使用此查询: update cm.item set data.modify( 'declare namespace …

3
仅当过滤的部分位于JOIN而不是WHERE时才使用过滤的索引
我在下面创建了过滤索引,但是当我进一步向下运行2个查询时,该索引仅在JOIN中具有END_DTTM而不是where子句的第一个示例中用于查找(这是查询中的唯一区别) 。谁能解释为什么会这样? 索引创建 CREATE NONCLUSTERED INDEX [ix_PATIENT_LIST_BESPOKE_LIST_ID_includes] ON [dbo].[PATIENT_LIST_BESPOKE] ( [LIST_ID] ASC, [END_DTTM] ASC ) WHERE ([END_DTTM] IS NULL) 查询 DECLARE @LIST_ID INT = 3655 --This one seeks on the index SELECT PATIENT_LISTS.LIST_ID FROM DBO.PATIENT_LISTS LEFT JOIN DBO.PATIENT_LIST_BESPOKE ON PATIENT_LISTS.LIST_ID = PATIENT_LIST_BESPOKE.LIST_ID AND PATIENT_LIST_BESPOKE.END_DTTM IS NULL WHERE PATIENT_LISTS.LIST_ID = @LIST_ID …

3
SQL Server:以小块的形式更新巨大表上的字段:如何获取进度/状态?
我们有一个非常大的表(一亿行),我们需要在表上更新几个字段。 对于日志传送等,显然,我们也希望将其保持在很小的规模上。 下面会解决问题吗? 以及如何获取它以打印一些输出,以便我们可以看到进度?(我们尝试在其中添加PRINT语句,但在while循环期间未输出任何内容) 代码是: DECLARE @CHUNK_SIZE int SET @CHUNK_SIZE = 10000 UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = 0, deletedDate = '2000-01-01' where deleted is null or deletedDate is null WHILE @@ROWCOUNT > 0 BEGIN UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = 0, deletedDate = '2000-01-01' where deleted is null or …
10 sql-server  t-sql 

1
SQL Server数据文件夹访问权限
我做了全新的SQL Server 2014安装。接下来,我想附加以前的SQL Server 2012服务器中的一些数据库。我将所有mdf和ldf文件复制到数据目录,但是当我尝试附加它们时,出现以下错误消息: 尝试打开或创建物理文件 'D:\ SQLSERVERDATA \ MSSQL12.BIDEV \ MSSQL \ DATA \ controlling_demo.mdf'时,CREATE FILE遇到操作系统错误5(访问被拒绝)。 (Microsoft SQL Server,错误:5123) 当我检查文件安全性设置(右键单击文件,属性,安全性)时,它说我没有读取权限。我用来复制文件的帐户在Administrators组中。我可以完全控制该DATA文件夹,但是,仅复制到该文件夹的文件受到限制。 当我尝试在整个文件夹上重新应用安全权限时,它说: 无法枚举容器中的对象。访问被拒绝。 将文件复制到其他位置时,我具有访问权限。 问题是,如何获得文件DATA夹中这些文件的访问权限?

2
Windows 10上的SQL Server 2000
我需要在Windows 10上安装SQL Server MSDE 2000 SP4。 我还有其他运行Windows 7和8.1的计算机,SQL Server MSDE 2000正常运行(也配置了合并复制)。 现在,我在Windows 10上测试了相同的场景,但是安装在安装过程中意外关闭。 我知道此版本非常旧,但是是否有解决方法将其安装在Windows 10上?

2
基于时间戳的窗口偏移
我正在编写一个查询,该查询将用于分页社交Feed的结果。这个概念是移动应用程序将请求N个项目,并提供一个我在@CutoffTime下面称为的开始日期时间。截止时间的目的是确定何时应启动分页窗口。我们使用时间戳而不是行偏移量的原因是,即使添加了新的社交内容,时间戳也会使我们在获取较旧的帖子时从一致的位置进行分页。 由于社交Feed可以来自您自己或您的朋友,因此我使用UNION来合并这两个组的结果。最初,我尝试了TheQuery_CTE不使用的逻辑UNION,这太慢了。 这是我所做的(包括相关的表架构): CREATE TABLE [Content].[Photo] ( [PhotoId] INT NOT NULL PRIMARY KEY IDENTITY (1, 1), [Key] UNIQUEIDENTIFIER NOT NULL DEFAULT NEWID(), [FullResolutionUrl] NVARCHAR(255) NOT NULL, [Description] NVARCHAR(255) NULL, [Created] DATETIME2(2) NOT NULL DEFAULT SYSUTCDATETIME(), ); CREATE TABLE [Content].[UserPhotoAssociation] ( [PhotoId] INT NOT NULL, [UserId] INT NOT NULL, [ShowInSocialFeed] BIT …

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.