Questions tagged «sql-server-2012»

SQL Server 2012(主要版本11.00.xxxx)。还请标记sql-server。

3
TempDB中损坏的分区如何导致DBCC CHECKDB报告没有问题?
我们的SQL Server之一最近报告了以下错误: DATE/TIME: 2/25/2013 9:15:14 PM DESCRIPTION: No catalog entry found for partition ID 9079262474267394048 in database 2. The metadata is inconsistent. Run DBCC CHECKDB to check for a metadata corruption. 不到15分钟后,我连接到服务器并运行: SELECT name FROM sys.databases WHERE database_id = 2; 哪个返回'tempdb'。然后我跑了: DBCC CHECKDB ('tempdb') WITH NO_INFOMSGS, TABLERESULTS; 其中未返回任何结果,表明受影响的数据库没有问题。 数据库中的损坏如何导致上面的错误消息而又DBCC CHECKDB未报告问题?我假设页面校验和计算失败,导致该页面被标记为怀疑无法引用该页面的任何对象,但是我一定是错误的。 …

3
XML查询问题
我正在尝试生成SQL查询,以从以下SQL XML中获取“ DATE”值: 我已经尝试过类似的方法,但我认为我不了解这些概念。 select xConfig.value('(/SearchjobConfig/QueryString/SearchCriteria/ExpressionSet/SimpleAttributeExpression) [1]','nvarchar(max)') from Job 这是XML文本: <SearchJobConfig> <QueryID>1072</QueryID> <QueryString> <SearchCriteria name="Search query" > <ExpressionSet logicalOperator="AND"> <SimpleAttributeExpression displayName="Date" npmPropertyId="4" searchOperation="GREATER_EQUAL" dataType="string" caseSensitive="false">2019-06-01T04:00:00</SimpleAttributeExpression> <SimpleAttributeExpression displayName="Date" npmPropertyId="4" searchOperation="LESS_EQUAL" dataType="string" caseSensitive="false">2019-06-13T03:59:59</SimpleAttributeExpression> <SimpleAttributeExpression displayName="Class" npmPropertyId="1056" searchOperation="EQUALS" dataType="int32" caseSensitive="false">65</SimpleAttributeExpression> </ExpressionSet> </SearchCriteria> </QueryString> </SearchJobConfig> 预期的输出将是日期: 2019-06-01T04:00:00 2019-06-13T03:59:59 以及如何在同一行上获得结果。示例: date_val_start date_val_end 2019-06-01T04:00:00 2019-06-13T03:59:59 我正在使用SQL …

1
我是否需要“停机时间”来更新存储过程?(由于“定义更改”错误)
我一直以为更新存储过程是我在用户积极使用系统时可以做的事情。 但是我目前正在测试存储过程的更新,并且正在执行对sproc的长时间运行的调用(调用时已超过4分钟),因此我更新了sproc。(我打算在单独的窗口中尝试其他查询计划。) 当我回到长期运行的机器时,出现了以下错误: The definition of object 'MySprocName' has changed since it was compiled. 该错误似乎表明,如果更新了该存储过程的定义,则任何正在执行的存储过程都会失败。(我认为,一旦存储程序开始运行,尽管定义有所更改,它将在其余的运行中使用该计划。) 这是真的?我是否需要停机才能更新存储过程的定义?

2
SQL Server 2012 SP3的内存不足问题
我一直有周期性的SQL Server OOM错误,一次是SQL Server关闭自身,并总是在夜间发生,这时没人使用它,并且那时没有SQL Agent作业运行: 这是典型的错误: 08/17/2017 19:31:17,spid100,未知,资源池``内部''中没有足够的系统内存来运行此查询。 2017年8月17日19:31:17,spid100,未知,错误:701严重性:17状态:123。 2017年8月17日19:31:17,spid112,未知,错误:18056严重性:20状态:29.(Params :)。由于格式化期间出错,因此以简洁模式打印错误。跟踪ETW通知等已跳过。 这是服务器信息: 最小10 GB的SQL Server内存 最大21GB SQL Server内存 服务器上只有4个DB 它们的大小每个只有1到2 GB Tempdb的大小从未增长到超过1GB(设置为自动增长到10GB) 索引均为低碎片指数,统计信息已更新 版: Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) Oct 20 2015 15:36:27 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build …

4
SSRS和托管服务帐户-无法配置?
我们正在尝试将Reporting Services配置为使用托管服务帐户。环境是: 服务器:Windows 2008 R2 SP1报告服务:SQL Server 2012(版本11.0.6567.0) 当前,SSRS作为域服务帐户运行,但是我们希望更改为作为MSA运行。SQL Server实例和代理都已成功更改为使用MSA。 当我尝试通过Reporting Services配置管理器将服务帐户更改为MSA时,收到错误消息: Microsoft.ReportingServices.WmiProvider.WMIProviderException:帐户名无效。以domain \ alias形式指定一个帐户。 ---> System.Runtime.InteropServices.COMException(0x8004021D):来自HRESULT的异常:0x8004021D-内部异常堆栈跟踪的结尾--- Microsoft.ReportingServices.WmiProvider.RSWmiAdmin.ThrowOnError(ManagementBaseObject mo)在Microsoft.ReportingServices .WmiProvider.RSWmiAdmin.SetWindowsServiceIdentity(String accountName,SecureString password,Boolean useBuiltinAccount)at ReportServicesConfigUI.WMIProvider.RSReportServerAdmin.SetWindowsServiceIdentity(String accountName,SecureString password,Boolean useBuiltinAccount) 我的问题很简单: 是否有人成功将SSRS服务帐户更改为使用托管服务帐户?如果是这样,怎么办?

