Questions tagged «sql-server»

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

4
SQL 2016 SQL Server声明:文件:<pageref.cpp>,行= 951失败声明
我目前正在将数据仓库从SQL 2012升级到SQL2016。新旧DW并行运行。 我的ETL流程(由第三方在SSIS中开发的框架)在2012年成功运行了两年多,但在2016年失败了。到目前为止,数据库和ETL流程是相同的。 这两个服务器都是在VMWare上运行的虚拟机。旧服务器是Win 2008,具有24Gb RAM。SQL 2012标准 最大内存设置为16Gb。新服务器是Win 2012,具有64Gb RAM。SQL 2016开发 最大内存设置为50Gb。新的DW正在运行v13.0.1601.5 RTM Developer Edition(64位)。 在运行我的ETL进程时,将SQL合并到维或事实表中的加载步骤失败,并出现以下错误。 全文: 描述:SQL Server声明:文件:,line = 951失败声明='IS_OFF(BUF_MINLOGGED,m_buf-&gt; bstat)|| pageModifyType!= PageModifyType_Contents || GetPagePtr()-&gt; IsTextPage()'。此错误可能与时序有关。如果重新运行该语句后错误仍然存​​在,请使用DBCC CHECKDB检查数据库的结构完整性,或者重新启动服务器以确保内存中的数据结构没有损坏。 按照建议,我已经运行DBCC,没有发现错误。我还重新启动了SQL。然后,我重新启动了ETL流程,并得到了相同的错误。 我对此错误的搜索显示,这是SQL 2008、2012和2014年的已知错误并已在后续的修补程序和累积更新中修复。因此,我很惊讶看到它在2016年重新出现。 我发现的链接说,如果数据库处于“简单”或“大容量日志记录”恢复模型中,则在尝试执行插入操作时会影响SSIS。(我正在以简单恢复模式运行) 建议的解决方法是将Db恢复模型更改为FULL。我已经尝试过了,并且可以正常工作,但这并不是数据仓库的解决方案。 其他人在2016年遇到过这个吗? 谁能建议替代解决方法? 更新: 2016年7月26日:我应用了重要更新KB3164398(v13.0.1708.0),问题仍然存在。 2016年7月27日:我已应用累积更新CU1 KB3164674(v13.0.2149.0)。 2016/3/8:在我们最小的立方体上,错误在一夜之间发生。CU1无法解决问题。今天,我报告了MS Connect上的错误,并且还与Microsoft记录了支持电话。 2016年12月8日:MS-Support最初做出了回应,但回应是“我们没有针对此问题的解决方案”。支持人员将与他的同事讨论该问题,并尽快与我联系。8天后,我没有收到他的消息。 尽管我没有“解决方案”,但我们确实找到了适合我们的解决方法。查看我发布的答案。 29/9/2016。我上周应用了CU2。在Thursay上,我们意外地运行了旧版本的合并,但由于相同的错误再次失败。所以.. CU2也没有修复它。 23/1/2017:我应用了2016 SP1 CU1,我相信这已经解决了问题。特别是KB3205964

2
有没有一种方法可以使此选择通过一次查找来检索相同的结果?
通过修改查询或影响优化器的策略,是否可以通过一次查找或扫描检索与以下相同的数据? 与此类似的代码和架构目前在SQL Server 2014中。 复制脚本。设定: USE tempdb; GO IF OBJECT_ID('dbo.TestUpload', 'U') IS NOT NULL DROP TABLE dbo.TestUpload; CREATE TABLE dbo.TestUpload( JobRunId bigint NOT NULL, ThingAName nvarchar(255) NOT NULL, ThingAType nvarchar(255) NOT NULL, ThingAGranularity nvarchar(255) NOT NULL, ThingBName nvarchar(255) NOT NULL, ThingBType nvarchar(255) NOT NULL, ThingBGranularity nvarchar(255) NOT NULL ); CREATE …

