Questions tagged «sql-server-2005»

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

10
如何获得夏令时之前或之后的某个日期的UTC与当地时间之间的正确偏移量?
我目前使用以下方法从UTC日期时间获取本地日期时间: SET @offset = DateDiff(minute, GetUTCDate(), GetDate()) SET @localDateTime = DateAdd(minute, @offset, @utcDateTime) 我的问题是,如果夏令时发生在GetUTCDate()和之间@utcDateTime,那么@localDateTime最终会减少一个小时。 是否有简单的方法可以将utc转换为非当前日期的本地时间? 我正在使用SQL Server 2005

3
当我向其中添加WHERE子句时,是否优化了视图?
如果在视图内部或外部过滤视图,这会有所不同吗? 例如,这两个查询之间有什么区别吗? SELECT Id FROM MyTable WHERE SomeColumn = 1 要么 SELECT Id FROM MyView WHERE SomeColumn = 1 并且MyView定义为 SELECT Id, SomeColumn FROM MyTable 如果源表位于链接服务器上,答案是否有所不同? 我之所以问是因为我必须从链接的服务器查询一个大表(4400万行)两次,并获得结果的汇总。我想知道是否应该创建两个视图来访问数据,每个查询一个视图,还是我可以放弃一个视图和一个WHERE子句。

5
如何运行带有许多插入的大型脚本而又不会耗尽内存?
题: 我有一个从select语句中插入约4.5万个脚本的脚本。当我尝试运行它时,收到一条错误消息,指出我的内存不足。如何使该脚本运行? 内容: 添加了一些新的数据字段,以使一个应用程序可以与客户端使用的另一个应用程序完美兼容。 从客户端获取了一个包含所有数据的电子表格,这些数据将当前数据项映射到这些新字段的值。 将电子表格转换为插入语句。 如果我仅运行某些语句,则它可以工作,但整个脚本却不能。 不,没有错别字。 如果有其他方法,我应该加载此数据,请随时批评我并告知我。

2
为什么我们需要在SQL Server中重建和重新组织索引
搜索互联网后,我找不到原因 为什么我们需要在SQL Server中重建和重新组织索引? 当我们重建和重组时,内部会发生什么? 网站上的一篇文章说: 当索引碎片大于40%时,应重建索引。当索引碎片在10%到40%之间时,应该重新组织索引。索引重建过程使用更多的CPU,并锁定数据库资源。SQL Server开发版本和企业版具有选项“联机”,可以在重建索引时将其打开。联机选项将在重建期间保持索引可用。 我不明白这一点,尽管它说WHEN要这样做,但是我想知道WHY我们是否需要重建和重组索引?

4
什么是对表进行大的更改更好的方法:每次都删除或插入,或者存在UPDATE?
我正在做一个项目,每天需要在一张桌子中更改约36000条记录。我想知道什么会更好地执行: 删除行并插入新行,或者 更新现有的行 对我来说,删除所有行并插入新行比较容易,但是如果这将使表和索引碎片化并影响性能,那么我希望尽可能进行更新并仅在必要时删除/插入。 这将是每晚的服务,我不希望提高流程本身的速度。我更关注针对该表的查询的性能,总体而言,我已经有8900万条记录,以及该每晚过程将如何影响它。 我应该删除/插入记录,还是应该在每晚过程中更新现有记录(如果可能)?

2
用户定义函数的优化问题
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 4年前。 我有一个问题,为什么SQL Server决定为表中的每个值调用用户定义的函数,即使应该只提取一行。实际的SQL复杂得多,但是我能够将问题减少到这个程度: select S.GROUPCODE, H.ORDERCATEGORY from ORDERLINE L join ORDERHDR H on H.ORDERID = L.ORDERID join PRODUCT P on P.PRODUCT = L.PRODUCT cross apply dbo.GetGroupCode (P.FACTORY) S where L.ORDERNUMBER = 'XXX/YYY-123456' and L.RMPHASE = '0' and L.ORDERLINE = '01' 对于此查询,SQL Server决定为PRODUCT表中存在的每个单个值调用GetGroupCode函数,即使从ORDERLINE返回的估计行数和实际行数为1(这是主键): 计划浏览器中的同一计划显示行数: …

6
删除大量行后,SQL Server数据库大小没有减少。
此问题已从超级用户迁移,因为可以在数据库管理员堆栈交换中回答。 迁移 7年前。 我的SQL不好,但是我需要维护一个数据库。 几乎没有剩余空间了,所以我决定删除2008年的所有数据。在执行delete查询(已清理了大约10000000行)并清理了事务日志后,我发现操作对数据库大小没有影响。我还有什么需要做的吗?

