Questions tagged «sql-server»

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

3
评估合理的缓冲池大小的确定方法是什么?
我试图提出一种理智的方法来了解max server memory (mb)设置是否合适(应该设置得更低还是更高,或者保持原样)。我知道max server memory (mb)应该始终足够低以为操作系统本身等留出空间。 我正在查看的环境有几百台服务器;我需要一个可靠的公式来确定缓冲池的当前大小是否合适,因为RAM是按分配给每个服务器的每GB的成本来计算的。整个环境已虚拟化,分配给VM的“物理” RAM可以轻松更改。 我现在正在查看一个特定的SQL Server实例,它的PLE为1,100,052秒,相当于12.7天(服务器已启动的时间)。该服务器的最大服务器内存设置为2560MB(2.5GB),其中实际仅提交了1380MB(1.3GB)。 我读过几个项目,包括一个由Jonathan Keheyias(职位),另一个由保罗·兰德尔(岗位),和其他几个人。Jonathan提倡监视每4GB缓冲池中的PLE在300以下,因为它太低了。对于上述SQL Server实例,300 * (2.5 / 4) = 187目标PLE确实非常低,低于300。此实例具有290GB的SQL Server数据(不包括日志文件),仅用于集成测试。假设在过去的12天代表该服务器的典型用法的,我想说的max server memory (mb)设置可能会降低。 在规模的另一端,我有另一台集成测试服务器,其PLE为294,其max server memory (mb)设置仅为1GB。该服务器仅具有224MB的SQL Server数据(不包括日志),并且正在运行某些BizFlow数据库。该服务器可能会受益于更高的max server memory (mb)设置。 我正在考虑为可能分配过多内存的目标提供一个良好的起点,其中包括: SELECT RamMB = physical_memory_in_bytes / 1048576 , BufferPoolCommittedMB = bpool_committed * 8192E0 / 1048576 , BufferPoolCommitTargetMB = …

4
EF Code First对所有字符串使用nvarchar(max)。这会损害查询性能吗?
我有一些使用“实体框架代码优先”创建的数据库;应用程序正常运行,总的来说,我对Code First的功能感到非常满意。根据需要,我首先是一名程序员,然后是DBA。我正在阅读有关DataAttributes的内容,以在C#中进一步描述我想要数据库做什么;我的问题是:将这些nvarchar(max)字符串放在表中会给我带来什么惩罚(请参见下面的示例)? 此特定表中有几列;在C#中,它们的定义如下: [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int ID { get; set; } public string Name { get; set; } public string Message { get; set; } public string Source { get; set; } public DateTime Generated { get; set; } public DateTime Written { get; set; } 我希望根据名称,来源,生成的和书面查询和/或排序。我希望“名称和源”的长度为0至50个字符,偶尔最多为150个字符。我希望此表的开头很小(<100k行),但随着时间的推移会显着增长(> 1m行)。显然,消息可能大小不一,可能不会被查询。 我想知道,是否将我的“名称”和“源”列定义为nvarchar(max)当我从未期望它们大于150个字符时对性能产生影响?

2
该登录名已经有一个使用其他用户名的帐户
当我执行此SQL: USE ASPState GO IF NOT EXISTS(SELECT * FROM sys.sysusers WHERE NAME = 'R2Server\AAOUser') CREATE USER [R2Server\AAOUser] FOR LOGIN [R2Server\AAOUser]; GO 我收到以下错误: 该登录名已经有一个使用其他用户名的帐户。 我怎么知道这个不同的用户名是我的登录帐户?

19
SQL Server Management Studio缓慢打开新窗口
将SQL Server和Management Studio从2008升级到2012后,打开新的查询窗口和对话框时,Management Studio 2012的运行速度非常慢。 即使右键单击表格也很慢。在开始在窗口内执行任何操作之前,通常至少要延迟5秒。即使我连续两次打开同一个窗口,每次也会发生这种情况。为什么会发生这种情况,我该如何解决? 其他应用程序可以非常快速地建立与数据库的连接。 我尝试过的事情没有帮助: 我需要修改hosts文件的Google热门产品 重置SSMS“用户定义的设置” 更新视频驱动程序,关闭硬件加速,禁用DirectX 禁用生物特征认证服务(我没有安装)。 我的计算机应该足够快,而且我还有16GB的RAM。我的硬件绝对应该不是问题。看起来SSMS正在等待某件事-在这种情况下,我可以顺利运行其他程序。 我没有机会安装SQL Server 2012 CU1更新,因为安装修补程序似乎有一些错误的风险,我现在不能冒险。