1
为什么要进行更多(以及数量不等的)逻辑读取并预读(预取)?
在我的SQL Server中创建tpch数据库后,我尝试了以下查询: set statistics io on DBCC DROPCLEANBUFFERS; select top 100 * from dbo.lineitem order by l_partkey; 表lineitem在l_partkey上具有非聚集索引。我多次发出上述查询,发现每次的逻辑读取都不同: Table 'lineitem'. Scan count 1, logical reads 1019, physical reads 4, read-ahead reads 1760, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'lineitem'. Scan count 1, logical …

1
当您将表A切换到表B时,索引数据也会被切换吗?
我目前有一个相当大的表(5-7百万行)。该表由一个过程定期重建,该过程将数据构建到登台表中,然后使用该ALTER TABLE .. SWITCH TO ..语句将数据切换到生产表中。 例: BEGIN TRAN; -- Rebuild indexes ALTER INDEX IX_NC_GroupEvent_staging_GroupName on [dbo].[GroupEvent_staging] REBUILD; ALTER INDEX IX_NC_GroupEvent_staging_Created ON [dbo].[GroupEvent_staging] REBUILD; -- Empty production table TRUNCATE TABLE [dbo].[GroupEvent]; -- Switch data from staging-table into production table ALTER TABLE [dbo].[GroupEvent_staging] SWITCH TO [dbo].[GroupEvent] COMMIT; 执行此操作时,索引(或索引数据,如果您愿意)的当前状态是否也被切换?我要问的原因有两个: 1)为了执行一条SWITCH TO语句,要求源表和目标表都必须包含相同的索引。这使我相信索引数据也可能会切换,但是我不知道如何验证这一点。 2)以这种方式构建工作台的主要好处是避免在使用过程中对生产工作台进行过多的工作。自然,如果我能够在登台表上重建索引并将重建的索引与表一起切换到生产索引,那会让我感到非常高兴。

2
错误:“无法删除该证书,因为一个或多个实体使用该证书进行了签名或加密。”
我有一个要从数据库中删除的证书。 如果我发出命令 DROP CERTIFICATE &lt;FooCert&gt; 我得到错误 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
升级到2016年后,SQL Server代理无法连接到实例
在具有SQL Server 2014 Enterprise的群集Windows 2012 R2服务器上。 刚刚将实例从2014 SP1 CU4升级到2016 RTM,现在在尝试启动SQL Server代理时收到此错误。 SQL服务器代理日志 2016-06-06 11:53:58 - ? [100] Microsoft SQLServerAgent version 13.0.1601.5 (X64 unicode retail build) : Process ID 10884 2016-06-06 11:53:58 - ? [495] The SQL Server Agent startup service account is DOMAIN\USERNAME. 2016-06-06 11:54:28 - ! [150] SQL Server …

2
扩展事件与SQL审核-性能影响
我想在数据库上设置一个审计跟踪类型的系统,以监视UPDATE/INSERT活动非常活跃的特定表上的语句。我面前有两个选择:使用SQL Server内置的Audit系统或使用扩展事件。 由于SQL Server审核在内部使用扩展事件,因此我假设直接使用审核而不是扩展事件会产生某种开销。 我有什么办法可以做一些测试来分析哪个系统对服务器的影响更大?如果我知道创建任何XE会话时实际发生的情况,它将有助于我分析对服务器的影响。 我们考虑了触发器,但由于开销而忽略了该选项。但这只是基于Internet上的信息而决定的。

2
多个存储过程中的相同代码
我最近加入一家公司,我只是注意到许多存储过程在整个过程中都重复了相同的代码部分。我注意到了,因为我的任务是在每个发生的SP中更改该代码的一小部分:) 这是相当庞大的代码块,大约30行。该代码是插入语句的一部分,它基本上将4个表连接在一起,而WHERE/AND条件实际上并没有真正从SP变为SP。它看起来类似于以下内容: ... ... FROM &lt;TableOne&gt; INNER JOIN &lt;TableTwo&gt; ON ... AND ..... AND ..... LEFT JOIN &lt;TableThree&gt; ON ... AND ..... AND ..... WHERE ..... AND ..... AND ..... AND MedicalPlanCode IN ('abc', 'def', 'ghi') 从SP更改为SP的唯一部分是值(“ abc”,“ def”,“ ghi”) 这些值的数量也可以不同,因此某些SP的值为2,其他SP的值为5,等等。 我想到的所有内容都将那部分代码更改为动态SQL,但不确定是否值得。但是,我里面的程序员讨厌这种情况。 我应该尝试实现某种形式的代码重用吗?有投资回报率吗?我有什么选择?我不得不经历大约100个存储过程,这花了大约一个小时。 100个SP分布在20个左右的不同数据库中。我确实具有创建视图的权限。

