Questions tagged «sql-server-2014»

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

2
为什么在BIGINT col上进行此搜索具有额外的常量扫描,计算标量和嵌套循环运算符?
当我查看某些查询的实际执行计划时,我注意到WHERE子句中使用的文字常量显示为计算标量和常量扫描的嵌套链。 要重现此,我使用下表 CREATE TABLE Table1 ( [col1] [bigint] NOT NULL, [col2] [varchar](50) NULL, [col3] [char](200) NULL ) CREATE NONCLUSTERED INDEX IX_Table1 ON Table1 (col1 ASC) 其中包含一些数据: INSERT INTO Table1(col1) VALUES (1),(2),(3), (-9223372036854775808), (9223372036854775807), (2147483647),(-2147483648) 当我运行以下(废话)查询时: SELECT a.col1, a.col2 FROM Table1 a, Table1 b WHERE b.col1 > 2147483648 我看到它将在Index Seek和标量计算(根据常量)的结果中进行嵌套循环绘制。 请注意,文字大于maxint。它确实有助于写作CAST(2147483648 …

2
我可以从自引用(分层)表中获取树结构吗?
给定这样的层次表: CREATE TABLE [dbo].[btree] ( id INT PRIMARY KEY , parent_id INT REFERENCES [dbo].[btree] ([id]) , name NVARCHAR(20) ); 我想获得整个树结构。 例如,使用以下数据: INSERT INTO [btree] VALUES (1, null, '1 Root'); INSERT INTO [btree] VALUES (2, 1, '1.1 Group'); INSERT INTO [btree] VALUES (3, 1, '1.2 Group'); INSERT INTO [btree] VALUES (4, …

1
为什么EXEC语句的query_hash为零?
我正在使用扩展事件为SQL Server设置监视系统,以查找繁重的查询作为开发人员的“生产反馈”。我正在使用event sp_statement_completed和sql_statement_completed,并在cpu_time,逻辑读取等上使用谓词过滤器。我希望将结果聚合在一起,database_name并query_hash像在Internet上的众多示例中所展示的那样,但是在结果中,我看到query_hash所有语句的结果均为0使用EXEC,如下表所示(时间戳和queryhash缩短了可读性)。 name timestamp query_hash plan_handle statement sql_statement_completed 2016...6414 0 050056019600764... exec Shared.dbo.SyncFirm sql_statement_completed 2016...9946 0 06003d00e01e730... exec spSetUserAuth @userid; sql_statement_completed 2016...7184 0 0600e30028c9da0... exec spSetUserAuth @userid; sp_statement_completed 2016...0409 9826...578 0600c00028e6aa0... SELECT obfuscated_columns FROM dbo.SomeTable sp_statement_completed 2016...1448 8660...775 060084006d2d660... INSERT INTO dbo.SomeTable ( obfuscated_columns) EXEC(@sql) sql_statement_completed 2016...7752 0 0600f9006c23f03... …

1
AlwaysON从2014年迁移到2016年
我喜欢2014年的20个Listners,大约有500 DBS, 用最少的时间和精力来迁移这些文件的最佳方法是什么 我的想法是:停止访问备份数据库开始还原数据库运行还原时:在2014上删除AOG在2016上创建AOG完成 这似乎很简单,但是使用TB数据将需要一些时间。 已找到此-> 从2014年升级到2016年的AlwaysOn AG的推荐方法, 但是它确实解释了 希望有人能帮忙


1
从2014年升级到2016年的AlwaysOn AG的推荐方法
建议Availability Groups使用一个同步副本从SQL 2014 升级到2016 的建议过程是什么? 我的理解是,in-place升级并不是数据库专业人员真正喜欢的。有没有办法避免in-place升级Availability Groups?是否有可能将2016年服务器加入现有的2014年可用性组并在其中进行故障转移,然后“杀死”其他实例之一并对其进行升级?(例如,通过在同一主机上并排删除/重新安装SQL) 还有其他应考虑的升级方案吗? 理想的解决方案是我们始终有2个online副本,并且不需要进行任何in-place升级。


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
当您将表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)以这种方式构建工作台的主要好处是避免在使用过程中对生产工作台进行过多的工作。自然,如果我能够在登台表上重建索引并将重建的索引与表一起切换到生产索引,那会让我感到非常高兴。

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 …

2
SQL Server 2014突然减速/无插入/与硬件或索引无关
我正在350GBPC上运行约4000万行的数据库。 SQL服务器2014年,Win7的,AMD 8350 @ 4.8GHZ,16 GB的RAM和500 GB SSD(数据库托管在它自己的500 GB SSD,有一个吞吐量500MB / 500MB的读/写)。 数据库未更新,我只是在分析/读取它。与创建几个indexes,任何join,count(*)等等,只需要不到1分钟,这是确定我的目的。我一直在对数据运行一些查询(运行单个联接查询40-50次后,它变慢了),现在花了1分钟的调用仍在20分钟后运行。 我会密切注意系统资源,SSD当查询开始时我会看到踢进来,它读取20-30秒,然后121kB/second在接下来的20分钟读取。这不是CPU问题或磁盘问题。我的RAM数量有限,但是当我第一次加载数据库时,调用运行良好,现在,25分钟后没有任何运行。 实际上,我再也无法查询数据库,即使是一条基本SELECT语句,任何调用也要花费很长时间。我尝试重建索引并更新统计信息,但没有区别。 我对此没有很多经验,所以我的SQL查询很可能是不正确的,在这种情况下,我期望出现错误,或者它会以0个结果完成执行,但是都不会发生。 我想做的是在基于表ACALLS的时间之前的5秒钟内计数“ TypeID”的所有实例。 SELECT ACALLS.StartTime, ACALLS.Time, ACALLS.ServerIP, ACALLS.SRVR, ACALLS.calls, ACALLS.TOKEN, COUNT(TypeID) as ExecRate FROM ACALLS INNER JOIN MAINVIEW ON MainView.TimeStamp BETWEEN ACALLS.StartTime and DATEADD(ss,-5,ACALLS.StartTime) WHERE DATEPART(hour,MainView.TimeStamp) BETWEEN 10 and 13 and CAST(MainView.TimeStamp as date) = …

2
使用ADODB.SQL Server 2014的经典ASP连接(不带TLS 1.0)
由于以PCI合规性名义禁用了TLS 1.0,因此我无法使32位Classic ASP应用程序正常工作。 根据MS / Stack Exchange的建议,我已经安装了: SQL Server 2014 SP1 CU1 .NET Framework 4.6 这使我们的ASP.NET应用程序/ SSMS运行。但是我们使用ADODB.Connection对象的经典ASP应用程序无法正常工作。 我尝试了使用的连接字符串Provider=SQLNCLI11;,但这似乎也无济于事。共享内存提供程序仍在抱怨管道的另一端没有任何内容。错误信息: Microsoft SQL Server本机客户端11.0错误'80004005' 共享内存提供程序:管道的另一端没有进程。 我还尝试将命名管道与连接字符串一起使用,Provider=SQLNCLI11;Server=np:\\.\pipe\MSSQL$SQLEXPRESS\sql\query;Database=northwind;Trusted_Connection=Yes;并收到以下错误消息: Microsoft SQL Server本机客户端11.0错误'80004005' 命名管道提供者:管道的另一端没有进程。 我应该了解ADODB的补丁程序吗?我是否应该考虑以其他方式使用命名管道?(尽管对于TLS设置如何,为什么共享内存无法正常工作,我还是有些困惑) 评论更新: Web服务器和SQL Server在同一框中。 这是一个SQLExpress命名实例。启用TLS 1.0的连接字符串为: "Driver={SQL Server}; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes; Integrated_Security=True;" 我也尝试过: "Provider=SQLNCLI11; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes;" 禁用TLS 1.0后,两者均无效。我知道Trusted_Connection / Integrated_Security是多余的,但是弄乱这些似乎也无济于事。 我已切换了TCP和命名管道的启用,禁用和顺序。上面的连接字符串中使用的管道名称直接来自该实例的“服务器配置”。我还尝试禁用共享内存以确保命名管道正常运行。我还没有尝试过TCP(好像共享内存由于TLS而不能工作,为什么要使用TCP?)共享内存和命名管道都可以在启用TLS 1.0的情况下工作。一旦我翻转注册表项以禁用TLS …

2
将数据库移至新数据中心
我的公司正在将基础架构移至新的数据中心,我正在尝试找出使新服务器上的数据库与当前生产数据库保持同步的最佳方法,直到新环境准备就绪。我不是一名全职的DBA,而是进行了一些研究,从阅读的内容来看,跨国复制设置似乎可以最好地满足我们的需求。 一些细节:生产数据库的大小约为90 GB,使用Robocopy大约需要9个小时才能将其副本移至新服务器中。当前的生产数据库将需要保持联机状态,并且在整个迁移过程中都可以访问。它的恢复很简单,因此数据库镜像不可用。 事务复制是保持数据库同步的最佳方法吗? 我的计划: (完成)传输当前数据库并登录到新服务器,并将其附加到SQL Server的新实例 在我们的开发数据库计算机上设置分发服务器,然后从生产数据库中发布该分发服务器 在新的数据库计算机上创建一个订户,该订户将每晚每晚接受一次从分发服务器推出的更新 我有两件事。事务复制要求每个发布的表都有一个主键,生产数据库中的许多表都没有定义主键。我认为这不会成为太大的问题,因为我主要关心的只是同步数据库。我们将在以后的数据中测试使用数据库的不同应用程序,但我想确保它不是一个严重的问题。其次,是否还需要从原始实例(例如master)中移出任何关联的系统DB?我们将在新环境中迁移到Active Directory设置,因此我不在乎用户等,但是我不确定系统DB的必要性。 总体而言,我是否正确理解了这些概念?

2
我可以在多个磁盘上进行完整备份吗?
目前,我只有一个备份文件IMTDB.bak,它与数据库本身在同一HDD上。我想通过本质上将其“复制”到另一个磁盘来增加此数据库备份的冗余,但是出现错误“服务器备份失败,该介质被格式化为支持2个介质系列”。我认为这意味着在创建备份时,仅意味着将备份放在一个驱动器上,而我无法追溯地添加更多。我想将备份迁移到该其他驱动器(实际上只是将其复制过来),但是我不想删除当前备份来执行此操作。 我该怎么办?我仅将IMTDB.bak复制到另一个驱动器上的文件夹中是否安全?

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.