3
SELECT语句中的OPTION FAST有什么作用?
我对OPTION (FAST XXX)查询提示在SELECT语句中的作用做了一些挖掘,但仍然对此感到困惑。根据MSDN: 指定优化查询以快速检索第一个number_rows。这是一个非负整数。返回第一个number_rows之后,查询将继续执行并产生其完整结果集。 对我来说,这没有多大意义,但基本上查询可以快速获得前XXX行,然后以正常速度获得其余行? 使我对此产生思考的Microsoft Dynamics查询是: select pjproj.project,pjproj.project_desc,pjproj.customer,pjproj.cpnyid from pjproj WITH (NOLOCK) where project like '%' order by project OPTION(FAST 500) 谁能确切解释这个查询提示在做什么,这是不使用它的好处?

3
为什么建议将BLOB存储在单独的SQL Server表中?
这个备受好评的SO答案建议将图像放在单独的表中,即使与另一个表只有1:1的关系: 如果您决定将图片放入SQL Server表中,我强烈建议使用一个单独的表来存储这些图片-不要将员工照片存储在employee表中-请将它们保存在单独的表中。这样,假设您并不一定总是选择雇员的照片作为查询的一部分,那么Employee表就可以保持精简,卑鄙和高效。 为什么?我的印象是,SQL Server只在表中存储一个指向某些专用BLOB数据结构的指针,所以为什么要手动创建另一个间接层呢?它真的可以显着提高性能吗?如果是,为什么?
28 sql-server  blob 

2
如果为正,则对所有项目求和。如果为负,则返回每个
我需要找到SUM()所有正值的方法,num并返回SUM()所有正数的值,并为每个负数返回单独的一行。下面是一个示例DDL: Create Table #Be ( id int , salesid int , num decimal(16,4) ) Insert Into #BE Values (1, 1, 12.32), (2, 1, -13.00), (3, 1, 14.00) , (4, 2, 12.12), (5, 2, 14.00), (6, 2, 21.23) , (7, 3, -12.32), (8,3, -43.23), (9, 3, -2.32) 这是我想要的输出(每个salesid SUM()和负数的正数返回单独的行): salesid num …

1
急切的后台打印操作符对于从群集的列存储中进行此删除有用吗?
我正在测试从群集的列存储索引中删除数据。 我注意到执行计划中有一个急切的假脱机操作员: 具有以下特征: 删除6000万行 1.9使用GiB TempDB 14分钟执行时间 连续计划 1在线轴上重新绑定 估计扫描成本:364.821 如果我诱使估算器低估了,我会得到一个更快的计划,避免使用TempDB: 估计扫描成本:56.901 (这是一个估计的计划,但是注释中的数字正确。) 有趣的是,如果我通过运行以下命令刷新增量存储,则线轴会再次消失: ALTER INDEX IX_Clustered ON Fact.RecordedMetricsDetail REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON); 仅当增量存储中的页面阈值超过某个阈值时才引入假脱机。 要检查增量存储的大小,我正在运行以下查询来检查表的行内页面: SELECT SUM([in_row_used_page_count]) AS in_row_used_pages, SUM(in_row_data_page_count) AS in_row_data_pages FROM sys.[dm_db_partition_stats] as pstats JOIN sys.partitions AS p ON pstats.partition_id = p.partition_id WHERE p.[object_id] = OBJECT_ID('Fact.RecordedMetricsDetail'); 第一个计划中的假脱机迭代器是否有任何合理的好处?我必须假定它旨在提高性能,而不是用于万圣节保护,因为它的存在不一致。 …

2
在阻止的流程报告中清空阻止流程
我正在使用扩展事件来收集阻止的流程报告,并且由于某些原因,某些报告中该blocking-process节点为空。这是完整的xml: <blocked-process-report monitorLoop="383674"> <blocked-process> <process id="processa7bd5b868" taskpriority="0" logused="106108620" waitresource="KEY: 6:72057613454278656 (8a2f7bc2cd41)" waittime="25343" ownerId="1051989016" transactionname="user_transaction" lasttranstarted="2017-03-20T09:30:38.657" XDES="0x21f382d9c8" lockMode="X" schedulerid="7" kpid="15316" status="suspended" spid="252" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2017-03-20T09:39:15.853" lastbatchcompleted="2017-03-20T09:39:15.850" lastattention="1900-01-01T00:00:00.850" clientapp="Microsoft Dynamics AX" hostname="***" hostpid="1348" loginname="***" isolationlevel="read committed (2)" xactid="1051989016" currentdb="6" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame line="1" stmtstart="40" sqlhandle="0x02000000f7def225b0edaecd8744b453ce09bdcff9b291f50000000000000000000000000000000000000000" /> <frame line="1" …