2
用主键创建一个“ INTO”表
也许对于这个社区来说,我的问题很容易,但是对我(一个简单的Java程序员)来说,这是一个大问题。 我有一个越来越多的数据的大数据库。因此,外部数据库管理员创建了一个作业,该作业在临时表中向我显示所需的数据。但是他创建的表没有主键,当我的java项目去读取该表时,出现错误。 我无法读取此表,因为主键不存在。 我可以在不更改此复杂过程结构的情况下在过程中插入创建自动增量主键的可能性吗? 这是存储过程代码的开头: USE [MYDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER Procedure [dbo].[spSchedula_Scadenzario] as begin drop table MYDB.dbo.tmpTable select aa.* into MYDB.dbo.tmpTable from (...) 提前致谢

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
CMS服务器列表中的区分大小写排序
我必须相信这是有原因的,但是对于我的一生,我无法弄清楚。看起来任何中央管理服务器中服务器名称的排序都是大小写敏感的,而不管充当CMS本身的服务器的排序规则。 随附的示例是在我的本地计算机上托管的CMS的示例,该服务器使用SQL_Latin1_General_CP1_CI_AS的服务器排序规则进行配置。CI表示不区分大小写。从包含CMS对象的系统表中选择时,将返回正确的顺序,但是,如您在此屏幕快照中所见,在UI中列出服务器的方式很明显,该顺序以区分大小写的方式处理。 由于它似乎与服务器级别无关,因此我认为它与客户端工具有关,但是我在工具中没有地方可以确定会影响此规则的排序规则级别(甚至区分大小写的设置)。 显然,这个问题没有什么关键性的,但是如果有人确实知道如何强制UI不区分大小写,那么我将不胜感激,因为我喜欢Camel Case我的服务器名称,该名称已被取消订购。

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


3
一个用户对sys.schemas和sys.synonyms的查询运行非常慢
方案:SQL Server 2014(v12.0.4100.1) .NET服务运行以下查询: SELECT name, base_object_name FROM sys.synonyms WHERE schema_id IN (SELECT schema_id FROM sys.schemas WHERE name = N'XXXX') ORDER BY name ...返回约6500行,但通常会在3分钟后超时。的XXXX上面是不 “DBO”。 如果我以UserA身份在SSMS中运行此查询,则查询将在不到一秒钟的时间内返回。 当以UserB身份运行(这是.NET服务的连接方式)时,查询需要3到6 分钟的时间,并且整个时间的CPU%占25%(4核)。 UserA是sysadmin角色中的域登录名。 UserB是具有以下内容的SQL登录名: EXEC sp_addrolemember N'db_datareader', N'UserB' EXEC sp_addrolemember N'db_datawriter', N'UserB' EXEC sp_addrolemember N'db_ddladmin', N'UserB' GRANT EXECUTE TO [UserB] GRANT CREATE SCHEMA TO …

1
在这种情况下,表变量如何提高查询性能?
对于这种特定情况,我将在下面尝试说明,使用表变量比不使用表变量要好。 我想知道为什么,如果可能的话,摆脱表变量。 这是使用表变量的查询: USE [BISource_UAT] GO set statistics io on SET STATISTICS TIME ON SET NOCOUNT ON; DECLARE @OrderStartDate DATETIME = '15-feb-2015' DECLARE @OrderEndDate DATETIME = '28-feb-2016' DECLARE @tmp TABLE ( strBxOrderNo VARCHAR(20) ,sintReturnId INT ) INSERT INTO @tmp SELECT strBxOrderNo ,sintReturnId FROM TABLEBACKUPS.dbo.tblBReturnHistory rh WHERE rh.sintReturnStatusId in ( 3 …

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.