3
是否可以同时还原sql-server bak和缩小日志?
我们有一个来自客户的bak文件,我们已将其转移到我们的开发人员办公室以进行问题调查。当前备份为25GB,还原的数据库大小大致相同,但是需要还原100GB。我相信这是因为那里的数据库设置为具有75GB的事务日志大小。还原数据库后,我们可以收缩日志文件,但是在还原中有没有办法做到这一点?

1
在SQL Server中“无联接谓词”到底是什么意思?
MSDN“ 缺少连接谓词事件类 ”说“ 表明正在执行的查询没有连接谓词 ”。 但是不幸的是,这似乎并不那么容易。 例如,非常简单的情况: create table #temp1(i int); create table #temp2(i int); Select * from #temp1, #temp2 option (recompile); 表中没有数据,也没有警告,尽管它显然没有连接谓词。 如果我看一下SQL Server 2005的文档(相同的链接,只是其他服务器版本),则会有额外的一句话:“ 仅当连接的两面都返回多行时,才会产生此事件。 ”在以前的情况下具有完美的感觉。没有数据,因此双方都返回0行且没有警告。插入行,得到警告。嗯不错。 但是对于下一个令人困惑的情况,我在两个表中插入了相同的值: Insert into #temp1 (i) values (1) Insert into #temp1 (i) values (1) Insert into #temp2 (i) values (1) Insert into #temp2 …

2
聚集索引和非聚集索引之间的性能差异
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我正在阅读Clustered和Non Clustered Indexes。 Clustered Index-它包含数据页。这意味着完整的行信息将出现在“聚簇索引”列中。 Non Clustered Index-它仅包含“聚簇索引”列(如果可用)或“文件标识符+页码+页面中的总行数”形式的行定位器信息。这意味着查询引擎必须采取其他步骤才能找到实际数据。 查询 -如何检查的性能差异与实际例子的帮助,因为我们知道,表只能有一个Clustered Index,并且提供sorting在Clustered Index Column和Non Clustered Index不提供sorting,可支持999 Non Clustered Indexes中SQL Server 2008,并在249 SQL Server 2005。

2
什么会导致镜像会话超时然后故障转移?
我们有两个运行SQL Server 2005 SP4且具有累积更新3的生产SQL Server。这两个服务器都在相同的物理计算机上运行。DELL PowerEdge R815具有4个12核心CPU和512GB(yes GB)的ram,以及用于所有SQL数据库和日志的10GB iSCSI SAN连接的驱动器。操作系统是带有所有SP和Windows更新的Microsoft Windows Server 2008 R2企业版。操作系统驱动器是3个72GB 2.5英寸15k SAS驱动器的RAID 5阵列。SAN是具有48个10k SAS 3.5英寸驱动器的Dell EqualLogic 6510,在RAID 50中进行配置,分割为两个SQL Server的多个LUN,并且也共享一台Exchange机器和几台VMWare服务器。 我们有20多个数据库,其中有11个使用见证服务器以高可用性进行了镜像。见证服务器是运行SQL Server实例的低功耗计算机,该实例仅用于提供见证服务。最大的镜像数据库为450GB,可生成约100-300 iops。数据库镜像监视器报告当前的发送速率约为100kb至10mb /秒,并且镜像提交开销(通常为0毫秒)。镜像服务器与主体保持一致没有问题。 我们一直在经历镜像故障转移。有时,单个数据库将进行故障转移,而有时几乎所有数据库将同时进行故障转移。例如,昨晚,我们进行了11个数据库故障转移中的10个,其​​余的数据库保持可访问性,直到我手动对其进行故障转移。 我已经经历了一些故障排除步骤来尝试确定问题,但是到目前为止,仍无法解决问题: 1)该机器随附Broadcom BCM5709C NetXtreme II 4端口千兆网络适配器,我们最初将其用作主要网络连接。此后,我们在两台计算机上都安装了Intel PRO / 1000 PT双端口服务器适配器,以消除NIC的问题。 2)所有数据库每晚都有一个自动完整备份,以及有关镜像数据库的日志备份。日志文件的使用情况受到监控,很少使用超过15%。主数据库的日志文件为125GB,由159个虚拟日志文件组成,大小从511MB到1GB不等。TempDB位于其自己的LUN上,由24 x 2GB文件组成。 3)在见证服务器上的SQL Server登录没有显示以下任何错误:与数据库“ Data”的镜像连接“ TCP://SQL02.DOMAIN.INET:5022”的超时在30秒后没有响应。检查服务和网络连接。 主服务器和辅助服务器上的SQL Server登录显示与镜像有关的消息: 30秒钟后,到“ TCP://SQL01.DOMAIN.INET:5022”的镜像连接超时,数据库“ Data”无响应。检查服务和网络连接。 …