2
将索引视图用于聚合-太好了以至于无法实现?
我们有一个数据仓库,它的记录数很大(10-20百万行),并且经常运行查询来对某些日期之间的记录进行计数,或者对带有某些标志的记录进行计数,例如 SELECT f.IsFoo, COUNT(*) AS WidgetCount FROM Widgets AS w JOIN Flags AS f ON f.FlagId = w.FlagId WHERE w.Date >= @startDate GROUP BY f.IsFoo 性能并不是很糟糕,但可能会相对缓慢(在冷缓存中可能为10秒)。 最近,我发现我可以GROUP BY在索引视图中使用,因此尝试了类似于以下内容的操作 CREATE VIEW TestView WITH SCHEMABINDING AS SELECT Date, FlagId, COUNT_BIG(*) AS WidgetCount FROM Widgets GROUP BY Date, FlagId; GO CREATE UNIQUE CLUSTERED …

1
sys.stats_columns是否正确?
假设我有一个Foo带有列的表ID1, ID2和一个over定义的复合主键ID2, ID1。(我目前正在使用System Center产品,该产品具有以这种方式定义的多个表,并且主键列以与表定义中出现的相反顺序列出。) CREATE TABLE dbo.Foo( ID1 int NOT NULL, ID2 int NOT NULL, CONSTRAINT [PK_Foo] PRIMARY KEY CLUSTERED (ID2, ID1) ); GO -- Add a row and update stats so that histogram isn't empty INSERT INTO Foo (ID1, ID2) VALUES (1,2); UPDATE STATISTICS dbo.Foo; 中的key_ordinal列以sys.index_columns在复合主键中声明的顺序显示索引列: SELECT t.name, i.name, …

9
在SQL Server中执行FIZZBUZZ测试的最有效方法是什么?
这可能并不完全是话题,但是今天天气很慢。 是否有一种更有效的方法来获得1到49的数字列表,并在其中包含单词的列FIZZ中将数字除以3 BUZZ时,将数字除以5时以及FIZZBUZZ将数字均除时由两个 3和5? 我的尝试是(注意,这将清空过程高速缓存,因此请不要在生产包装盒上运行): DBCC FREEPROCCACHE GO /*VARIANT1*/ ;WITH t AS ( SELECT RowNum = ROW_NUMBER() OVER (ORDER BY o.object_id) FROM sys.objects o ) SELECT t.RowNum , CASE WHEN ((t.RowNum % 3) + (t.RowNum % 5)) = 0 THEN 'FIZZBUZZ' ELSE CASE WHEN t.RowNum % 3 = 0 THEN …
28 sql-server 

8
如何在数据库中查询空表
由于有些“开发人员”,我们在系统上进行了工作,因此空表存在问题。我们发现,在将数据转移到云的过程中,复制了几个表,但是没有复制其中的数据。 我想对系统表运行查询以查找哪些用户表为空。我们正在使用MS SQL 2008 R2。 谢谢您的帮助。

2
为什么在使用UNPIVOT时SQL Server要求数据类型长度相同?
将UNPIVOT功能应用于未规范化的数据时,SQL Server要求数据类型和长度相同。我知道为什么数据类型必须相同,但是为什么UNPIVOT要求长度相同? 假设我有以下示例数据需要取消透视: CREATE TABLE People ( PersonId int, Firstname varchar(50), Lastname varchar(25) ) INSERT INTO People VALUES (1, 'Jim', 'Smith'); INSERT INTO People VALUES (2, 'Jane', 'Jones'); INSERT INTO People VALUES (3, 'Bob', 'Unicorn'); 如果我尝试取消Firstname和的Lastname列,则类似于: select PersonId, ColumnName, Value from People unpivot ( Value FOR ColumnName in (FirstName, LastName) …

3
将列添加到生产表
在SQL Server 2008 R2上的大型生产表中添加列的最佳方法是什么?根据微软在线书籍: ALTER TABLE中指定的更改将立即实施。如果更改需要修改表中的行,则ALTER TABLE将更新行。ALTER TABLE在表上获取一个模式修改锁,以确保在更改期间没有其他连接甚至引用该表的元数据,除非联机索引操作最后需要非常短的SCH-M锁。 (http://msdn.microsoft.com/zh-cn/library/ms190273.aspx) 在具有数百万行的大型表上,这可能需要一段时间。停电是唯一的选择吗?处理这种情况的最佳方法是什么?

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.