5
使用窗口功能优化子查询
由于我的性能调优技能似乎永远不足,我一直想知道是否可以针对某些查询执行更多优化。这个问题涉及的情况是嵌套在子查询中的Windowed MAX函数。 我正在挖掘的数据是在较大组的各个不同组上的一系列事务。我有4个重要字段,一个事务的唯一ID,一批事务的Group ID以及与相应的唯一事务或一组事务相关的日期。多数情况下,组日期与批次的最大唯一交易日期相匹配,但是有时会通过我们的系统进行手动调整,并且在捕获组交易日期之后会进行唯一日期操作。此手动编辑不会通过设计来调整组日期。 我在此查询中识别的是那些唯一日期落在组日期之后的记录。以下示例查询建立了与我的场景大致相当的内容,并且SELECT语句返回了我要查找的记录,但是,我是否以最有效的方式来实现此解决方案?在我的事实表加载期间,这需要花一些时间,因为我的记录计数前9位数字,但是主要是我对子查询的鄙视使我怀疑这里是否有更好的方法。我不太担心任何索引,因为我相信它们已经存在。我正在寻找的是一种替代查询方法,该方法可以实现相同的功能,但效率更高。欢迎任何反馈。 CREATE TABLE #Example ( UniqueID INT IDENTITY(1,1) , GroupID INT , GroupDate DATETIME , UniqueDate DATETIME ) CREATE CLUSTERED INDEX [CX_1] ON [#Example] ( [UniqueID] ASC ) SET NOCOUNT ON --Populate some test data DECLARE @i INT = 0, @j INT = 5, @UniqueDate DATETIME, …

1
自动更新统计信息不更新统计信息
我用SQL SERVER 2012我有我Auto Update Stats 对我的数据库。 从下面的链接中,我了解到,对于SQRT(1000 * Table rows)表行中的每个更改,自动更新统计信息都会触发。 https://blogs.msdn.microsoft.com/srgolla/2012/09/04/sql-server-statistics-explained/ 我创建了一个包含1000条记录的表 SELECT TOP 500 Row_number()OVER (ORDER BY (SELECT NULL)) rn, name INTO stst FROM sys.objects 建立统计资料 CREATE STATISTICS rn ON stst (rn) CREATE STATISTICS name ON stst (name) 检查创建的统计信息 DBCC show_statistics('stst', rn) -- Rows 500 DBCC show_statistics('stst', name) -- …


2
搜索谓词中的标量运算符
在SQL Server 2012中,我使用了实际查询的简化版本。从“容器”表中选择数据时,它在查找谓词中具有标量运算符。 标称运算符在此查找谓词中的用途是什么? CREATE TABLE #EligibleOrders (OrderID INT PRIMARY KEY, StatusCD CHAR(3), CreatedOnDate DATETIME ) --insert logic into #EligibleOrders --Final Query SELECT T2.OrderID ,olic.LineItemID, SUM(c.quantity) AS ShippedQty, COUNT(DISTINCT c.ContainerID) AS ShippedCases FROM #EligibleOrders T2 INNER JOIN dbo.OrderLineItemContainers (NOLOCK) AS olic ON olic.OrderID = T2.OrderID INNER JOIN dbo.Containers (NOLOCK) AS …

2
错误:“无法删除该证书,因为一个或多个实体使用该证书进行了签名或加密。”
我有一个要从数据库中删除的证书。 如果我发出命令 DROP CERTIFICATE <FooCert> 我得到错误 The certificate cannot be dropped because one or more entities are either signed or encrypted using it 根据Jason Strate的说法,我应该能够找出证书所签名的内容。 以下查询返回0行: SELECT OBJECT_SCHEMA_NAME(co.major_id) + '.' + OBJECT_NAME(co.major_id) FROM sys.certificates c INNER JOIN sys.crypt_properties co ON c.thumbprint = co.thumbprint WHERE co.crypt_type_desc = 'SIGNATURE BY CERTIFICATE' AND …

