Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。



2
快速查看为SQL Server分配了多少RAM?
使用SQL Server 2005,您可以查看任务管理器,至少可以粗略地了解为SQL Server分配了多少内存。 使用SQL Server 2008,即使SQLServer:Memory Manager /总服务器内存(KB)性能计数器的状态为16,732,760,工作集或提交大小也不会真正超过500 MB。 是否有设置可以在任务管理器中实际显示服务器内存?还是它们更改了SQL Server中内存使用方式的结果


1
SQL Server如何知道谓词之间的关联?
在诊断基数估计不佳(尽管索引简单,统计信息最新等)并因此查询计划不佳的SQL Server 2008 R2查询时,我发现了一个可能相关的知识库文章: FIX:运行查询时性能不佳包含SQL Server 2008或SQL Server 2008 R2或SQL Server 2012中的关联AND谓词 我可以猜测知识库文章“关联”的含义,例如谓词2和谓词1主要针对相同的行。 但是我不知道SQL Server如何知道这些相关性。一个表是否需要一个包含来自两个谓词的列的多列索引?SQL是否使用统计信息来检查一列中的值是否与另一列相关?还是使用其他方法? 我问这个有两个原因: 确定使用此修补程序可以改善我的表和查询 知道我应该在索引编制,统计数据等方面做些什么来影响#1

3
通过代码创建新函数(如果不存在)
我想通过脚本在数据库中创建新功能。脚本代码如下: IF Exists(Select * From sys.sysobjects A Where A.name =N'fn_myfunc' and xtype=N'FN') return; CREATE FUNCTION fn_myfunc () returns varchar(10) AS Begin ... End 但是当我执行上述脚本时,SQL Server返回错误: 'CREATE FUNCTION' must be the first statement in a query batch.

