Questions tagged «sql-server-2012»

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

1
FlushCache消息在特定时间出现在日志中
最近,我们一直在遇到许多数据库性能问题,并且我一直在尝试看看是否能找出原因。我们没有DBA(我是软件开发人员),所以我有点像在指点翅膀,而且我在网上找到的许多内容对我来说就像是一门外语。 我们每天早上都重新启动SQL Server,因为这是它在工作日内运行的唯一方式。我注意到每天凌晨5点左右,我们开始每两分钟在日志中收到此消息: FlushCache:针对DB 9:0用97168 ms的7432次写入清理了11848个buf(避免了8139个新的脏buf) 最后未完成的目标:4,avgWriteLatency 32 平均吞吐量:0.72 MB /秒,I / O饱和度:11635,上下文切换18849 这些数字当然每次都会有所不同,但是在我重新启动服务器之前,该消息一遍又一遍地重复着相同的消息。我不确定如何解释这一点,我一直在尝试向Google寻求它,而我所收集的只是这意味着I / O可能有问题,并且花费的时间比预期的要长。我们最近改用了SSD,因此我认为这应该不是写问题。 有人能对此有所启示吗?

1
设置统计IO-工作表/工作文件
我正在执行查询,产生计划: 统计IO: Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'Workfile'. Scan count 128, logical reads 5952, physical reads 576, read-ahead reads 6080, lob logical reads 0, lob physical reads 0, …

5
为什么此显式强制转换仅导致链接服务器出现问题?
我正在通过原始服务器上的视图从链接服务器查询数据。视图必须包括几个标准化列,如Created,Modified和Deleted,但是在这种情况下,源服务器上的表中不具有任何合适的信息。因此,这些列被显式转换为它们各自的类型。我更新了视图,更改了 NULL AS Modified 至 CAST(NULL as DateTime) as Modified 但是,执行此更新后,视图将触发以下错误消息: 消息7341,级别16,状态2,第3行无法从链接服务器“”的OLE DB访问接口“ SQLNCLI11”获取列“(用户生成的表达式).Expr1002”的当前行值。 我们通常在原始服务器上进行了这种“显式强制转换”更改,而无需担心,我怀疑问题可能与所涉及的服务器版本有关。我们确实不需要应用此强制转换,但感觉更干净。现在,我只是好奇为什么会这样。 服务器版本(来源): Microsoft SQL Server 2012-11.0.5058.0(X64)2014年5月14日18:34:29版权所有(c)Windows NT 6.1(Build 7601:Service Pack 1)(Hypervisor)上的Microsoft Corporation Enterprise Edition(64位) 服务器版本(链接): Microsoft SQL Server 2008 R2(SP1)-10.50.2500.0(X64)2011年6月17日版权所有(c)Windows NT 6.1(Build 7601:Service Pack 1)上的Microsoft Corporation Enterprise Edition(64位)(Hypervisor ) 编辑 我只是意识到我没有发布所有有问题的列而犯了一个错误,我必须为遗漏重要的细节表示歉意。我不知道我怎么没早注意到这一点。但是,问题仍然存在。 转换为DateTime时不会发生错误的转换,而是将列转换为UniqueIdentifier时发生。 这是罪魁祸首: CAST(NULL AS UniqueIdentifier) …

2
连接池被重置,错误:18056,严重性:20,状态:46。&Perfmon计数器未显示
我们使用SQL身份验证(以减少连接池的数量)和.NET 4.0连接字符串连接到Windows 2008 R2 Enterprise Server上的SQL Server Enterprise Edition 2012 SP1: Microsoft SQL Server 2012(SP1)-11.0.3000.0(X64) 2012年10月19日13:38:57 版权所有(c) Windows NT 6.1(Build 7601:Service Pack 1)上的Microsoft Corporation Enterprise Edition(64位) 我们使用大约50台服务器,将其分为网站的不同部分8个不同的组。 我们的网站正在使用此SQL Server记录访问跟踪数据。在过去的几天中,它吐出了有关重置连接池的以下消息: 客户端无法重用SPID 1327的会话,该会话已被重置用于连接池。故障ID为46。此错误可能是由较早的操作失败引起的。在此错误消息之前,请检查错误日志中是否有失败的操作。 错误日志显示为: 错误:18056,严重性:20,状态:46 。客户端无法重用SPID 959的会话,该会话已被重置用于连接池。失败ID为46。此错误可能是由较早的操作失败引起的。在此错误消息之前,请检查错误日志中是否有失败的操作。 用户“ xxxx”的登录失败。原因:在重新验证连接登录时,无法打开在登录对象中配置的数据库'xxxxxxxx'。[客户:10.xx.xx.xxx] 经过一番挖掘后,我在CSS博客上找到了该文档:工作原理:错误18056 –客户端无法重用SPID ##进行会话,该会话已被重置用于连接池,Aaron Bertrand 对此进行了重置:故障排除错误18456。我知道错误号不同,但是失败ID相同,并且消息数量相同)。 故障ID 46表示登录名没有权限。我们的登录名默认为master数据库,并且数据库名称在连接字符串中指定。 我想检查连接字符串池等的数量,并检查Perfmon中所有的计数器.Net Data Provider for SqlServer。它只为我defaultdomain9675提供了实例的选项,因此我选择了那是假设它是我们的Datacentre网络的系统生成的ID名称。不幸的是,所有计数器的读数均为零。在我们的其他一台主服务器上,连接池徘徊在10个左右,这是我期望在具有这种负载的正常服务器上看到的。 我的问题是三折 …

