Questions tagged «sql-server»

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

2
增加的RAM,性能更差
设定: Windows Server 2008 R2 SQL Server 2008 R2 SP1 240GB RAM TempDB是8x16GB数据文件,没有自动增长(总共128GB) 物理/独立服务器 该服务器用于ETL处理。我们刚刚在此服务器上安装了更多RAM,总共有240GB RAM。SQL Server服务是唯一可运行的东西。 内存在BIOS,OpenManage和Windows中显示正常。 如果我将SQL Server配置为使用最小/最大70 / 100GB内存,则没有问题。但是,一旦将其增加到120 / 150GB,则在运行我们的ETL进程之一时会出现以下错误: 无法为数据库“ tempdb”中的对象“ <临时系统对象:422234507706368>”分配空间,因为“ PRIMARY”文件组已满。通过删除不需要的文件,在文件组中删除对象,向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。(消息1105,状态2,过程未知,第1行) 在更改内存配置之前,我们从未遇到过此问题。重新配置回原始的70 / 100GB后,我们不会收到此错误。 我尝试过的事情: 将TempDB数据文件设置为自动增长。这只会导致文件自动增长,直到达到磁盘容量,然后失败。 添加更多的TempDB数据文件。与显示的错误相同。 将TempDB的大小增加到8x32GB(总共256GB) 我对可能导致此问题的原因不知所措。

5
高效地过滤带析取的大集合
假设我只有一张桌子 CREATE TABLE Ticket ( TicketId int NOT NULL, InsertDateTime datetime NOT NULL, SiteId int NOT NULL, StatusId tinyint NOT NULL, AssignedId int NULL, ReportedById int NOT NULL, CategoryId int NULL ); 在此示例中TicketId是主键。 我希望用户能够针对此表创建“部分即席”查询。我之所以说是部分原因是因为查询的某些部分将始终固定: 该查询将始终对 InsertDateTime 查询将始终 ORDER BY InsertDateTime DESC 查询将分页结果 用户可以选择对其他任何列进行过滤。它们可以过滤一个,一个或多个。并且对于每个列,用户可以从一组值中进行选择,这些值将被用作析取。例如: SELECT TicketId FROM ( SELECT TicketId, ROW_NUMBER() …

2
在什么时候索引有效
我发现很多资源都提到向表中添加索引可以加快搜索速度,并降低插入速度,但前提是表很大。这会产生一个折衷,这是一个设计决定,但是应该有一个近似的表大小,然后才可以使用索引。(例如,十行可能低于该限制) 是否有人知道此限制在哪里,或者知道有什么资源可以向我指出正确的方向?

2
SQL Server作业中的事务和try-catch
在SQL Server作业的每个步骤中,我们都有DML操作。为了确保更新/插入的情况下将回滚不顺心的事,我已经包裹的数据修改的每一步中TRY CATCH和TRANSACTION块: BEGIN TRY BEGIN TRANSACTION [[INSERT/update statements]] ... IF @@TRANCOUNT > 0 BEGIN COMMIT TRANSACTION PRINT 'Successful.' END END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage IF @@TRANCOUNT > 0 BEGIN ROLLBACK TRANSACTION …

3
SQL Server泄漏的事务
我有一个大约50个客户端通过TCP的TDS访问的数据库,该数据库似乎没有释放日志空间。进程的数量保持在预期的50左右,其中一些进程的寿命很长(> 120天)。 现在,数据库的日志空间为40 gb(仅包含14 gb数据),空闲空间为39 gb。由于驱动器上的空间限制,我想缩小到更合理的大小(10gb-ish)。当我执行时DBCC SHRINKFILE('db_log', 10000),它返回一个错误,表示正在使用日志末尾。 为了释放对日志结尾的访问,我尝试通过以下方式将数据库置于单用户模式: ALTER DATABASE db SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO ALTER DATABASE db SET MULTI_USER GO 但脚本返回的消息重复了数百次: Nonqualified transactions are being rolled back. Estimated rollback completion: 100%. 这使我相信,在某个地方,我没有进行某些事务。我不知道有什么过程会故意一次打开这么多交易,因此我认为它们必须随着时间的推移而积累,永远不要关闭。 问题:如何找到有问题的进程或脚本,或者为什么不发布日志? sys.dm_tran_active_transactions显示了合理的18笔交易,目的可以理解。 sp_who仅显示我知道的过程。 SQL Server版本: Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) …