2
是否有T-SQL的标点符号等效项,例如[0-9]代表数字,[az]代表字母?
在T-SQL中是否存在[0-9]和[a-z]模式的等效项,可让我从包含标点的列中提取值? 例如: Create Table #Test ( Value VarChar(10) ) Insert Into #Test Values ('123a'), ('456b'), ('12ABC'),('AB!23'),('C?D789') Select * From #Test Where Value like '[0-9][0-9][0-9][a-z]' 这将返回值,其中前3个字符是介于0到9之间的数字,而最后一个字符将是介于a和z之间的字母,因此将返回123a,456b而不会返回12ABC。 我想知道标点符号是否等同于[0-9]数字和[a-z]字母,以便返回AB!23并返回C?D789? 如果我可以使用正则表达式,则可以使用该表达式^[a-zA-Z0-9]*$来匹配字符串中的字母数字字符。 Where Value like '^[a-zA-Z0-9]*$' 是否有等效的SQL? 我知道可以在RegEx中完成这种操作,但在T-SQL中需要它,因为我无法将任何自定义程序集加载到此服务器上,因此不能使用正则表达式。 实际列为varchar(200)。排序规则为Latin1_General_CI_AS。我正在使用SQL Server 2012 Standard Edition。

1
我应该禁用超线程
背景技术最近,我一直在研究一些相当长的CXPacket等待时间,这使我不得不使用SQL Sentry来密切监视处理器的活动。 结果,我注意到的一件事是我们在上下文切换中有大量的峰值。下面是一个5分钟的示例,但是这种模式在一天中非常普遍。 如您所见,它的峰值很规律。现在,我对此的理解使我相信这将是CPU压力的结果。但是在这段时间里,勉强能超过60%。 经过一些研究,这使我相信这是超线程的结果。我知道我之前已经读过超线程的一些危险。但是那是很久以前写的。 使长话短说。超线程是否可能是上下文切换中这种尖峰的罪魁祸首?上下文切换是否有可能对我的并行查询产生负面影响?我应该在我的环境中禁用超线程吗? 更新尽管此特定情况正在我的环境中发生,但其核心问题是更普遍的。高级别的上下文切换对并行查询有多大影响?超线程会导致这种问题吗? 最终,我在互联网上发现的大多数内容最终都表明超线程和SQL Server不是好朋友,但是大多数情况下,这些信息都是过时的。 我的系统有很多配置问题,因此在这里我将解决这些问题,以便将它们排除在外。我们在操作系统和生物级别上都具有性能的电源设置。我们的Maxdop设置为8,并行性的成本阈值为25。我们有32个逻辑内核和16个物理内核。同样,在大多数情况下,这也是数据仓库的负载情况。

3
如何在DateAdd()约束下的索引中改进视图中1行的估计
使用Microsoft SQL Server 2012(SP3)(KB3072779)-11.0.6020.0(X64)。 给定一个表和索引: create table [User].[Session] ( SessionId int identity(1, 1) not null primary key CreatedUtc datetime2(7) not null default sysutcdatetime()) ) create nonclustered index [IX_User_Session_CreatedUtc] on [User].[Session]([CreatedUtc]) include (SessionId) 以下每个查询的“实际行数”为3.1M,估计的行数显示为注释。 当这些查询在View中提供另一个查询时,由于1行估算,优化器选择循环连接。 如何在此基础上改进估计,以避免覆盖父查询联接提示或求助于SP? 使用硬编码日期非常有用: select distinct SessionId from [User].Session -- 2.9M (great) where CreatedUtc > '04/08/2015' -- but …

4
如何从存储过程完成之前获取响应?
我需要在完成之前从存储过程返回部分结果(作为简单选择)。 有可能这样做吗? 如果是,该怎么做? 如果没有,有什么解决方法? 编辑:我有该过程的几个部分。在第一部分中,我计算了几个字符串。我将在后面的过程中使用它们进行附加操作。问题是调用者需要尽快使用字符串。因此,我需要计算该字符串并将其传递回(以某种方式,例如通过选择),然后继续工作。调用方可以更快地获取其有价值的字符串。 呼叫者是一个Web服务。

2
缩小SQL Server事务日志
我目前必须处理已经失控的SQL Server事务日志。免责声明:我不是dba,这也不是我的专业领域,所以请多多包涵。 目前,我有一个用于500MB数据库的115GB事务日志文件,(很显然)一段时间以来,该日志文件的管理不善,使其处于此状态。 最重要的是在用尽之前回收此文件占用的磁盘空间!有人告诉我,增加驱动器的大小不是一种选择,即使是暂时的,并且根据过去的增长,我们需要尽快采取行动。 据我了解,最好的方法是使数据库处于完全恢复模式,但要定期备份日志文件,在一段时间内对其进行监视,并调整初始大小和增量以适应需要。很好 看到我们在午夜进行常规的完整数据库备份时,对我来说暂时将数据库置于“简单恢复模式”(在其中一种备份运行之后),收缩日志文件以收回(几乎所有)空间以及然后使用上述备份策略将其放回完全恢复中? 我的想法是,如果这段时间发生了一些事情,我们可以简单地还原完整备份,而无需使用日志。 更新 一些额外的细节,以回答一些答案和评论: 我们确实希望保留执行时间点还原的功能,因此数据库应保持完全恢复模式。 t-log文件变得如此之大的原因是它从未被备份过。验证为log_reuse_wait_desc返回“ LOG_BACKUP”。

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.