Questions tagged «sql-server-2012»

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

3
tempdb日志文件的最佳做法
我在这里和那里已经读过许多关于如何配置tempdb数据文件的博客,但是我没有找到有关tempdb日志文件的任何信息。 这是我目前在tempdb中使用的策略: 我已使用Paul Randal的建议来分割tempdb数据文件 我已将tempdb数据文件的大小设置为最大,并禁用了自动增长。例如,我有100gb的可用磁盘空间,并将8个tempdb数据文件的大小分别设置为10gb。如布伦特·奥扎尔(Brent Ozar)所建议,这可以防止磁盘碎片,而且我的日志文件还有20GB可用空间。 但是就像我说的,没有人在谈论tempdb日志文件。我该怎么办?在我的设置中,此文件与tempdb数据文件位于同一位置。我应该与tempdb日志文件一起使用的大小和自动增长值是多少?

2
SQL Server数据压缩绝对适合只读数据库吗?
我读过一些有关SQL Server数据压缩的文献,指出写入成本增加到通常需要的四倍。似乎还暗示这是数据压缩的主要缺点,强烈暗示对于只读存档数据库,使用100%填充页面的数据压缩将提高性能(仅少数例外)。 以上陈述正确吗? 数据压缩与其他方式(用于读取)之间的主要“差异”是什么? “ CPU + x%”? “ IO -y%”? 页面拆分发生了吗? tempdb的用法? RAM使用率? 和写作? 出于这个问题的目的,您可以将上下文限制为大型(> 1TB)数据库的PAGE级压缩,但是始终欢迎其他注释。 参考文献: SQL Server存储引擎博客(DW场景显示压缩非常有优势) 数据压缩:策略,容量规划和最佳实践 确定压缩内容的更详细方法涉及分析每个表和索引的工作负载特征。它基于以下两个指标: U:相对于该对象的总操作数,特定表,索引或分区上的更新操作数的百分比。U的值越低(即不经常更新表,索引或分区),则它越适合用于页面压缩。 S:表,索引或分区上的扫描操作相对于该对象上的全部操作的百分比。S的值越高(即,表,索引或分区大部分被扫描),则用于页面压缩的候选值越好。 以上两种情况都明显偏向于建议为DW样式的数据库建议页面压缩(读密集型/排他性大数据操作)。

2
SQL Server 2012可用性组是否为“ AlwaysON”?
在传统的SQL Server群集中,当发生故障转移时,连接到SQL Server失败实例的所有客户端都会失去连接,并且每个客户端都必须重新建立与故障转移群集实例的新连接。 AlwaysON可用性组是否可以缓解此问题?如果SQL Server 2012 AlwaysON可用性组的故障转移对连接到SQL Server的客户端透明吗?

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 …


3
NOLOCK提示更改返回记录的顺序
在表Client字段上有一个聚集索引LastName。 当我简单地转储表中的所有记录时,除非按(nolock)提示使用提示,否则它们将按字母顺序显示。该提示会更改记录的顺序。应该是?。我敢肯定,没有其他会话具有对该表所做的更改的开放事务(至少sp_who2没有显示任何内容)。 如何解释顺序上的差异? 从评论中提取的其他信息: 没有命令。非聚集索引是否应强制执行该命令? 即使使用指定聚簇索引的索引提示,查询仍然返回不同的顺序。应该吗 我想知道为什么nolock在不明显更改计划的情况下更改返回记录的顺序。 我对它们做了一个WinDiff-除了(nolock)[查询提示] 之外,其他都一样。

2
优化25+百万行的查询
我正在使用MS SQL,并且必须在同一表上以不同条件运行多个查询。最初,我在原始表上运行了每个查询,尽管它们都共享一些过滤条件(即日期,状态)。这花费了很多时间(大约2分钟)。 数据行中有重复项,并且所有索引都是非聚集的。我只对4列的标准感兴趣,并且结果应仅输出所有查询的计数。 列需要:TABLE,FIELD,AFTER,DATE,并且对每一个的索引DATE和TABLE。 在仅创建了我需要的字段的临时表之后,它降到了1:40分钟,这仍然非常糟糕。 CREATE TABLE #TEMP ( TABLE VARCHAR(30) NULL, FIELD VARCHAR(30) NULL, AFTER VARCHAR(1000) NULL, DATE DATETIME, SORT_ID INT IDENTITY(1,1) ) CREATE CLUSTERED INDEX IX_ADT ON #TEMP(SORT_ID) INSERT INTO #TEMP (TABLE, FIELD, AFTER, DATE) SELECT TABLE, FIELD, AFTER, DATE FROM mytbl WITH (NOLOCK) WHERE TABLE = 'OTB' …

