Questions tagged «sql-server-2012»

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

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

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可以在其他地方使用?


3
SQL Server 2012 Standard Edition-多个实例和内存利用率
如果我们在一台具有192 GB RAM的服务器上有多个SQL Server 2012 Standard Edition实例(内存限制为64 GB),那么两个实例只能访问前64 GB的内存,还是可以访问其他实例?部分内存,以便它们每个都可以拥有自己的64 GB“块”。 如果两个节点都故障转移到单个节点,则这是针对主动/主动群集的考虑因素。



2
SQL Server不应该支持RANGE吗?
作为开发网站并执行一些SQL Server的人,对我来说,SQL Server应该支持一个简单的子句(表明结果只包括特定范围的行)对我来说似乎并不费脑子。例如,第30到39行。 就目前而言,当SQL Server中的主要工作重点不是SQL时,实际上在许多Web开发人员的能力范围内实现了分页。 另外,它将大大简化由于联接和其他条件而可能已经很复杂的查询。 最重要的是,我认为这样的子句可能会随着时间的流逝而在内部进行优化的机会更大,因为该逻辑完全在Microsoft的控制之下。 不久前,我在另一个论坛上提出了这个问题,许多答复似乎表明这是不可取的。 假设所有现有的分页技术都将保留不变,那么不添加此类子句的可能原因是什么?对于像我这样的人来说,那就更好了。 任何人都可以以充分的理由说明为什么微软没有这样做吗?

2
SQL Server:是否涵盖所有列的索引?
我们的团队继承了一个应用程序和关联的数据库。以前的开发人员似乎执行了一个规则,即每个表上的每个索引都有一个INCLUDE子句,以始终添加不属于键一部分的每个列。这些表平均具有2到5个索引或唯一约束以及外键。 目的是不管在数据库上引发什么查询,都是为了提高SELECT性能,因为访问是通过默认(但并非总是)检索所有列的ORM进行的。我们希望这样做的副作用是增加了存储需求(可能如此),并且增加了INSERT / UPDATE / DELETE的开销时间。 问题是,这是明智的策略吗?我们的团队具有SQL Server的历史,但是没有成员会认为自己是其内部行为的专家(尽管已经提出了一个问题,即如果该策略是最佳策略,那么现在是否将其作为默认策略?)。我们还应该期待其他哪些副作用(数据库服务器CPU /内存/ TempDB的使用情况等),或者上述某些假设是否正确? 此外,该应用程序既可以安装到SQL Server内部部署(自2012年以来的版本)中,也可以安装到Azure SQL中-如果我们为两者之间的任何差异或Azure的其他副作用做好了准备,方法?

1
SQL每隔几分钟就会从缓冲区缓存中转储所有页面
我有一个运行多个数据库的SQL2012 SP4节点。 该服务器有20GB可用内存,已为SQL分配了14GB内存(包装盒上没有其他任何东西)。 SQL每隔几分钟就会转储整个缓冲区高速缓存。页面预期寿命为零,缓冲区高速缓存描述符显示高速缓存中没有任何内容。 我查看了资源监视器通知,并且通知每隔几毫秒从高/稳定/低反弹一次: RESOURCE_MEMPHYSICAL_LOW RESOURCE_MEM_STEADY RESOURCE_MEMPHYSICAL_LOW 时间戳相隔几毫秒。PLE本质上是锯齿形。 我已经在SQL2012 SP1和以下问题之前看到过这种情况: 未使用缓冲区高速缓存中的SQL Server 2012可用页 似乎是类似的问题,尽管我已经更新到SP4。 我尝试为该服务帐户打开LPIM,并且尝试弄乱最大内存设置。降低最大内存似乎已导致缓冲区缓存更频繁地清空。 关于下一步要检查的任何想法? 服务器工作负载实际上什么都没有(我正在滚动浏览ERP系统中的项目列表,在缓存再次下降之前,它达到了40-50MB)。 这很有趣,因为我从SP1升级以尝试解决此问题-那里的缓存已达到500MB左右。从那以后,我将最大内存设置降低到14GB,这似乎使情况变得更糟。 我想知道Windows是否惊慌并在SQL上发出有关内存压力的不正确通知-随之而来的是,将最大内存设置为无界的服务器似乎运行正常,但永远不会填满超过几百MB的缓存-但现在它刚到50岁... 更多信息:对于那些询问 核心数: 4 数据库大小: 80GB 错误日志显示: A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 0 seconds. Working set …