2
案例与虚无与融合
我正在阅读SQL Server 2012考试的文档,发现了以下几点: 案例与虚无与融合 现在,我知道如何使用每个,但不知道何时使用。请可以澄清一下。谢谢。 附言 请给我们一个考试题标签吗?

2
SQL Server文件表文档属性
我正在使用SQL Server 2012的Filetable来存储文档并使用Semantic Search进行搜索。 我想知道是否有办法列出所有文档属性(元数据)。有一种方法可以让“全文搜索”建立索引并搜索文档属性。我可以使用以下语句列出SQL Server索引的属性: SELECT * FROM sys.registered_search_properties; 我也可以使用SQL或使用程序来扩展此列表。 我没有找到列出实际信息的方法。我正在寻找的是一个像这样的列表: 作者:Ruud van de Beeten 标题: 测试文件 自定义属性:自定义值 谁能指出我正确的方向? 编辑:Bob Beauchemin创建了一张票,描述了我的问题。由于DMV未列出属性值,因此无法在项目中使用它。 我最终使用C#列出了OleDocumentProperties对象的自定义属性。该对象可以从Office文档中读取属性。我将继续关注这个问题,以期寻求更好的解决方案。

1
可用性组可以提供无缝的故障转移(没有查询失败)吗?
我一直在测试SQL Server 2012中的“可用性组”功能,发现主服务器故障转移到辅助服务器时大约有15秒的停机时间。在此期间执行的所有SQL查询都将失败,直到完成故障转移转换为止。 有什么办法可以将其降低到0秒并防止在故障转移过渡期间查询失败? 换句话说,是否有一种方法可以使故障期间运行的所有查询都重定向到主服务器而不是失败...,并且有任何方法可以使新的数据库连接立即连接到辅助服务器,而不会失败在故障转移过渡期间连接? 我目前在可用性组中设置了2台服务器。

3
恢复备份失败-无法将文件'Db'恢复到'{…} .mdf'。使用WITH MOVE标识文件的有效位置
我在从客户收到的备份文件上尝试使用restore命令进行还原时遇到以下错误。 从磁盘还原数据库SFDB = N'C:\ Backup \ Backup.bak' 我有什么想法可以纠正这个问题?它正在寻找mdf,所以我可以假定我拥有的备份文件是增量备份,而不是完整备份,这就是为什么它在寻找mdf? 我不确定1)他们是否提供了所有数据(整个数据库),或者2)我是否拥有正确的数据-我可以使用正确的T-SQL命令进行还原-我只是不知道该怎么做。 感谢帮助。 Msg 5133, Level 16, State 1, Line 2 Directory lookup for the file "D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Db.mdf" failed with the operating system error 21(failed to retrieve text for this error. Reason: 15105). Msg 3156, Level 16, State 3, Line 2 …

2
如何编写引用链接服务器的可移植SQL?
我有一个引用链接服务器的存储过程。在整个过程的几个地方,我都有类似以下内容: INSERT INTO [TableName] (...Columns...) SELECT ...Columns... FROM [ServerName\InstanceName].[Catalogue].[dbo].[TableName] WHERE TableNameID = @TableNameID 此过程存在于我的开发环境,测试环境和实时环境中。 问题在于该过程的每个副本都略有不同,因为每个环境的服务器名称都不同。这使得管理脚本更新的部署很麻烦。 有没有办法使该过程具有可移植性,以便每个环境都可以运行该过程的相同版本? 如果没有,我是否可以做些什么来使脚本部署不易出现错误/错误?