1
如何允许执行存储过程但不能执行写操作?
我想在我的SQL Server 2012实例上设置一个“读取”用户。我想让他有权执行任何存储过程,函数或直接SQL语句,该语句从所有表和视图中检索数据,但不进行更新或插入(即,读取任何内容而不写入任何内容)。 我是否可以在不按名称专门授予每个函数或存储过程权限的情况下进行设置,而是授予他对任何函数或存储过程的执行权限,而只是取消修改表的权限? 如果我改为运行SQL Server 2008,会发生什么变化吗? 澄清和补充: 如果存储过程更改了数据,则用户应收到错误消息(拒绝修改或完全拒绝访问存储过程)。 如果潜在的解决方案涉及拒绝权限,我是否可以不授予某些权限而不是拒绝? 是否可以在一条语句中将拒绝应用于数据库中的所有表,视图等(现在和将来存在)?


2
LATCH_EX等待资源METADATA_SEQUENCE_GENERATOR
我们有一个生成库存报告的过程。在客户端,该过程拆分可配置数量的工作线程,以为报告构建大量数据,这些数据对应于许多商店(可能是数千个,通常是几十个)中的一个商店。每个工作线程都调用一个执行存储过程的Web服务。 用于处理每个块的数据库过程将一堆数据收集到#Temporary表中。在每个处理块的末尾,数据将被写入tempdb中的永久表。最后,在该过程结束时,客户端上的一个线程从永久tempdb表中请求所有数据。 运行此报告的用户越多,获取速度就越慢。我分析了数据库中的活动。在某一时刻,我看到35个单独的请求在流程的某一时刻全部被阻塞。所有这些SPID LATCH_EX在资源上的类型等待时间约为50 ms METADATA_SEQUENCE_GENERATOR (00000010E13CA1A8)。一个SPID拥有此资源,而其他所有SPID都被阻止。我没有在网络搜索中找到有关此等待资源的任何信息。 我们正在使用的tempdb中的表确实有一IDENTITY(1,1)列。这些SPID是否正在等待IDENTITY列?我们可以使用什么方法来减少或消除阻塞? 该服务器是集群的一部分。该服务器在64位Windows 2008 R2 Enterprise上运行64位SQL Server 2012 Standard Edition SP1。该服务器具有64 GB RAM和48个处理器,但是该数据库是标准版本,因此只能使用16个。 (请注意,我对在tempdb中使用永久表来保存所有这些数据的设计并不感到兴奋。对此进行更改将是一个有趣的技术和政治挑战,但我愿意接受建议。) 更新4/23/2013 我们已经与Microsoft开立了支持案例。随着我们了解更多信息,我将不断更新此问题。 更新5/10/2013 SQL Server支持工程师同意等待是由IDENTITY列引起的。删除IDENTITY消除了等待。我们无法在SQL 2008 R2上重复该问题;它仅发生在SQL 2012上。

2
架构更改会“破坏”可用性组,还是透明处理?
我的组织计划采用SQL Server 2012可用性组,并且我试图了解它将对我们的应用程序升级过程产生什么影响(如果有)。 我们每8周发布一次应用程序更新,任何发布都可能包含架构更改和/或数据迁移。 我想了解的是HA / DR解决方案是否透明地处理架构更改(新列,索引添加到第二级),还是在每个实例上创建架构然后重新打开Always On所需的手动干预。 我假设的数据迁移部分是透明处理的,但也想确认一下。 我想我也在做出一个笼统的假设,即基于可用性组配置的这些行为也没有差异,这可能也是错误的。请告诉我。 简而言之; 在我的应用程序的任何给定发行版中,我都可以通过向表中添加列来更改非常大的表(10s至1亿亿条记录)。一些列可能是“ net new”的,因此它们可以利用企业在线模式更改功能。其他列可能是对现有列的重构(FullName被拆分为FirstName和LastName),并且将对表中的每一行运行迁移以填充这些字段。这些行为是否需要DBA更改AlwaysOn配置,或者默认情况下会进行处理,并且所有辅助节点都“免费”获得DDL和DML语句? 感谢您的澄清。