4
诊断“有时”缓慢查询的建议
我有一个存储过程,该过程通过覆盖索引从索引视图返回结果。通常,它运行速度很快(〜10毫秒),有时甚至可以运行8秒钟。 这是一个随机执行的示例(注意:这不是一个缓慢的执行,但是查询文本与传递的值相同): declare @p2 dbo.IdentityType insert into @p2 values(5710955) insert into @p2 values(5710896) insert into @p2 values(5710678) insert into @p2 values(5710871) insert into @p2 values(5711103) insert into @p2 values(6215197) insert into @p2 values(5710780) exec ListingSearch_ByLocationAndStatus @statusType=1,@locationIds=@p2 这是SPROC: ALTER PROCEDURE [dbo].[ListingSearch_ByLocationAndStatus] @LocationIds IdentityType READONLY, @StatusType TINYINT AS BEGIN SET NOCOUNT ON; …

3
通过互斥子类在类型/子类型设计模式中实现子类型的子类型
介绍 为了使该问题对将来的读者有用,我将使用通用数据模型来说明我面临的问题。 我们的数据模型由3个实体,这应标明的A,B和C。为了使事情简单,它们的所有属性都是int类型。 实体A具有以下属性:D,E和X; 实体B具有以下属性:D,E和Y; 实体C具有以下属性:D和Z; 由于所有实体都具有相同的属性D,因此我决定采用类型/子类型设计。 重要提示:实体是互斥的!这意味着实体是A或B或C。 问题: 实体A和B具有另一个公共属性E,但是该属性在实体中不存在C。 题: 如果可能的话,我想利用上述特征进一步优化设计。 老实说,我不知道如何执行此操作,也不知道从哪里开始尝试,因此不知道该帖子。

2
为什么DELETE对性能有持续的影响?
最后是一个测试脚本,用于比较@table变量和#temp表之间的性能。我认为我已正确设置-性能计时已从外部获取在DELETE / TRUNCATE命令进行的。我得到的结果如下(以毫秒为单位)。 @Table Variable #Temp (delete) #Temp (truncate) --------------- -------------- ---------------- 5723 5180 5506 15636 14746 7800 14506 14300 5583 14030 15460 5386 16706 16186 5360 只是为了确保我理智,这表明CURRENT_TIMESTAMP(aka GetDate())是在语句时而不是批处理时使用的,因此TRUNCATE / DELETE与SET @StartTime = CURRENT_TIMESTAMP语句之间不应存在任何交互。 select current_timestamp waitfor delay '00:00:04' select current_timestamp ----------------------- 2012-10-21 11:29:20.290 ----------------------- 2012-10-21 11:29:24.290 当使用DELETE清除表时,在第一次运行和随后的运行之间的跳转中,这是非常一致的。我对DELETE的了解缺少什么?我已经重复了很多次,交换了命令,调整了tempdb的大小,使其不需要增长等。 CREATE TABLE …

1
列存储索引的结构是什么?
代号Denali为SQL Server 2012的新功能之一是Columnstore索引。 我对常规的旧行存储索引了解很多,例如b树结构,叶级页面和b树页面之间的存储差异,所包含字段的影响,优化使用它们,键顺序等。 我很难获得有关columnstore索引内部的任何良好信息。 结构如何? 有树吗?还有其他结构吗? 数据如何组织? 哪种类型的特定运算符最适合使用它? 使用其他反图案时要避免使用它们? 我可以找到的很多关于它们的内容基本上与“正常”索引完全相反,即,没有键的顺序,没有包含的字段,仅是非聚集的。 任何见解都表示赞赏。

