Questions tagged «sql-server-2008»

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

5
在100mm记录上使用JOIN进行更新,如何做得更好?(在T-SQL中)
实际上,我需要更新单个表中的1亿条记录,通过用一个ID替换列的varchar值来规范化该表。(我说“替换”,但实际上我正在将ID写入另一列。) 我想要实现的是对数据集进行规范化。尚未规范化的数据没有索引。我的想法是,我不会在等待时在原始值上建立索引,而是在更新完成后索引将要用tinyint值替换varchar值的外键。 UPDATE A SET A.AutoClassID = B.AutoClassID FROM AutoDataImportStaging.dbo.Automobile as A JOIN AutoData.dbo.AutoClass as B on (A.AutoClassName = B.AutoClassName) 背景 在Server 2008 R2上使用MSSQL 2008 R2 服务器有8 GB RAM 服务器具有一个RAID10和7200 RPM SATA(我知道这不是很好,在生产中,它只能读取数据,而不能写入数据;加上最近的HD短缺使得这成为必需的成本) 服务器具有双四核Xeon CPU 机器没有做任何其他事情(当前专用于开发人员,仅此过程) 打开了简单的日志记录(?-但是它仍会记录下来以便可以回滚吗?) 请注意,该查询引用了两个不同的数据库,因此值得 表中要更新的记录的“宽度”为455字节 执行期间的资源 物理RAM已用完 磁盘I / O已用尽 CPU几乎什么也没做(扼要点是I / O) 运行时间已经有14个小时了! 我怀疑有些事情,例如我需要在原始数据上建立索引,即使在规范化更新后将删除列(AutoClassName)时也是如此。我还想知道是否应该一次循环遍历一个表而不是JOIN,这在我开始时似乎很荒谬,但现在看来它会更快。 如何为剩余的规范化更新(类似于此方法)更快地更改方法?