2
计算列无法保留,因为该列是不确定的
我知道这不是第一次提出此类问题。 但是,为什么在以下情况下创建的持久化计算列是“不确定的”。答案应该总是一样的,对不对? CREATE TABLE dbo.test (Id INT, EventTime DATETIME NULL, PosixTime INT NOT NULL) GO DECLARE @EventTime DATETIME = '20181001 12:00:00' DECLARE @GPSTime INT = DATEDIFF(SECOND, '19700101', @EventTime) INSERT INTO dbo.Test(Id, EventTime, PosixTime) VALUES (1, @EventTime, @GPSTime) , (2, NULL, @GPSTime) GO SELECT * FROM dbo.test GO ALTER TABLE dbo.test …

2
升序关键问题-品牌为“ Stationary”的前导列-SQL Server
我一直在研究数据库中运行缓慢的查询,并得出结论,这是一个经典的升序关键问题。由于几乎总是不断地插入新行,并且每隔30分钟就会运行一条用于从数据库中提取最新数据的SQL代码,因此每30分钟更新一次统计信息的第一种选择听起来像是在浪费资源。 因此,我研究了跟踪标志2389,它在原则上应该有帮助,但是这要求Leading列被标记为Ascending,并且当我使用Trace Flag 2388检查(PK)索引统计信息时,我发现该领先列实际上是品牌为固定-与同时更新其他表上的多个PK索引相同。 关于文具品牌的结果似乎没有太多指导,但是我确实发现KB2952101表示如果少于90%的插入物大于旧的最大值,它将被归类为文具。我们所有的插入内容都是新提交的内容,前导列是bigint IDENTITY列,因此100%的插入内容应大于先前的最大值。 所以我的问题是,当列显然是升序的时候,为什么要将该列打上固定的名称? 较早尝试解决某些日常运行的SQL(确实运行良好)的问题,导致设置了一项工作来每晚更新此表的统计信息。该更新不执行FULLSCAN,所以采样扫描有时可能会丢失新行,因此它并不总是以升序显示吗? 我唯一想到的可能会影响此的原因是,我们有一个后台运行的存档作业,删除了一定期限内的行。这会对品牌产生影响吗? 该服务器是SQL Server 2012 SP1。 更新:另一天,另一项统计信息更新-相同的固定品牌。自从之前的统计信息更新以来,已经有28049个新插入内容。每行都有插入时间的时间戳,因此如果我从timestamp <'20161102'的表中选择max(id),则会得到23313455类似地,如果我对今天的统计信息进行更新,则会得到23341504。 它们之间的区别是28049个新插入物,因此,如您所见,所有新插入物都被赋予了新的升序键(如预期的那样),这表明前导柱应被标记为升序而不是固定的。 在同一时期,我们的归档作业删除了213,629行(我们正在慢慢清除旧数据)。行数减少是否有可能为固定品牌做出贡献?我之前对此进行了测试,但看起来没有任何区别。 更新2:另一天,另一项统计信息更新,该列现在标记为升序!根据有关影响删除的理论,我检查了插入与删除相比更新的百分比,昨天有13%是插入,而前两天插入约占12%。我认为这没有任何决定性的意义。 有趣的是,相关表平均插入该主表中的每一行都会插入4行,并同时更新其统计信息,其IDENTITY PK列是否仍为Stationary !? 更新3:在周末,我们会获得更多插入。今天早上,领导小组回到了固定式。在上次统计信息更新中,我们有46840次插入,而只有34776次删除。 再次,有趣的是,我上面提到的相关表现在将其前导列标记为Ascending。没有文档可以解释这一点吗? 更新4:大约一周前,归档作业已经清除了积压的订单,因此我们一直在删除大约三分之二的要插入的行。这些统计数据在相关表中显示出混合的结果,其中一个显示固定,而两个显示上升,尽管它们均按相似的比例进行更新。