2
在SQL Server中检测锁定的表或行
我正在尝试了解/学习如何跟踪被阻止会话的详细信息。 因此,我创建了以下设置: create table foo (id integer not null primary key, some_data varchar(20)); insert into foo values (1, 'foo'); commit; 现在,我从两个不同的客户端两次连接到数据库。 第一届会议: begin transaction update foo set some_data = 'update' where id = 1; 我明确地不承诺在那里保留锁。 在第二届会议上,我发表了同样的声明,当然还有人由于锁定而等待。现在,我尝试使用不同的查询浮动,以查看会话2正在等待foo表。 sp_who2 显示以下内容(我删除了一些列以仅显示重要信息): SPID | 现状 BlkBy | DBName | 指令| SPID | 要求 ----- …

1
依靠INSERT的OUTPUT子句的顺序是否安全?
给定此表: CREATE TABLE dbo.Target ( TargetId int identity(1, 1) NOT NULL, Color varchar(20) NOT NULL, Action varchar(10) NOT NULL, -- of course this should be normalized Code int NOT NULL, CONSTRAINT PK_Target PRIMARY KEY CLUSTERED (TargetId) ); 在两种略有不同的方案中,我想插入行并从标识列返回值。 场景1 INSERT dbo.Target (Color, Action, Code) OUTPUT inserted.TargetId SELECT t.Color, t.Action, t.Code …

2
锁定创建表
在另一个应用程序中,我被糟糕的设计所震惊:多个线程EnsureDatabaseSchemaExists()同时执行一个方法,基本上看起来像这样: IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type = N'U') BEGIN CREATE TABLE MyTable ( ... ); END 但是,即使在SERIALIZABLE事务中执行,此代码似乎也不是线程安全的(即,并行代码尝试多次创建表)。有没有机会强迫SELECT语句获取一个锁定,从而防止另一个线程执行相同的SELECT语句? 多线程EnsureSchemaExists()方法是否有更好的模式?

3
SQLCMD命令无法插入重音符号
我试图运行sqlcmd.exe以便从命令行设置新数据库。我正在Windows 7 64位上使用SQL SERVER Express 2012。 这是我使用的命令: SQLCMD -S .\MSSQLSERVER08 -V 17 -E -i %~dp0\aqualogyDB.sql -o %~dp0\databaseCreationLog.log 这是一部分sql文件创建脚本: CREATE DATABASE aqualogy COLLATE Modern_Spanish_CI_AS WITH TRUSTWORTHY ON, DB_CHAINING ON; GO use aqualogy GO CREATE TABLE [dbo].[BaseLayers] ( [Code] nchar(100) NOT NULL , [Geometry] nvarchar(MAX) NOT NULL , [IsActive] bit NOT NULL …

3
在选择中仍具有匹配附加字符的唯一标识符
我们正在使用带有唯一标识符的SQL Server 2012,并且我们注意到在进行选择时在末尾添加了其他字符(而不是36个字符)时,它仍然会返回与UUID的匹配项。 例如: select * from some_table where uuid = '7DA26ECB-D599-4469-91D4-F9136EC0B4E8' 返回带有uuid的行7DA26ECB-D599-4469-91D4-F9136EC0B4E8。 但是,如果您运行: select * from some_table where uuid = '7DA26ECB-D599-4469-91D4-F9136EC0B4E8EXTRACHARS' 它还返回带有uuid的行7DA26ECB-D599-4469-91D4-F9136EC0B4E8。 选择SQL Server时,似乎会忽略除36个字符之外的所有字符。这是错误/功能还是可以配置的东西? 这不是一个大问题,因为我们在前端进行了长度验证,但对我来说似乎不是正确的行为。

6
什么是SQL Server“ Denali”?什么是新的?
我在MSDN的下拉列表中找到了一个名为SQL Server“ Denali”的新标题,但没有找到很多有关它的信息: 新增功能(本文档仅作为预览,仅供参考) SQL Server“ Denali”的9大新功能 是否有人在此版本中具有有关新功能或重大错误修复的更详细的信息?我希望有人使用或测试过它。 新的功能 顺序 扩展的文件流(感谢Eric Humphrey) 抵销和收取(按条款排序) 内存管理器更改 LAG(..)和铅(..).. OVER(分区By..Order通过)条款(感谢GBN) 亚伦的名单


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.