Questions tagged «sql-server-2008»

SQL Server 2008(主要版本10.00.xxxx)。请同时用sql-server标记。

3
sp_WhoIsActive(SQL Server 2008 R2)上有很多“ FETCH API_CURSOR0000…”
我有一个奇怪的情况。使用sp_whoisactive我可以看到: 好的,通过此查询,我可以看到触发了什么(此单词在英语中存在吗?): SELECT c.session_id, c.properties, c.creation_time, c.is_open, t.text FROM sys.dm_exec_cursors (SPID) c --0 for all cursors running CROSS APPLY sys.dm_exec_sql_text (c.sql_handle) t 结果: 这很简单select。为什么使用f etch_cursor? 另外,我也看到很多“空白”的sql_texts。这个“光标”有什么用吗? DBCC INPUTBUFFER (spid) 告诉我这个: 有这个问题 在这里(我做的),但我不知道这是否是同样的事情。 编辑1: 使用kin提供的查询,我看到以下内容: 编辑2: 使用活动监视器,可以看到以下内容: 这是最昂贵的查询(第一个查询是有意的,我们知道)。 再一次,我想知道,为什么这select * from...是FETCH CURSOR... 的原因 编辑3: 此“ select * from...”正在从另一台服务器(通过linked server)运行。 好吧,现在我在理解@kin所说的内容时遇到了问题。 这是execution …

1
如何判断备份文件是否包含CDC?
使用SQL Server 2008到2014年,我知道如何在启用更改数据捕获(CDC)的情况下备份和还原数据库,但是我正在寻找一种查询完整备份文件以确定其是否包含CDC数据的方法。 最好的办法是RESTORE FILELISTONLY从数据库获取文件列表,但获取CDC状态以确定还原是否需要使用KEEP_CDC标志? 有没有办法确定备份是否包含CDC数据? 谢谢!


2
简单的删除,但是复杂的执行计划
当我运行此删除时: DELETE FROM ETLHeaders WHERE ETLHeaderID < 32465870 ...它删除39,157行。它应该很简单,因为它是在ETLHeaderID上删除的,而ETLHeaderID是聚簇索引和主键。但是(根据执行计划)它似乎达到361,190行并使用其他索引。该表确实具有XML数据类型的字段(以防影响此DELETE)。 有任何想法为何以及如何加快此DELETE? 这里的执行计划: http ://sharetext.org/qwDY这里的表模式:http : //sharetext.org/Vl9j 谢谢

2
从查询中插入缺少的日期
如何从我创建的查询中插入缺少的日期。结果如下: Date Frequency 2014-05-18 5 2014-05-20 7 2014-05-25 7 2014-05-27 6 我希望结果缺少具有0值的日期,如下所示: Date Frequency 2014-05-18 5 2014-05-19 0 2014-05-20 7 2014-05-21 0 2014-05-22 0 2014-05-23 0 2014-05-24 0 2014-05-25 7 2014-05-26 0 2014-05-27 6 请注意,我对服务器具有只读访问权限。

1
mdf和ldf的可用空间与数据库的可用空间不匹配
在SSMS中,我看到了文件大小相关的属性,并在下面找到了一个数据库的详细信息。此处的值与其他属性不匹配。此处mdf,ldf的大小和总大小与每个窗口下的其他值匹配。但是,如果添加了mdf和ldf的可用空间,则它不等于收缩数据库窗口中显示的可用空间和数据库属性中显示的可用空间。对于任何数据库都是如此。为什么会这样呢?请任何人解释这背后的逻辑? 在数据库属性下: 大小:91.31 MB 可用空间:13.40 MB 在数据库文件属性下: mdf大小:17 MB ldf大小:75 MB 在收缩数据库下: 当前分配的大小:91.31 MB 可用空间:13.40 MB 在收缩文件下,用于数据文件: 当前分配的大小:16.38 MB 可用空间:12.63 MB 在收缩文件下-用于日志文件: 当前分配的大小:74.94 MB 可用空间:55.62 MB

2
sp_reset_connection花很长时间执行的可能原因是什么?
sp_reset_connection从SQL Server Profiler看,为什么系统存储过程要花几毫秒的时间来执行? 我从使用SQL Server Profiler的生产系统中进行了简单的跟踪,然后使用SqlNexus对其进行了分析。SqlNexus指示sp_reset_connection具有最高的累积持续时间-占总跟踪的33%。观察到的持续时间为0-7秒(12到6,833,270微秒),但平均为0.956s。 我了解到池连接被重用时会调用sp_reset_connection。我已经看到有人暗示这可能是由于无关的痕迹而发生的,但事实并非如此。 我读过了 了调用sproc时服务器在做什么,但是我不认为在这种情况下任何问题都会出现-代码不会留下未清除的开放式事务或庞大的临时表。 我也看着 /server/199974/sp-reset-connection-taking-a-long-time-to-run,但这没有帮助。 编辑(2013-12-23): 在所有情况下,读和写均为0,CPU几乎始终为0(仅两个实例,两个非零CPU都在16ms处)。

1
SentryOne Plan Explorer是否将UDF中的读数计数?
我有这样的查询: select dbo.fn_complexFunction(t.id) from mytable t 在SQL Sentry Plan Explorer中,我注意到我必须运行Get Estimated Plan才能使查询计划包括UDF。 运行“获取实际计划”时,似乎逻辑读取和其他指标未包括UDF中发生的操作。在这种情况下,是否是使用Profiler的唯一解决方法?