2
如何防止每日索引碎片达到99%
我有一个供100.000名玩家使用的高分桌,每天被插入2次,每位玩家有一条记录。最终,该表中索引的索引碎片为99%。有没有办法通过调整设置来防止这种情况? CREATE TABLE HighScore( [id] [int] IDENTITY(1,1) NOT NULL, [user] [int] NULL, [player] [int] NULL, [round] [tinyint] NULL, [group] [int] NULL, [rank] [int] NULL, [delta] [int] NULL, [roundpoints] [int] NULL, [totalpoints] [int] NULL, PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS …

3
SQL Server 2008中的最大表容量
我有一个应用程序,每年将超过10亿行插入到表中。该表包含一些varchar和bigint列以及一个blob列。 10亿行包含历史数据,这些数据被保留以进行跟踪。因此,我想知道如果我根据有关最大表大小的MSDN文章继续采用这种结构,是否会存在表容量限制。 该链接中提到的数据文件大小是否指向表数据文件组?

1
为什么10 ^ 37/1会引发算术溢出错误?
继续我最近玩大量数字的趋势,我最近将错误归结为以下代码: DECLARE @big_number DECIMAL(38,0) = '1' + REPLICATE(0, 37); PRINT @big_number + 1; PRINT @big_number - 1; PRINT @big_number * 1; PRINT @big_number / 1; 我得到的这段代码的输出是: 10000000000000000000000000000000000001 9999999999999999999999999999999999999 10000000000000000000000000000000000000 Msg 8115, Level 16, State 2, Line 6 Arithmetic overflow error converting expression to data type numeric. 什么? 为什么前三个操作有效,但最后一个无效?如果@big_number可以明显地存储的输出,怎么会有算术溢出错误@big_number / 1?

2
将日期时间列转换为秒数
在我的SQL Server数据库中,有一datetime列。 创建代表long该datetime列值的新列的好方法是什么?在long将表示了若干秒。 我认为,如果可以将其转换为longs,则可以更轻松地按时间段进行分组查询,因为我可以将长整数除以固定数量。 该表是静态的,不会更新或删除数据。

2
作业类别中的任何作业失败时发出警报
是否可以在SQL Server 2008中设置警报,以便在特定类别的作业失败时将发送电子邮件? 我想知道是因为我想在SSRS订阅失败时设置一封电子邮件,并且所有这些订阅都是Report Server类别中的作业。 编辑 -事实证明,当SSRS订阅失败时,作业本身不会失败,因此我的问题将不适用于SSRS订阅监视。但是我仍然想知道我们在环境中运行的其他工作

2
有没有一种基于集合的方式来加载/读取带有HierarchyId的树枝
我正在玩HierarchyId,但还没有想出一种基于集合的方法来执行以下操作: 一次插入所有子树 一次检索所有子树 这个问题与我的上一个问题有关,我怀疑用HierarchyId完成这两项任务的唯一方法是一次一个节点或一个级别。如果我使用的是物化路径,则可以通过一个(且不重要的)基于集合的命令轻松地完成这两个动作。 我想念什么? 编辑:我也错过了一种移动子树的方法,但我从Mikael Eriksson的评论中学到了

5
SQL事件探查器会影响服务器性能吗?
我遇到了一个问题,其中sql server 2008因某些高负载而失败。我需要找到这种负载情况,并需要优化代码以使其能够处理负载。我在互联网上发现,SQL事件探查器可用于跟踪数据库交互,然后可以对其进行分析以找到问题发生的确切点。我还发现了如何启动sql profiler。但是现在我的问题是,通过启动sql profiler,我是否会影响服务器性能?

2
将bak文件还原为较小的mdf和ldf数据库文件
我有一个遗留下来的数据库,该数据库的设计缺乏噩梦,在这里我将不再赘述,但是服务器上的文件(相对)巨大。我有: MyDatabase.mdf:24.8GB MyDatabase.ldf:114.6GB 每天晚上,该数据库都会备份到.bak文件中,并运送到我们的报告服务器上,并在其中进行还原。.bak文件要小得多,只有1.8GB。 但是,当我尝试在报告服务器上还原它时,由于空间不足,它失败了。服务器上大约有100GB的可用空间,它正试图吞噬原始服务器上所用文件的全部139.4GB。除非我对压缩的认识完全错误,否则我非常有信心1.8GB文件实际上不会扩展7400%。 我的问题:有什么方法可以告诉SQL Server还原此备份文件而无需预先保留该空间?我不在乎任何日志;我只需要那里的数据。我从开发和架构的角度理解数据库,但是我绝不是任何类型的DBA。 这是在SQL Server 2008 R2上。感谢您的帮助或建议。

2
用户定义的表类型的sp_executesql行为不正确
问题:用户定义的表类型作为sp_executesql的参数是否存在已知问题?答案-不,我是个白痴。 设置脚本 此脚本分别创建表,过程和用户​​定义的表类型中的一种(仅限受限SQL Server 2008+)。 堆的目的是提供一个审核,是的,数据已进入过程。没有约束,没有什么可以防止数据被插入。 该过程将用户定义的表类型作为参数。proc所做的所有操作都是插入表中。 用户定义的表类型也很简单,只有一列 我已经针对以下命令运行了11.0.1750.32 (X64) ,10.0.4064.0 (X64)是的,我知道该盒子可以打补丁了,我无法控制。 -- this table record that something happened CREATE TABLE dbo.UDTT_holder ( ServerName varchar(200) , insert_time datetime default(current_timestamp) ) GO -- user defined table type transport mechanism CREATE TYPE dbo.UDTT AS TABLE ( ServerName varchar(200) ) GO -- stored …

2
使用单独的架构如何影响SQL Server 2008的性能?
我想在SQL Server 2008数据库中为具有不同目的的对象使用单独的架构。现在,我们使用一种令人费解的命名约定来表示表或存储过程的目的,并且前缀意味着我们必须扫描五个或六个xharacter才能看到唯一名称的开头。我想为仅用于驱动UI的表(菜单,人员角色等)和维表与事实表等使用单独的架构。 我的问题是,使用多种架构(方案?)会对所有事情都使用旧的dbo产生性能影响吗?

2
@table_variable或#temp_table
我有一个具有129列的大用户定义表类型变量。我将一次在此表变量中存储大约2000-3000条记录,并将其传递给各种存储过程和函数以获取其他数据并进行修改。然后,这些其他数据和新的修改将存储在相同类型的新表变量中,并通过OUTPUT参数返回到源存储过程。(这是因为表类型参数只能作为传递READONLY。) 这是我的伪代码: SP1 @tmp tableType { INSERT @tmp EXEC SP2 (@tmp) INSERT @tmp EXEC SP3 (@tmp) } 我应该使用a @table_variable还是#temp_table?

1
非企业版和性能的noexpand提示
我必须使用索引视图才能达到性能。从该比较表中可以看出,标准版不支持索引视图。但是BOL说: 可以在任何版本的SQL Server中创建索引视图。在SQL Server Enterprise中,查询优化器会自动考虑索引视图。要在所有其他版本中使用索引视图,必须使用NOEXPAND表提示。 这样行得通吗(我在说性能) select * from dbo.OrderTotals with (noexpand, index=IXCU_OrderTotals) 在SQL Server Standard Edition上正常运行 select * from dbo.OrderTotals 对企业一? 这是查看代码: CREATE VIEW dbo.OrderTotals WITH SCHEMABINDING AS select OrderId = r.OrderId , TotalQty = SUM(r.Quantity) , TotalGrossConsid = SUM(r.Price * r.Quantity) , XCount = COUNT_BIG(*) from dbo.Order r …

4
是否有工具可以在两个不同的模式之间执行数据比较?
我们正在将数据库迁移到新架构,但要验证数据是否已正确移动。 如果架构相同,则传统的数据比较工具可以比较两个数据库之间的差异。在我们的案例中,表设计有所更改,但是旧模式中的所有数据都在新模式中,只是稍微移动了一下,我需要确保它是正确的。我们有数千万行,因此不能选择手动检查。 是否有任何工具可以帮助进行这种比较? 如果没有,那么是否有任何库/框架可以帮助启动定制解决方案的开发? 如果有必要,我很高兴使用特定于数据库的解决方案,在这种情况下,对于SQL Server 2008。 我的解决方案:我通过VIEW在旧数据库上创建每个表的字段与新数据库表相同的字段来比较这两个数据集。 然后,我使用这里描述的技术比较数据:在SQL Server中比较两个表的最短,最快和最简单的方法:UNION! 在这次迁移中,我很幸运,因为整个表的结构类似于旧数据库,其中字段从一个表移动到另一个表,或者被删除或添加。在删除和添加的情况下,没有什么可比较的,对于已移动或聚合的字段,我会在视图中进行计算以提供正确的信息以进行比较。 该UNION比较显示我只能用不同的行,所以只要数据是正确的,我得到一个空的结果集。

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.