6
由于会话处于终止状态,因此无法继续执行。在建立聚集索引时
尝试创建聚簇索引时出现以下错误 该语句已终止。 消息596,级别21,状态1,行0 无法继续执行,因为会话处于终止状态。 消息0,级别20,状态0,行0 当前命令发生严重错误。结果(如果有的话)应丢弃。 索引是: BEGIN TRANSACTION SET QUOTED_IDENTIFIER ON SET ARITHABORT ON SET NUMERIC_ROUNDABORT OFF SET CONCAT_NULL_YIELDS_NULL ON SET ANSI_NULLS ON SET ANSI_PADDING ON SET ANSI_WARNINGS ON COMMIT BEGIN TRANSACTION GO CREATE CLUSTERED INDEX IX_CO_DES_INPUT ON dbo.CO_DES_INPUT(DESIGN_ID, PRODUCT_INPUT_NUM, INPUT_NAME) WITH(STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = …

6
如何在MS SQL Server上修复混乱的复制
我从备份还原了数据库。数据库使用复制发布到其他服务器。假设数据库还原会破坏复制,我尝试删除该复制并重新创建它(我们有一个脚本可以从头开始重新创建它)。我不确定自己所做的确切,但是现在它处于完全混乱的状态,我无法修复。 首先,我尝试摆脱订阅(在发布服务器上): EXEC sp_dropsubscription @publication = 'PublicationName', @article = N'all', @subscriber = 'SubscriberServerName' 这似乎有效。SELECT * FROM syssubscriptions没有显示结果。在订阅服务器上,SSMS> {SubscriberServer}>复制>本地订阅-订阅不存在。 因此,我尝试删除该出版物。SSMS> {服务器}>复制>本地发布> {PublicationName}>删除。这给出以下错误信息: Could not delete publication 'PublicationName'. Could not drop article. A subscription exists on it. Changed database context to 'DatabaseName'. (Microsoft SQL Server, Error: 14046) 好的,所以我尝试删除文章: EXEC sp_droparticle @publication = …

1
来自系统健康状况扩展事件的错误流程利用?
我最近一直在努力了解存储在系统健康状况扩展事件事件文件中的数据或度量。 我们正在尝试使用此处提供的系统健康状况来实施性能指标的数据收集 有报告提供了从名为“系统运行状况”的事件中收集的指标,如CPU利用率,其他进程利用率等。 scheduler_monitor_system_health_ring_buffer_recorded 对于少数繁忙的服务器,我无法理解为什么报告中列为“ SQL CPU利用率”的字段“ process_utilization”大部分时间都高于100。在高峰时间,它在120-160之间变化,因此该报告是始终显示CPU高于100,即使我从服务器活动监视器中检查也是如此。 我已经在Github中提出了这个问题,但似乎没有解决方法或没有回应。 因此,我的问题是 如何使用记录的系统运行状况环形缓冲区获取服务器的SQL CPU利用率的准确数字? 报告还显示了根据其报告计算出的以下2个字段的计数器 100-System_idle-process_utilization和OtherProcessUtil 100-system_idle作为SystemUtil 这些OtherProcessUtil和SystemUtil需要/有什么帮助? 我还看到每次每次的内存利用率始终显示为100。这似乎也不正确。有人注意到吗? 其他工具(例如Idera和sentry)(我测试过)没有显示相同服务器的CPU使用率超过100%。对于相同的负载,我进行了并排比较。

2
创建表时聚簇索引创建失败
运行以下脚本时出现错误; IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='Table_Name') BEGIN CREATE TABLE Table_Name ( Field_Name_1 binary(32) NOT NULL CONSTRAINT PK_Name_Goes_Here PRIMARY KEY NONCLUSTERED , Field_Name_2 int NOT NULL , Field_Name_3 datetime NOT NULL INDEX IX_Name_Goes_Here CLUSTERED ) END 特别是聚集索引的创建会引发以下错误: 消息1018,级别15,状态1,第15行 'INDEX'附近的语法不正确。如果要将其用作表提示的一部分,则现在需要A WITH关键字和括号。有关正确的语法,请参见SQL Server联机丛书。 这很奇怪,因为它适用于我们所有的服务器,但特定的质量检查服务器除外。我们已经解决的问题是在表创建语句之外创建聚簇索引,但是如果有人之前遇到过此问题,我将很感兴趣。

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.