4
主键中指定的排序顺序,但在SELECT上执行排序
我将传感器数据存储在表SensorValues中。该表和主键如下: CREATE TABLE [dbo].[SensorValues]( [DeviceId] [int] NOT NULL, [SensorId] [int] NOT NULL, [SensorValue] [int] NOT NULL, [Date] [int] NOT NULL, CONSTRAINT [PK_SensorValues] PRIMARY KEY CLUSTERED ( [DeviceId] ASC, [SensorId] ASC, [Date] DESC ) WITH ( FILLFACTOR=75, DATA_COMPRESSION = PAGE, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = …

2
SQL Server中多个工作线程的FIFO队列表
我试图回答以下stackoverflow问题: 我应该使用哪种SQL Server 2005/2008锁定方法来处理多个服务器应用程序实例中的单个表行? 在发布一个有点天真的答案之后,我想我会把钱放在嘴边,实际上 测试我所建议的方案,以确保我不会像往常一样追逐OP。好吧,事实证明,这比我想象的要难得多(我敢肯定,这对任何人来说都不奇怪)。 这是我尝试过并想到的: 首先,我尝试使用派生表中的ORDER BY进行TOP 1 UPDATE ROWLOCK, READPAST。这产生了死锁,并且还处理了乱序的项目。它必须尽可能接近FIFO,以排除需要多次尝试处理同一行的错误。 然后,我尝试选择所需的下一个QueueID到一个变量,使用的各种组合READPAST,UPDLOCK,HOLDLOCK,并ROWLOCK专门由会话保持了更新的行。我尝试过的所有变体都遇到了与以前相同的问题,并且对于与的某些组合READPAST,抱怨如下: 您只能在READ COMMITTED或REPEATABLE READ隔离级别中指定READPAST锁。 这是令人困惑的,因为它是“已提交读”。我以前遇到过这个问题,这令人沮丧。 自从我开始写这个问题以来,Remus Rusani发布了一个新的问题答案。我阅读了他的链接文章,看到他正在使用破坏性读取,因为他在回答中说“在网络通话期间实际上不可能保持锁定状态”。在阅读了他的文章中有关热点和需要锁定才能进行任何更新或删除的页面的内容后,我担心即使我能够算出正确的锁定来执行我想要的操作,也无法扩展并且可能无法处理大量并发。 现在,我不确定该去哪里。是真的无法实现在处理行时维持锁定(即使它不支持高tps或大量并发)吗?我想念什么? 希望比我更聪明的人和比我更老练的人可以提供帮助,以下是我使用的测试脚本。它又切换回TOP 1 UPDATE方法,但是我也将另一种方法留在其中,注释掉,以防您也想探索一下。 将这些粘贴到单独的会话中,运行会话1,然后快速将所有其他会话粘贴。在大约50秒内,测试将结束。查看每个会话中的消息,以查看其所做的工作(或失败的方式)。第一个会话将显示一个带有快照的行集,第二个快照详细描述了存在的锁和正在处理的队列项。有时它可以工作,而其他时候则根本不工作。 第一场 /* Session 1: Setup and control - Run this session first, then immediately run all other sessions */ IF Object_ID('dbo.Queue', 'U') IS NULL CREATE …

2
用于存储标志数组(位图/位数组)的数据类型
我需要为表的每个记录存储一个位数组,以支持以下操作: 测试是否设置了一个位,并设置了一个位(使用SQL) 使用ADO 2.8(而非ADO.NET)查询和设置值 索引编制(为了从“覆盖索引”功能中受益) 此数组中要存储的最大位数是固定的,但可以超过32。也就是说,简单的int列并不总是有效。 到目前为止,我的选择是: 使用多个int列 使用bigint(只要位数小于等于64即可工作) 使用二进制 ? 第一个选项可以工作,但是需要在访问数据的代码中进行大量重构。第二种选择只是暂时的解决方案,到目前为止,根据我的搜索,我不太确定ADO是否可以与bigint一起使用。我没有使用binary的经验,并且不知道其他任何选项。 根据要求,您会选择哪种数据类型?

4
大索引INCLUDE字段将如何影响系统性能?
这个问题是关于SQL Server索引性能的,其中包含a varchar(2000)作为INCLUDE索引。 我试图在缓慢而不稳定的数据库应用程序中提高性能。在某些情况下,数据是通过大VARCHAR字符串来访问的,与查询包括像multple字符串操作SUBSTRING(),SPACE()和DATALENGTH()。这是访问的简化示例; update fattable set col3 = SUBSTRING(col3,1,10) + '*' + SUBSTRING(col3,12,DATALENGTH(col3)-12) from fattable where substring(col3,10,1) = 'A' and col2 = 2 模式如下所示: CREATE TABLE [dbo].[FatTable]( [id] [bigint] IDENTITY(1,1) NOT NULL, [col1] [nchar](12) NOT NULL, [col2] [int] NOT NULL, [col3] [varchar](2000) NOT NULL, ... 定义了以下索引,并在大文本列上覆盖了一个字段。 CREATE NONCLUSTERED INDEX …

1
为什么聚簇索引扫描执行数如此之高?
我有两个类似的查询生成相同的查询计划,除了一个查询计划执行1316次“聚簇索引扫描”,而另一个查询计划执行1次。 这两个查询之间的唯一区别是日期标准不同。长时间运行的查询实际上会缩小日期条件,并拉回较少的数据。 我已经确定了一些对两个查询都有用的索引,但是我只想了解为什么“聚集索引扫描”运算符在查询上执行1316次实际上与执行1次查询相同。 我检查了有关正在扫描的PK的统计信息,它们是相对最新的。 原始查询: select distinct FIR_Incident.IncidentID from FIR_Incident left join ( select incident_id as exported_incident_id from postnfirssummary ) exported_incidents on exported_incidents.exported_incident_id = fir_incident.incidentid where FI_IncidentDate between '2011-06-01 00:00:00.000' and '2011-07-01 00:00:00.000' and exported_incidents.exported_incident_id is not null 生成此计划: 缩小日期范围标准后: select distinct FIR_Incident.IncidentID from FIR_Incident left join ( select incident_id …

2
需要SQL Server冻结的Ghost清理解决方法
我有几张表,行数在5M和1.5G之间 每个表都有其BLOB字段,其大小从100字节到30 MBytes不等,并存储为“行外的大值类型” = ON 表存储在不同的文件组中,每个3-4个文件存储在不同的磁盘上@不同的LUNs @快速SAN 这些表每天增长5-100 Gb,并具有60万-150万行 经过一定时间(从2周到6个月不等)后,某些行将被删除或移至归档DB,因此-工作表中没有任何行超过6个月的行。 服务器的当前配置: SQL Server引擎是2008 R2 SP1 Enterprise @ 24核@ 64Gb RAM SQL Server运行时带有额外的启动标志: -T 3640; (无需为存储过程中的每个语句向客户端发送DONE_IN_PROC消息。这类似于SET NOCOUNT ON的会话设置,但是当设置为跟踪标志时,将以这种方式处理每个客户端会话) -T 1118;(将tempDB中的分配从一次1pg(对于前8页)切换到一个范围。) -T 2301;(启用特定于决策支持查询的高级优化。此选项适用于大型数据集的决策支持处理) -T 1117;(一次增长所有数据文件,否则轮流进行。) -E; (增加为文件组中的每个文件分配的扩展区数。此选项对于运行索引或数据扫描的用户数量有限的数据仓库应用程序可能会有所帮助) -T 834;(导致SQL Server使用Windows大页分配用于分配用于缓冲池,存储 http://msdn2.microsoft.com/en-us/library/aa366720.aspx, http://support.microsoft。 com / kb / 920093) SQL Server使用大页面扩展 SQL Server利用快速文件初始化选项 所有数据库的AUTOSHRINK均关闭 …

5
在不返回任何行的查询中包含ORDER BY会严重影响性能
给定一个简单的三表联接,即使没有返回任何行,当包含ORDER BY时,查询性能也会发生巨大变化。实际问题场景需要30秒才能返回零行,但是当不包括ORDER BY时即刻发生。为什么? SELECT * FROM tinytable t /* one narrow row */ JOIN smalltable s on t.id=s.tinyId /* one narrow row */ JOIN bigtable b on b.smallGuidId=s.GuidId /* a million narrow rows */ WHERE t.foreignId=3 /* doesn't match */ ORDER BY b.CreatedUtc /* try with and without this ORDER …

2
优化:将变量声明移至过程的顶部
在优化某些存储过程的过程中,我与DBA坐下并经历了一些阻塞和/或读/写活动频繁的存储过程。 DBA提到的一件事是我应该TABLE在存储过程的顶部声明所有变量(尤其是变量),以避免重新编译。 这是我第一次听说此消息,并且在重新访问我们拥有的所有不同存储过程之前,正在寻求一些确认。他称其为“代码的后期查看”,并且重新编译锁定了解决阻塞的架构。 将所有变量声明移到存储过程的顶部是否会减少重新编译?

5
我的SQL服务器可能受到攻击?
检查我的SQL Server日志,我看到几个这样的条目: Date: 08-11-2011 11:40:42 Source: Logon Message: Login failed for user 'sa'. Reason: Password did not match for the login provided. [CLIENT: 56.60.156.50] Date: 08-11-2011 11:40:42 Source: Logon Message: Error: 18456. Severity: 14. State: 8. Date: 08-11-2011 11:40:41 Source: Logon Message: Login failed for user 'sa'. Reason: Password did …

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.