4
什么可以加快SQL计数查询的速度?
在进行计数(总计)SQL查询时,什么可以加快这3个数据库系统的执行时间?我敢肯定,有很多事情可以加快它的速度(硬件就是其中之一),但是我只是DBA的新手,所以我确定我会在这里得到一些答案。我将大约1.57亿行迁移到了SQL Server数据库,而这种查询将永远持续下去。但是在我的源Netezza数据库中,它需要几秒钟。 例如: Netezza 6: SELECT COUNT(*) FROM DATABASENAME..MYTABLE Oracle 11g: SELECT COUNT(*) FROM MYTABLE SQL Server 2012: SELECT COUNT(*) FROM DATABASENAME.[dbo].[MYTABLE]

1
在SSD上将SQL Server 2012中的tempdb,mdf和ldf文件最佳放置?
我意识到这可能是一个非常开放的问题,答案可能会有所不同,但是在谈论SSD时,SQL Server 2012中的tempdb,mdf和ldf文件的最佳位置是什么? 在购买新产品之前,我有一个装有SQL Server 2012核心文件和tempdb的现有SSD,并且两个mdf / ldf都安装在7200rpm HDD上。然后,我购买了2个SSD,其初衷是将mdf放在另一个上,并将ldf放在另一个上。 但是,从更多内容来看,涉及SSD的mdf和ldf文件的单独物理磁盘实际上并不适用。正确? 所以,我在想以下几点: SSD 1-SQL Server 2012核心文件和Windows SSD 2-tempdb SSD 3-MDF和LDF 如果有所作为,它将只用于一个数据库,因此多个数据库之间不会有任何争用。 我的“思维”设置好还是只是浪费(即没有理由分开tempdb),而现在我有了一个额外的SSD可以在其他地方使用?

1
如何优化查询
我有一个与此类似的数据库结构, CREATE TABLE [dbo].[Dispatch]( [DispatchId] [int] NOT NULL, [ContractId] [int] NOT NULL, [DispatchDescription] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Dispatch] PRIMARY KEY CLUSTERED ( [DispatchId] ASC, [ContractId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO CREATE TABLE …


1
OPTION FORCE ORDER提高性能,直到删除行
我有一个稍微复杂的SQL Server 2008查询(大约200行相当密集的SQL),但没有按照我的需要执行。随着时间的流逝,性能从大约0.5秒下降到大约2秒。 看一下执行计划,很明显,通过重新排序联接,可以提高性能。我做到了,而且做到了……下降到约0.3秒。现在,该查询具有“ OPTION FORCE ORDER”提示,并且生活很顺利。 今天,我来了,清理数据库。我存档了大约20%的行,除了删除行外,在相关数据库中不执行任何操作...执行计划的执行总数为软管。它会完全判断某些子树将返回多少行,并且(例如)替换为: <Hash> 与 <NestedLoops Optimized='false' WithUnorderedPrefetch='true'> 现在,查询时间从大约0.3秒增加到大约18秒。(!)只是因为我删除了行。如果删除查询提示,我将返回大约2秒的查询时间。更好,但是更糟。 将数据库还原到多个位置和服务器后,我重现了该问题。简单地从每个表中删除大约20%的行总是会导致此问题。 对于强制联接顺序来说,使查询估计完全不准确(从而使查询时间无法预测)是否正常? 我应该只是希望我要么必须接受次优的查询性能,要么像鹰一样看着它并经常手动编辑查询提示?还是暗示每个联接?.3s至2s是一个很大的选择。 很明显,为什么优化器在删除行后就炸毁了?例如,“是的,它进行了一次样本扫描,并且由于我在数据历史记录中较早地归档了大多数行,因此样本产生了稀疏的结果,因此它低估了对排序后的哈希操作的需要”? 如果您想查看执行计划,请建议一个可以张贴它们的位置。否则,我将采样最惊人的部分。这是基本的错误估计,paren中的数字是(估计:实际)行。 / Clustered Index Scan (908:7229) Nested Loops (Inner Join) --< \ NonClustered Index Seek (1:7229) 请注意,内部循环应扫描908行,但扫描52,258,441。如果准确,则此分支将运行约2毫秒,而不是12秒。在删除行之前,此内部联接估计值的总和仅为2,并且对两个聚簇索引进行哈希匹配。

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.