1
I / O在数据库上冻结,并且I / O每天在数据库中恢复为完整备份并在日志中恢复
我想说的是,每天我都会在日志文件中收到该消息。 首先,I / O被冻结在数据库(DatabaseName)上,消息出现在日志中。消息就像 I / O被冻结在数据库(DatabaseName)上。不需要用户操作。但是,如果没有立即恢复I / O,则可以取消备份。 然后在Database(DatabaseName)上恢复I / O消息,如下所示 在数据库(DatabaseName)上恢复了I / O。无需用户操作。 最后,像这样的消息,备份成功完成了数据库 无需用户操作 它是我的生产审核数据库,并且具有软件环境,例如: Windows Server 2012 R2 SQL Server 2012 VMware Tools 我的生产数据库“ 恢复模型 ”是“ 完整 ”恢复模型。并且从SQL Server中的登录ID设置了维护计划备份。它对所有数据库都具有“ sysadmin ”特权。 备份已通过“维护计划”备份在特定的时间表进行设置,例如每天下午4.00。而且Always Backup会按计划的时间间隔成功完成。 为什么会在计划备份时间生成此类日志消息。这类消息是否会影响我的生产数据库性能。我的生产数据库中的(备份/还原)数据一致性中是否有问题。 任何建议将不胜感激。

2
在分区少量数据时获得切合实际的查询计划
我们正在使用分区来减少由于锁定而导致的OLTP系统体验受阻的程度,该分区方案可根据客户ID将工作表分为100个分区。但是,在测试过程中,我们发现执行计划没有按照我们期望的方式选择。 该测试方案是一个具有300,000个联系记录的单个客户(每个联系人的数据被拆分为两个表),所有记录都位于一个分区中,并通过查询在该客户分区中查找500条特定的行。您可能希望像哈希匹配之类的东西会在计划的早期消除不必要的299,500,但是SQL Server似乎选择选择整个表的记录计数并将其平均分配给所有分区,然后再考虑如何它要处理的记录很多,这导致它选择了一个嵌套循环,并在此过程的后半段消除了不需要的记录。通常,此时间是针对非分区表的相同查询的9倍。 奇怪的是,在选择中添加一个选项(重新编译)给出了一个明智的计划,但是我不知为何会有所作为。这不是存储过程,在测试过程中,我们会在每次测试运行之前清除过程缓存。 当所涉及的表未分区时,即,由于估计的行数与实际的行数匹配,因此每次都选择一个适当的计划时,不会出现此行为 任何对此行为的见解将不胜感激。 模式设置: USE [Scratch] GO CREATE SCHEMA part GO CREATE PARTITION FUNCTION [ContactPartition](smallint) AS RANGE LEFT FOR VALUES (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, …

2
域管理员无法连接到SQL Server
我有Windows Server 2012 R2域控制器和数据库服务器(W2K12R2 / SQL Server 2012)。 作为允许的用户组,我已授予组“ domain-admins” sysadmin权限。 但是以某种方式,任何域管理员都无法连接到该SQL Server,但是当我直接将域管理员用户添加为允许用户时,它确实可以工作。活动目录确实起作用。RDP登录有效。我想念什么吗? 有人知道如何授予对整个“域管理员”组的访问权限吗? 错误消息是: 伺服器名称:SRV-DB 错误号:18456 施韦格勒:14 状态:1 代码行:65536 在事件日志中说(翻译): 检查具有基础结构故障的基于令牌的服务器访问时出错。 状态为“ 1”。我使用RDP作为域管理员登录到该数据库服务器。我必须以“以管理员身份运行”显式启动SSMS。然后,我可以访问“本地主机”。如果我不以管理员身份启动SSMS,则无法这样做。我认为在“域管理员”组中就足够了。

3
锁使用的内存
我很好奇,数据库容量为128 GB的SQL 2012 Enterprise Edition的其中一个为370 GB,并且还在不断增长,锁(OBJECTSTORE_LOCK_Manager)内存管理员使用的内存量显示7466016 KB。我也可以通过查看性能计数器来确认select * from sys.dm_os_performance_counters where counter_name = 'Lock Memory (KB)' 但是,当我运行查询时 select count(*) from sys.dm_tran_locks 它仅显示16个锁。那么,什么使用了超过7 GB的锁。有没有办法找出来? 这是否意味着一旦分配了用于锁的内存,SQL尚未释放它?在过去的1小时内,我看不到锁数超过500,但是锁内存保持不变。 最大服务器内存为106 GB,我们没有在内存中使用锁定页面,并且在过去12小时内我没有看到任何内存压力或错误日志中的任何错误。可用兆字节计数器显示了超过15 GB的可用内存。 活动监视器始终显示0个等待任务,因此显然没有阻塞。 考虑到SQL Server锁占用约100个字节的内存,因此7 GB的内存很大,并试图找出谁在使用它。 我通过锁定计数运行服务器仪表板报告的最重要的事务,它说:“当前系统上没有正在运行的锁定事务。但是,锁定内存仍然如上所示。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.