Questions tagged «sql-server»

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

1
请求使用SQL Server进行慢速DELETE的说明
我想对SQL Server删除行为获得一些额外的见解/理由。我们有一个相当大的数据库,超过1800 GB。 在其中有一些非常浅的表(只有几个整数列),具有数百万行。当我们从这些浅表中删除10,000行时,删除查询通常非常快(最多几秒钟)。 我们还有一个表,其中的类型字段image存储平均100 KB的图像。当我们仅从该表中删除几千行时,则需要一分钟多的时间。 尽管区别很明显(删除了更多的按大小分配的数据),但我还是渴望了解更多有关SQL Server内部发生的情况。这样我才能更好地理解后者的删除速度要慢得多。 谁能给我一些启示?

1
为什么UNPIVOT在兼容级别80 DB上工作?
我正在尝试在兼容级别80上运行的SQL Server 2008 SP3数据库上使用UNPIVOT提取数据。这应该意味着UNPIVOT无法正常工作,但在某些情况下,它确实可以正常工作... 作品: 形式的独立SELECT查询: SELECT...FROM...UNPIVOT...WHERE...GROUP BY 不起作用: 同一查询,位于LEFT JOIN ()同一服务器内不同数据库的其他表上。全部处于兼容级别80。 我收到通常的错误消息: Msg 325, Level 15, State 1, Line 165 Incorrect syntax near 'UNPIVOT'. You may need to set the compatibility level of the current database to a higher value to enable this feature. See help for the SET …