1
SQL中的最小记录条件
我已经写了一个脚本来测试此页面上的声明http://technet.microsoft.com/zh-cn/library/dd425070(v=sql.100).aspx,其标题为“何时汇总最小记录条件”最小记录不会或不会发生。 使用此脚本,我发现每种不同类型的插入的日志记录长度的总和如下: 堆空没有Tablock 60000 带有锁的堆空​​56000 堆非空无制表符60000 非空堆,带锁56000 堆加索引为空,没有制表符126188 堆加索引为空,带挂锁114188 堆加索引非空无选项卡锁138696 带有Tablock的堆加索引不为空112000 集群为空命令无制表符64168 集群空,带tablock 56168命令 群集为空无序无标签锁73388 空群集,无序,带有tablock 65388 群集非空无标签锁63912 带锁的群集非空55944 群集加索引为空,没有制表符124336 带有Tablock的簇加索引为空108336 群集加索引非空无选项卡锁123876 带Tablock的群集加索引不为空107924 其中一些数字似乎与technet页面上的表不匹配。特别是: 插入到空表和非空表之间的日志记录似乎没有什么区别,但是该页面声称,插入到没有制表符的非空集群中时,应该有完整的日志记录 使用tablock插入具有and index的堆或群集似乎确实减少了日志记录,但是该页面声称应该有完整的日志记录。 使用insert的SELECT INTO方法时,fn_dblog中没有要插入其操作的行,但是该页将该方法列为应具有表中所述行为的批量加载操作。 作为参考,它在SQL Express数据库上运行,当我运行DBCC TRACESTATUS(610)时,所有内容均为0。 谁能帮助解释为什么我会看到这些差异? 供参考,代码如下: SET NOCOUNT ON CREATE TABLE numbers (num INT) CREATE TABLE numbersUnordered (num INT) Declare @cnt int …

2
查找具有相同的子行集的父行
假设我有一个这样的结构: 食谱表 RecipeID Name Description RecipeIngredients表 RecipeID IngredientID Quantity UOM 关键RecipeIngredients是(RecipeID, IngredientID)。 查找重复食谱的一些好方法是什么?重复配方定义为具有完全相同的一组配料以及每种配料的数量。 我曾经考虑过使用FOR XML PATH将成分合并到一个单独的列中。我尚未对此进行全面探讨,但是如果我确保成分/ UOM /数量按相同顺序排序并具有适当的分隔符,那么它应该可以工作。有更好的方法吗? 有48K食谱和200K成分行。

2
如何跟踪使SQL Server崩溃的SQL查询
我们有一台SQL Server 2008数据库服务器(它恰好在MS故障转移群集下运行,但是我认为这与这里无关)。 我们的应用程序运行用于数据库访问的Hibernate,并且由于我们最近从v3.1升级到3.6,所以我们一直在定期遇到SQL Server崩溃(每24-48小时,但有时更频繁)。 有问题的具体问题似乎与内存有关。在服务器崩溃之前(然后由故障转移群集管理器自动重新启动),我们得到了以下错误的负载: Error: 701, Severity: 17, State: 130. There is insufficient system memory in resource pool 'internal' to run this query. 偶尔(但定期)的消息 Error: 17300, Severity: 16, State: 1. (Params:). The error is printed in terse mode because there was error during formatting. Tracing, ETW, notifications etc …

3
SQL Server沙箱
我正试图为我们的报表开发人员设置一个沙盒,以供他们使用。我目前的计划是每天晚上“重置”数据库,但我不确定该怎么做。重置是指我实际上要从服务器上除一个数据库之外的所有数据库中删除任何用户表,视图,存储过程等。我想另一个选择是也删除并重新创建数据库,但是我很确定这也意味着要重新访问所有适当的AD组/人员。 我真的不知道这样做的最佳方式是什么,所以我希望你们中的一些人能够提供一些好的想法/建议。谢谢。 为了清楚起见,我们本质上希望使用我们的数据库来做到这一点:http : //try.discourse.org/t/this-site-is-a-sandbox-it-is-reset-every-day/57。唯一的不同是我们不想每天重新创建用户。 版本: SQL Server 2008 版本:开发人员和企业

2
更改数据捕获和__ $ update_mask二进制文件
我们正在使用CDC捕获对生产表所做的更改。更改后的行将被导出到数据仓库(informatica)。我知道__ $ update_mask列存储以varbinary形式更新的列。我也知道我可以使用各种CDC函数从该掩码中找出那些列是什么。 我的问题是这个。谁能为我定义该掩膜后面的逻辑,以便我们识别仓库中已更改的列?由于我们在服务器外部进行处理,因此无法轻松访问那些MSSQL CDC函数。我宁愿自己在代码中分解面具。对于此解决方案,SQL端的cdc函数的性能存在问题。 简而言之,我想通过__ $ update_mask字段手动识别已更改的列。 更新: 作为替代方案,也可以将人类可读的变更列清单发送到仓库。我们发现执行此操作的性能远胜于原始方法。 以下CLR对这个问题的回答符合这种选择,并包括为将来的访客解释口罩的详细信息。但是,对于相同的最终结果,使用XML PATH接受的答案是最快的。

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 此过程存在于我的开发环境,测试环境和实时环境中。 问题在于该过程的每个副本都略有不同,因为每个环境的服务器名称都不同。这使得管理脚本更新的部署很麻烦。 有没有办法使该过程具有可移植性,以便每个环境都可以运行该过程的相同版本? 如果没有,我是否可以做些什么来使脚本部署不易出现错误/错误?

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.