Questions tagged «sql-server-2008-r2»

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

3
父子树层次结构订单
我必须遵循SQL Server 2008 R2中的数据。SQLFiddle 架构: 创建表[dbo]。[ICFilters]( [ICFilterID] [int] IDENTITY(1,1)NOT NULL, [ParentID] [int] NOT NULL默认值0, [FilterDesc] [varchar](50)NOT NULL, [Active] [tinyint] NOT NULL默认值1, 约束[PK_ICFilters]主键 ([ICFilterID] ASC)与 PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS =开启 )在[PRIMARY]上 )在[PRIMARY]上 插入[dbo]。[ICFilters](ParentID,FilterDesc,活动) 价值观 (0,“产品类型”,1), (1,'ProdSubType_1',1), (1,'ProdSubType_2',1), (1,'ProdSubType_3',1), (1,'ProdSubType_4',1), (2,'PST_1.1',1), (2,'PST_1.2',1), (2,'PST_1.3',1), …

1
SQL Server-是否有人使用SUMA,跟踪标志8048或跟踪标志8015?
最近包括SQL Server启动跟踪标记8048,以解决SQL Server 2008 R2系统中的严重自旋锁争用问题。 希望听到其他人发现使用情况的情况,其中使用情况是通过跟踪标志8048(将查询内存授予策略从每个NUMA节点升级到每个核),跟踪标志8015(SQL Server忽略物理NUMA)或SUMA(交错访问足够均匀的内存(在某些NUMA计算机上为BIOS选项)。 跟踪标记8048 http://blogs.msdn.com/b/psssql/archive/2011/09/01/sql-server-2008-2008-r2-on-newer-machines-with-more-than-8-cpus每个数字节点可能需要跟踪标志-8048.aspx 跟踪标记8015 http://blogs.msdn.com/b/psssql/archive/2010/04/02/how-it-works-soft-numa-io-completion-thread-lazy-writer-workers-and-memory -nodes.aspx 详细的系统工作负载,从出现问题的系统收集的指标以及在干预后从系统收集的指标。 跟踪标志8048是一个“修复程序”,但这是最好的修复程序吗?由于跟踪标志8015,SQL Server忽略物理NUMA会完成相同的事情吗?如何将BIOS设置为交错内存,使服务器具有模仿SMP的SUMA行为而不是NUMA行为? 和平!tw:@sql_handle 关于系统:-4个六核Xeon E7540 @ 2.00GHz,超线程-128 GB RAM-WS2008R2-MSSQL 2008 R2 SP2-maxdop 6 关于工作负载:-由2个报表应用程序服务器驱动的1000个批处理计划/排队报表。-3种批次:每天,每周,每月-与SQL Server的所有报表应用程序服务器连接均作为单个服务帐户进行-报表并发最大数= 90 故障系统的主要发现:-从Perfmon开始,间隔为15秒--系统保持95%-100%的CPU繁忙--SQL Server缓冲区页面查找<10000次/秒 从等待和自旋锁DMV开始,间隔5分钟 高CMEMTHREAD服务员和等待时间 SOS_SUSPEND_QUEUE高旋转和后退 鲍勃·多尔(Bob Dorr)在跟踪标记8048上的CSS工程师博客文章中指出,由于查询内存授予的瓶颈,每个NUMA节点具有8个以上内核的系统可能会遇到类似的症状。跟踪标志8048会将策略更改为每个核心而不是每个NUMA节点。 干预 使用-T8048重新启动MSSQL。区别立即显而易见:缓冲区页面查找率上升到100万以上,每秒达到800万。麻烦的批处理工作负载以前不到24小时就无法完成,而不到4小时就可以完成。提交了不是调查或干预重点的另一批工作量,作为验证跟踪标志8048的校正值的一部分(并确保其不必要的副作用最小)。该报告批处理先前在2小时内完成;带有跟踪标记8048的报告批处理大约在20分钟内完成。 每晚ETL也遇到了好处。ETL时间从大约60分钟减少到40分钟。 从多个地方收集信息,我推测报告排队的程度很高,并发报告计数大于硬件线程计数,并且所有用户的单一用户帐户组合在一起给一个NUMA节点施加了压力,直到工作线程压力导致它对于同一个用户帐户的下一个传入连接请求不利,此时下一个NUMA节点将立即获得一定数量的连接。每个NUMA节点最终都有很大可能强调查询内存授予瓶颈。 为查询内存授权打开更多通道消除了瓶颈。但是,我不确定费用。鲍伯·多尔(Bob Dorr)的CSS帖子清楚地表明,带有跟踪标志8048的其他内存开销。单页分配器区域内的开销是否受MSSQL 2008 R2最大服务器内存控制?如果是这样,我猜想系统在缓冲池缓存中将只少一些数据库页面。如果没有,应该降低最大服务器内存来容纳吗?

3
SQL Server数据库同步
问题定义 我们的用户需要具有查询最新数据库的能力。数据最多可以保留24小时,这是可以接受的。用生产副本获取和保持第二个数据库的最新成本最低的方法是什么?有我没有想到的方法吗? 工作量 我们有一个第三方应用程序,用于监视股票交易活动。白天,作为各种工作流程的一部分,会发生很多小的变化(是的,这种交易是有效的。否,这是可疑的,等等)。在晚上,我们执行基于大型集合的操作(加载前一天的交易)。 当前的解决方案和问题 我们利用数据库快照。晚上10点,我们放下并重新创建快照。然后开始ETL处理。显然,这对我们的磁盘造成了负担,但使我们的用户能够查询数据库而无需锁定数据库(他们使用Access前端)。他们在深夜和清晨使用它,因此他们会注意到停机时间。 这种方法的问题有两个方面。首先是,如果每晚处理失败,并且这种情况并非罕见,我们将还原数据库,从而导致快照被删除。另一个问题是我们的处理时间超过了我们的SLA。我们在发现书写不佳的查询和缺乏索引之后,尝试通过与供应商合作来解决此问题。数据库快照也是造成这种速度下降的罪魁祸首,我知道它存在时与不存在时的速度差异证明了这一点。 考虑的方法 聚类 我们已经打开了数据库集群功能,但是并不能满足使数据可用的需求,只是使管理员的生活更加复杂。此后已关闭。 SQL Server复制 我们上周开始研究复制。我们的理论是,我们可以建立第二个目录并与生产数据库同步。在开始ETL之前,我们将切断连接,只有在ETL过程完成后才重新启用它。 管理员从快照复制开始,但他担心生成快照以及所需的磁盘消耗会花费几天的高CPU使用率。他指出,似乎在将所有数据写出到物理文件之前,才将其发送给订户,因此我们的.6TB数据库将花费1.8TB的存储成本。另外,如果要花几天时间才能生成快照,那么它就不符合所需的SLA。 在阅读了精美的文章之后,似乎可以使用Snapshot初始化订阅者,但是之后我们希望切换到Transactional Replication以使其保持同步。我认为打开/关闭事务复制不会强制完全重新初始化吗?否则,我们会浪费时间窗口 数据库镜像 我们的数据库处于FULL恢复模式,因此可以选择数据库镜像,但是我对复制的了解甚至少于复制。我确实找到了SO答案,该答案指示“数据库镜像阻止直接访问数据,只能通过数据库快照访问镜像的数据。” 日志传送 听起来好像还可以选择日志传送,但这是我一无所知的另一件事。它会是一种比其他任何产品都更低廉的解决方案(实施和维护)吗?基于Remus的评论: “日志传送允许对副本的只读访问,但是在应用收到的下一个备份日志时(例如,每15-30分钟)将断开所有用户的连接。” 我不确定该停机时间将转换为多长时间,从而可能导致用户感到不安。 MS同步 我仅在上个周末听说过使用Sync,但尚未进行调查。我不愿为这种问题所具有的高可见性引入一种新技术,但是如果这是最好的方法,那就去吧。 SSIS 我们在这里做了很多SSIS,因此生成数百个SSIS包来保持辅助同步是我们的一种选择,尽管这是一个丑陋的选择。我不喜欢这样做,因为这是我不愿我的团队承担的大量维护费用。 SAN“魔术”快照 过去,我听说过我们的管理员使用某种SAN技术对整个磁盘进行即时备份。也许有一些EMC魔术可以用来制作mdf / ldf的uberquick副本,然后我们可以分离/附加目标数据库。 备份还原 我认为我们每周进行一次完整备份,每晚进行一次差异备份,每15分钟进行一次日志备份。如果用户可以在3-4个小时的停机时间内进行完全还原,那么我认为这可能是一种方法。 约束条件 Windows 2008 R2,SQL Server 2008 R2(企业版),VMWare v5企业版,EMC SAN存储,其中驱动器映射到vmdk文件,commvault处理备份以及源目录中的.6TB数据。这是我们内部托管的第三方应用程序。修改它们的结构通常是不赞成的。用户不能不查询数据库而拒绝通过主动标识他们监视的表来进行工作而受到约束。 目前,我们的DBA纯粹是承包商。专职人员已经起航,我们还没有替换他们。应用程序管理员对SQL Server的知识并不精通,我们的存储/ VM管理员团队可以帮助/阻碍这一工作。开发团队目前不参与,但可以根据该方法征募他们。因此,更易于实现和维护解决方案将是可取的。 我,我站在惯例的发展方面,所以我只能提出方法,而不必处理行政方面的问题。因此,没有时间在管理程序上,我很犹豫地说一种方法要优于另一种方法-根据这些论文,它们看起来都很棒。我完全愿意按照大家的建议去做,因为正如我所看到的那样,这只会使我作为数据库专家更加有价值。我有一辆独轮车,但没有大屠杀披风。 相关问题 /programming/525637/what-are-the-scenarios-for-using-mirroring-log-shipping-replication-and-cluste /programming/434982/mirroring-vs-replication /programming/4303020/sync-databases-mirroring-replication-log-shipping /programming/4303020/sync-databases-mirroring-replication-log-shipping …


3
多久备份一次master数据库?
BOL中的建议相当模糊: 必要时备份主服务器,以充分保护数据以满足您的业务需求。我们建议您使用定期的备份计划,在进行实质性更新后,您可以通过额外的备份来进行补充。 如果您进一步冒险,则会发现以下详细信息: 导致主服务器更新且需要进行备份的操作类型包括: 创建或删除用户数据库。 如果用户数据库自动增长以容纳新数据,则 master 数据库不会受到影响。 添加或删除文件和文件组。 添加与登录安全性相关的登录名或其他操作。 数据库安全操作(例如将用户添加到数据库)不会影响主数据库。 更改服务器范围或数据库配置选项。 创建或删除逻辑备份设备。 配置服务器以进行分布式查询和远程过程调用(RPC),例如添加链接的服务器或远程登录。 因此,如果我们所有的登录名都是通过Windows组添加的,并且我们没有对数据库进行任何其他更改,那是否意味着一次备份主数据库就足够了? 如果不是,那么主数据库的标准备份间隔是多少?

1
SQL Server-处理嵌套的非确定性视图堆栈中的字符串本地化
在对数据库进行概要分析时,我遇到了一个视图,该视图引用了一些不确定性函数,对于该应用程序池中的每个连接,每分钟可访问1000-2500次。从视图中看,一个简单的代码将产生以下执行计划:SELECT 对于少于一千行的视图来说,这似乎是一个复杂的计划,每隔几个月可能会看到一两行发生变化。但是随着以下其他情况的恶化,情况变得更糟: 嵌套视图是不确定的,因此我们无法为其编制索引 每个视图都引用多个UDFs来构建字符串 每个UDF都包含嵌套UDF的,以获取本地化语言的ISO代码 堆栈中的视图使用从s 返回的其他字符串构建器UDF作为JOIN谓词 每个视图堆被视为一个表,这意味着有INSERT/ UPDATE/ DELETE在每个触发器来写入底层表 在视图上,这些触发器使用CURSORS该EXEC存储过程作为参考更多的这些串建设UDF秒。 这对我来说似乎很烂,但是我只有几年使用TSQL的经验。它也会变得更好! 看来开发人员认为这是个好主意,做了所有这些工作,以便所存储的几百个字符串可以基于从UDF特定于模式的a返回的字符串进行翻译。 这是堆栈中的视图之一,但是它们都同样糟糕: CREATE VIEW [UserWKStringI18N] AS SELECT b.WKType, b.WKIndex , CASE WHEN ISNULL(il.I18NID, N'') = N'' THEN id.I18NString ELSE il.I18nString END AS WKString ,CASE WHEN ISNULL(il.I18NID, N'') = N'' THEN id.IETFLangCode ELSE il.IETFLangCode END AS IETFLangCode ,dbo.User3StringI18N_KeyValue(b.WKType, b.WKIndex, …

1
转换为数字后,奇怪的SQL Server实例崩溃
使用C#实体框架时,我注意到我的SQL Server实例崩溃了。 我能够将其追溯到以下语句: SELECT * FROM dbo.[TestTable] where mpnr in (1099059904, 1038139906, 1048119902, 1045119902, 1002109903, 1117109910, 1111149902, 1063149902, 1117159902, 1116109904, 1105079905, 1012079906, 1129129904, 1103059905, 1065059905, 1091059906, 1110149904, 1129149903, 1083029905, 1080139904, 1076109903, 1010019902, 1058019902, 1060019903, 1053019902, 1030089902, 1018149902, 1077149902, 1010109901, 1011109901, 1000119902, 1023049903, 1107119909, 1108119909, 1106119909) 该表如下所示: CREATE TABLE dbo.[TestTable]([MPNR] [numeric](9, …


4
在HashBytes函数中选择正确的算法
我们需要创建nvarchar数据的哈希值以进行比较。T-SQL中有多种可用的哈希算法,但是在这种情况下,哪一种是最好的选择? 我们要确保两个不同的nvarchar值具有重复哈希值的风险最小。根据我对互联网的研究,MD5似乎是最好的。那正确吗?MSDN向我们(下面的链接)介绍了可用的算法,但是没有说明在哪种条件下使用哪种算法? 哈希(Transact-SQL) 我们需要在两个nvarchar(max)列上联接两个表。可以想象,查询需要一段时间才能执行。我们认为最好保留每个nvarchar(max)数据的哈希值,然后对哈希值进行联接,而不是blob的nvarchar(max)值。问题是哪种哈希算法提供了唯一性,因此我们不会遇到为多个nvarchar(max)拥有一个哈希值的风险。

2
还原数据库(不包括FILESTREAM数据)
背景 我们正在开发一个系统,该系统的底部有一个大型数据库。它是在SQL Server 2008 R2上运行的MS SQL数据库。数据库的总大小约为12 GB。 其中约有8.5 GB位于单个表中BinaryContent。顾名思义,这是一个表,我们将任何类型的简单文件直接存储在表中作为BLOB。最近,我们一直在测试使用FILESTREAM将所有这些文件从数据库移出到文件系统的可能性。 我们对数据库进行了必要的修改,没有任何问题,并且在迁移之后,我们的系统仍然可以正常工作。该BinaryContent表大致如下所示: CREATE TABLE [dbo].[BinaryContent]( [BinaryContentID] [int] IDENTITY(1,1) NOT NULL, [FileName] [varchar](50) NOT NULL, [BinaryContentRowGUID] [uniqueidentifier] ROWGUIDCOL NOT NULL ) ON [PRIMARY] FILESTREAM_ON [FileStreamContentFG] ALTER TABLE [dbo].[BinaryContent] ADD [FileContentBinary] [varbinary](max) FILESTREAM NULL ALTER TABLE [dbo].[BinaryContent] ADD CONSTRAINT [DFBinaryContentRowGUID] DEFAULT (newsequentialid()) FOR [BinaryContentRowGUID] …

1
此NO JOIN PREDICATE警告应该让我感到震惊吗?
我正在对性能不佳的存储过程的细节进行故障排除。该过程的这一部分将引发NO JOIN PREDICATE警告 select method = case methoddescription when 'blah' then 'Ethylene Oxide' when NULL then 'N/A' else methoddescription end, testmethod = case methoddescription when 'blah' then 'Biological Indicators' when NULL then 'N/A' else 'Dosimeter Reports' end, result = case when l.res is null or l.res <> 1 then 'Failed' …

2
你能解释这个执行计划吗?
碰到这个东西时,我正在研究其他东西。我正在生成包含一些数据的测试表,并运行不同的查询,以了解不同的写查询方式如何影响执行计划。这是我用来生成随机测试数据的脚本: IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID('t') AND type in (N'U')) DROP TABLE t GO CREATE TABLE t ( c1 int IDENTITY(1,1) NOT NULL ,c2 int NULL ) GO insert into t select top 1000000 a from (select t1.number*2048 + t2.number a, newid() b from [master]..spt_values …

3
负载下插入性能提高:为什么?
我有一段代码可以对高度非规范化的表执行插入操作。这些表的列数范围从〜100到300+。这是在Windows Server 2008上运行的SQL Server 2008 R2。 每个插入包括在同一事务下插入多个表。有些插入是由NHibernate批处理的,但是有些不能,但是它们都在同一事务下。 当我通过重复调用一段执行插入的代码执行了500次插入操作时,平均得到的时间约为360毫秒。 奇怪的是,当我使用4个进程同时运行测试代码(在Windows Server 2008下从4个不同的命令提示符运行同一个exe)时,每次调用的插入性能会好得多。我看到突发速度高达90毫秒(几乎快了X4)。我正在从代码中测量插入时间。 由于4个进程彼此之间一无所知,因此我假设这与SQL Server有关,但是我绝对不知道为什么。我想知道为什么会这样,以及是否有任何配置可以使我在插入频率不那么高的情况下获得相同的性能。 同样欢迎提出有关SQL Server监视方法的建议,以了解数据库级别的情况。

4
SSD上的SQL Server数据库-每个表的单独文件有什么优势?
我正在创建一个数据库,其中大约有30个表,每个表包含数千万行,每个表包含一个重要列和一个主键/主键列,以在面对繁重的情况时最大化查询效率更新和插入,并大量使用聚集索引。其中两个表将包含可变长度的文本数据,其中一个表包含数亿行,而其余表仅包含数字数据。 由于我真的想从我可用的硬件(大约64GB的RAM,一个非常快的SSD和16个内核)中挤出所有性能的下降,所以我在考虑允许每个表都有自己的文件,这样无论我要加入2、3、4、5或更多表,每个表将始终使用单独的线程读取,并且每个文件的结构将与表内容紧密对齐,从而有望最大程度地减少碎片并使其更快使SQL Server添加到任何给定表的内容。 一个警告,我被困在SQL Server 2008 R2 Web Edition上。这意味着我不能使用自动水平分区,这将其排除在性能之外。 是否会在每个表中使用一个文件实际上使性能最大化,或者我是否忽略了使之多余的内置SQL Server引擎特性? 其次,如果每个表使用一个文件是有好处的,为什么create table只给我选择将表分配给文件组而不分配给特定逻辑文件的选项?这将需要我为方案中的每个文件创建一个单独的文件组,这向我暗示SQL Server可能没有想到我所假定的优势将来自于我的建议。

9
数据库对象的版本控制
我们的开发人员正在使用的数据库太大(有很多数据库对象)。我们必须控制db对象的更改(更改管理)。我们公司不能只有一个人负责数据库更改。因此,我们需要一个用于数据库对象的安全源,例如用于标准代码的版本控制,但与数据库更相关,可以同步数据库和脚本。什么是最好的。可靠,便宜,实用-选择两个:)

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.