2
使用COALESCE(…)优化子查询的选择
我在应用程序中使用的视图很大。我认为我已经缩小了性能问题,但是不确定如何解决。视图的简化版本如下所示: SELECT ISNULL(SEId + '-' + PEId, '0-0') AS Id, *, DATEADD(minute, Duration, EventTime) AS EventEndTime FROM ( SELECT se.SEId, pe.PEId, COALESCE(pe.StaffName, se.StaffName) AS StaffName, -- << Problem! COALESCE(pe.EventTime, se.EventTime) AS EventTime, COALESCE(pe.EventType, se.EventType) AS EventType, COALESCE(pe.Duration, se.Duration) AS Duration, COALESCE(pe.Data, se.Data) AS Data, COALESCE(pe.Field, se.Field) AS Field, pe.ThisThing, se.OtherThing …

2
为所有用户创建的数据库设置简单的恢复模式并收缩日志文件
希望您能指出正确的方向。我不是T-SQL的经常用户,但是我做了一些Google搜索,并在下面找到了脚本。我纠正了一下脚本。 我希望脚本执行以下操作: 选择除系统数据库之外的所有数据库。 要将恢复设置为简单。 收缩每个db(.ldf)的日志文件,系统db除外 剧本: USE MASTER declare @isql varchar(2000), @dbname varchar(64) declare c1 cursor for select name from master..sysdatabases where name not in ('master','model','msdb','tempdb','ReportServer','ReportServerTempDB') open c1 fetch next from c1 into @dbname While @@fetch_status <> -1 begin select @isql = 'ALTER DATABASE @dbname SET RECOVERY SIMPLE' select @isql …

2
在计算字段上创建索引:字符串或二进制数据将被截断
我有一个Foo包含以下字段的表: ID bigint not null identity(1,1), SerializedValue nvarchar(max), LongValue as TRY_CAST(SerializedValue as bigint) 现在,我想在LongValue上创建一个索引,以便可以轻松地查找表示数字的序列化值。 create nonclustered index IX_Foo on Foo(LongValue); 这会向我吐出以下错误: 字符串或二进制数据将被截断。 是的,SerializedValue中有现有数据。但是,祈祷可以通过在计算字段上创建索引来截断什么呢?

3
如何创建具有相同约束和索引的新表?
我正在创建一个具有主键约束和该表中的非聚集索引的新表。 我知道,我想创建另一个具有相同结构和值以及键和索引的表。 create table Dummy (id integer ,name varchar(20),salary integer Constraint PK_Con_id primary key(id)) insert into Dummy values(11,'AAA',1000); insert into Dummy values(12,'BBB',2000); insert into Dummy values(13,'CCC',3000); insert into Dummy values(14,'DDD',4000); select * from Dummy; create nonclustered index IX_Name on Dummy(Name) 现在,我正在创建Dmy表,但是“键和约束”未反映Dmy在SQL Server 2008 R2的表中。 SELECT * INTO Dmy FROM Dummy

5
SQL Server 2012永远在线备份,完全备份与仅复制
我需要快速说明仅复制备份还是完全备份,因为它与事务日志编号和还原有关(如果需要)。 我有始终打开多个数据库的SQL Server 2012安装程序。可用性组是使用副本上的首选备份设置的。 副本上只能进行仅复制和事务日志备份。这是否意味着如果需要还原事务日志,则需要在主数据库上进行完整备份吗? 谢谢

2
间歇性RESOURCE_SEMAPHORE_QUERY_COMPILE等待统计
我正在尝试解决一些生产SQL Server上出现的间歇性CPU高峰问题。我们正在运行具有28 GB RAM和4个CPU内核的SQL Server 2008 R2标准版。发生这种情况时,我们注意到大量的RESOURCE_SEMAPHORE_QUERY_COMPILER等待,持续约一两分钟,然后停止,然后CPU使用率恢复正常。 经过研究后,我了解到这通常是由于编译了许多不可重用的执行计划而引起的,我们目前正在对应用程序进行更改以解决该问题。 由于内存压力,计划缓存逐出也会触发此行为吗?如果是这样,我将如何检查?我正在尝试查看是否有可以做的短期补救措施,例如升级服务器RAM,直到我们部署应用程序修补程序为止。我能想到的唯一其他短期选择是将某些最繁忙的数据库移至其他服务器。

9
数据库为只读或具有只读文件,因此无法升级。使数据库或文件可写,然后重新运行恢复
我已经收到一个数据库文件,有关加载该文件的说明是安装SQL Server 2005,然后使用SQL Server Management Studio将其附加。 安装完所有内容后,我尝试附加MDF文件,但是它告诉我: 文件“ D:{folderName} {filename} .LDF”的目录查找失败,并出现操作系统错误21(未找到错误) LDF文件未随数据库一起提供,因此大概应该自动生成它。 现在,D驱动器是我的CD驱动器所在的位置,因此它无法在其中找到任何内容。尝试在此创建任何东西也不会有任何运气。 为什么要尝试在特定路径下查找日志文件?为什么不在数据库文件所在的位置? 如何附加此数据库? 我意识到,当我选择要附加的数据库时,“数据库详细信息”下将出现三个条目。MDF,NDF和LDF。LDF的“当前文件路径”指向上面的D驱动器路径,因此我将其删除。 这次,当我点击“确定”时,我得到了另一个错误消息: 数据库为只读或具有只读文件,因此无法升级。 使数据库或文件可写,然后重新运行恢复。 文件激活失败。物理名称D:{文件夹} {文件} .LDF可能不正确。 新的日志文件“ ...”已创建。(Microsoft SQL Server,错误:3415) 因此,现在它在与数据库文件相同的文件夹中创建一个新的日志文件,这很好,但是似乎存在安全问题。 附加信息: 这些说明要求我使用登录名“ sa”,它似乎是sysadmin帐户。我使用该登录名连接到我的SQL Server实例。 我检查了它不是只读的文件属性。该目录也不是只读的。允许所有ACL。 我无法附加数据库。当我尝试附加它时,它会引发一条错误消息“附加数据库失败”。 关闭SSMS并以管理员身份重新打开它没有影响。 select SERVERPROPERTY('ProductVersion')返回9.00.4035.00。数据库中还有一个名为“ dbdata.ini”的文件,该文件的内容为“ IsSql2000 = 1”,因此大概是要在SQL Server 2000中加载的。我看看是否可以在2000年使用它。

3
SQL Server错误“对OLE DB提供程序'Microsoft.ACE.OLEDB.12.0'的临时访问”的帮助
因此,我们遇到了一个有趣的问题,即用户试图在SQL Server 2008 R2中查询视图时收到以下错误: 消息7415,级别16,状态1,行1对OLE DB提供程序'Microsoft.ACE.OLEDB.12.0'的临时访问已被拒绝。您必须通过链接服务器访问此提供程序。 研究此问题后,我发现了很多文章,列出了对OPENROWSET参数进行更改,注册表值更改,AdHoc DI分布式查询等的内容。(链接到下面的文章) http://www.johnsoer.com/blog/?p=538 http://www.remotedbaexperts.com/Blog/dba_tips/2010/09/ad-hoc-access-to-ole-db-provider-microsoft-ace-oledb-12-0-has-been-denied/ 按照上述链接中的步骤操作后,我们仍然会收到错误消息。 需要注意的是,当我们创建一个测试帐户并给它一个sa时-它运行得很好。我的具有管理员访问权限的同事也可以毫无问题地运行查询。 该查询是从托管该实例的服务器的本地excel文件中获取的。 有人知道2008年有其他修复程序吗?

1
频繁的“随机” SQL Server连接超时
在过去的几天中,我们的客户一直在间歇性地与我们的数据库服务器建立连接超时。 同一页面上的多次Ajax调用多次连接到服务器,成功与失败混合在一起,有时特定的网站用户遇到连接问题,而其他用户则来自同一站点。 我不确定问题是否出在数据库或服务器本身上,但是我们可能在同一服务器上存在与其他数据库的连接问题。 该服务器是运行Windows Server 2008 RC的Amazon Cloud VPC,SQL Server的版本是SQL Server 2008 R2。如果需要,我可以提供更多信息。 有人可以给我任何有关如何调试它的提示吗?也许有几种方法可以测试连接? 非常感谢。



2
SQL Server性能:PREEMPTIVE_OS_DELETESECURITYCONTEXT主导等待类型
我昨天接到一个客户的电话,该客户抱怨他们的SQL Server上的CPU使用率过高。我们正在使用SQL Server 2012 64位SE。服务器正在运行Windows Server 2008 R2 Standard,2.20 GHz Intel Xeon(4核),16 GB RAM。 在确定罪魁祸首实际上是SQL Server之后,我在这里使用DMV查询在顶部等待实例。前两个等待是:(1)PREEMPTIVE_OS_DELETESECURITYCONTEXT和(2)SOS_SCHEDULER_YIELD。 编辑:这是“最等待查询”的结果(尽管有人违反了我的意愿今天早晨重新启动了服务器): 我们进行了大量的计算/转换,所以我可以理解SOS_SCHEDULER_YIELD。但是,我很好奇PREEMPTIVE_OS_DELETESECURITYCONTEXT等待类型以及为什么它可能是最高的。 最好的说明/讨论,我可以找到这个等待类型,可以发现在这里。它提到: PREEMPTIVE_OS_等待类型是离开数据库引擎的调用,通常是对Win32 API的调用,它们正在SQL Server外部执行代码以执行各种任务。在这种情况下,它将删除以前用于远程资源访问的安全上下文。相关的API实际上被命名为DeleteSecurityContext() 据我所知,我们没有任何外部资源,例如链接服务器或文件表。而且,我们不进行任何模拟操作,等等。备份是否可能导致备份激增或域控制器出现故障? 到底什么会导致这成为主要的等待类型?如何进一步跟踪此等待类型? 编辑2:我检查了Windows安全日志的内容。我看到了一些可能感兴趣的条目,但不确定这些是否正常: Special privileges assigned to new logon. Subject: Security ID: NT SERVICE\MSSQLServerOLAPService Account Name: MSSQLServerOLAPService Account Domain: NT Service Logon ID: 0x3143c Privileges: SeImpersonatePrivilege Special privileges …

2
与SQL Server中的派生表相比,使用临时表是否有优势?
我读到派生表比临时表具有更好的性能,但是无论如何,许多SQL Server开发人员都喜欢第二个表。为什么?我必须对大数据(数百万条记录)进行查询,并且我想确保使用的是最佳选择。 CREATE TABLE A( id BIGINT IDENTITY(1,1) NOT NULL, field1 INT NOT NULL, field2 VARCHAR(50) NULL, ); CREATE TABLE B( id INT IDENTITY(1,1) NOT NULL, field1 VARCHAR(10) NULL, field2 INT NULL ); INSERT INTO A (field1,field2) VALUES (1,'a'),(2,'b'),(3,'c'),(2,'d'),(5,'e'), (6,'f'),(7,'g'),(8,'h'),(9,'i'),(2,'j'); INSERT INTO B (field1,field2) VALUES ('a',1),('b',2),('c',3),('d',4),('e',5), ('f',6),('g',7),('h',8),('i',9),('j',2),('k',3); DECLARE @begin INT=0,@end …

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.