5
为什么需要定期重启才能保持实例正常运行?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我们已经在SQL 2005上提供了一个生产数据库服务器。一切正常运行了一段时间,但是几周后,我们发现性能明显下降。仅重新启动SQL Server才能使性能恢复正常。 一些背景: 运行1200多个数据库(大多数是单租户,一些是多租户)。在任何人只讲讲多租户讲座之前,有充分的理由保持这种结构…… RAM是16 GB。重新启动后,SQL Server很快就可以恢复到15 GB的使用率。 活动的数据库连接大约有80个连接-考虑到每个进程每个Web服务器有一个连接池,我们认为这很健康-因此我们没有连接泄漏问题。 我们在非高峰时间尝试了几种方法:-运行DBCC DROPCLEANBUFFERS(带有CHECKPOINT)以清除数据缓存。它无效,也不会清除任何RAM使用情况。-运行FREEPROCCACHE和FREESYSTEMCACHE清除查询计划和存储的proc缓存。没有效果。 显然,在活动的生产环境中重新启动SQL Server是不理想的。我们缺少了一些东西。还有其他人经历吗? 更新:2012年4月28日 仍在解决此问题。我已将SQL Server的内存降低到10 GB,只是为了排除与操作系统的争用。我正在接近缩小范围,但是下一步需要一些帮助。 这是我发现的,重新启动SQL Server之后,页面文件在12.3 GB和12.5 GB之间徘徊。它将保持这种状态数天。服务器线程总数将介于850和930之间-连续几天也稳定且一致(sqlserver取决于流量,稳定在55和85之间)。 然后,有一个“事件”。我不知道事件是什么,我无法在日志中看到它,并且在事件发生的一周中的任何一天或时间都看不到任何一致的信息,但是突然之间,他的页面文件跳到了14.1或14.2。 GB,并且线程数跳到1750和1785之间。 在发生这种情况时检查perfom,其中有900多个线程是sqlserver。所以我去sp_who2看看这些线程是从哪里来的...而且只有大约80个使用过的数据库连接。 所以....有谁知道我如何找到SQL Server上这900个线程的其余位置以及它们在做什么? 更新:2012年6月1日 仍在与问题作斗争。对于仍然阅读此书的人来说,线程跳转的问题已得到解决。这是由自动的ComVault备份软件引起的。它正在创建一个线程,尝试备份不再存在的数据库(它正在维护以前的数据库列表),而不是仅备份当前数据库。 但是-问题仍然存在,我们必须每周重新启动,花几天时间。与Rackspace团队合作,看看他们是否可以阐明任何想法。

4
从SQL Server 2000开始,“避免基于递增键创建聚簇索引”是神话吗?
我们的数据库由很多表组成,其中大多数表使用整数代理键作为主键。这些主键中大约有一半在标识列上。 数据库开发始于SQL Server 6.0。 从一开始就遵循的规则之一是,避免在这些索引优化技巧中找到基于递增键创建聚簇索引的方法。 现在使用SQL Server 2005和SQL Server 2008,给人留下深刻的印象,那就是情况已经改变。同时,这些主键列是表聚集索引的最佳首选。

4
授予运行SQL Server作业的权限
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我在MSSQL Server 2005上有一份工作,希望允许任何数据库用户运行。 我不担心安全性,因为作业实际工作的输入来自数据库表。仅运行作业,而不向该表添加记录将无济于事。 我只是找不到如何授予工作公开权限。 有什么办法吗?在这一点上,我唯一能想到的就是让这项工作持续运行(或按计划进行),但是由于它只需要很少做任何实际工作(也许每几个月一次),我确实希望这项工作能够尽快完成,这似乎不是最佳解决方案。

1
主键带有“ NOT FOR REPLICATION”选项
我最近接手了一个项目,并且发现大多数表中的主键都具有“ NOT FOR REPLICATION” 属性。 我不是DBA,但是在大多数数据库中,没有主键的记录肯定会被视为损坏。这些记录中的大多数的主键几乎肯定会在某处用作外键。 这是以前的开发人员(谁不再为公司工作)的错误,还是涉及其他逻辑?我们甚至不在生产环境中使用复制,因此无论如何这实际上不会影响任何严重的事情,但是我想知道删除我不知道的所有这些指令是否还有其他副作用。 对于与该主题相关的许多搜索字词,我还没有找到很多有用的信息,因此,我可以肯定地说,这只是一个愚蠢的错误,我需要扭转,所以这个问题确实是为了缓解我的偏执狂。

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.