Questions tagged «sql-server»

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

2
最大连接池上限为100
我在Windows Server 2008机器上运行SQL Server 2008 R2 SP1。我有一个从Visual Studio 2010运行的.NET脚本,它执行以下操作: 到达数据库 做出改变 迭代 迭代的总次数为150,但是它在100个连接处停止,我不知道为什么。我可以将脚本调整为仅使用一个线程,但是我想知道我在哪里缺少最大连接设置,因为这对于以后的参考更为有用。 到目前为止,这是我检查过的地方: Visual Studio 2010中的SQL连接字符串(设置为1000) SSMS数据库实例连接属性(设置为0 [infinity]用户连接) Google在Server 2008上搜索了一些信息,看起来它可以处理100多个连接 逐步浏览我的代码,SP_WHO2其中提供了有关逻辑连接的更多信息,看到连接数从52开始,脚本错误和“达到最大池连接数”错误在152逻辑连接。 更改了要使用的连接字符串 Data Source=PerfSQL02;Initial Catalog=Masked;Integrated Security=True;Max Pool Size=1000 我不确定其他地方是否需要检查,我知道我在这里有很多活动部件,但是我感到自己只是在某个地方缺少最大泳池设置。
27 sql-server 

3
存储过程与内联SQL
我知道存储过程通过执行路径(比应用程序中的内联sql)更有效。但是,当按下时,我对原因并不了解。 我想知道这一点的技术原因(以便以后可以向某人解释)。 谁能帮我制定一个好的答案?

1
Varchar(max)字段会截断8000个字符后的数据
我有一个字段来存储一些数据,该字段声明为varchar(max)。据我了解,这应该存储2^31 - 1字符,但是当我输入一些超过8000个字符的内容时,它将切断其余字符。 我已经验证了所有数据都包含在我的更新语句中,并且该查询在其他任何地方都看起来不错,但是当我选择回退数据时,该查询已被切断。 当我在网站上显示数据时,以及使用SSMS时,数据都会被截断select content from table。 select DATALENGTH (content) from table 回到8000。 我使用此设置数据:update table set content = 'my long content' where id = 1。内容中确实包含很多HTML,但是我看不到这会引起问题。我可以看到我做的唯一的事情就是更换所有"有'',因为这是用户输入的内容(不记得我为什么现在)。 我确实设法通过删除内容中的所有单引号来使内容正确输入,所以我认为我的数据而不是数据库出现了一些奇怪的情况。 我应该对查询使用varchar(max)字段做一些特殊的事情吗? 使用:SQL Server 2008(10.50)64位。

6
为什么我的SELECT DISTINCT TOP N查询会扫描整个表?
我遇到了一些SELECT DISTINCT TOP N查询,这些查询似乎没有被SQL Server查询优化器优化。让我们从一个简单的例子开始:一个带有两个交替值的百万行表。我将使用GetNums函数生成数据: DROP TABLE IF EXISTS X_2_DISTINCT_VALUES; CREATE TABLE X_2_DISTINCT_VALUES (PK INT IDENTITY (1, 1), VAL INT NOT NULL); INSERT INTO X_2_DISTINCT_VALUES WITH (TABLOCK) (VAL) SELECT N % 2 FROM dbo.GetNums(1000000); UPDATE STATISTICS X_2_DISTINCT_VALUES WITH FULLSCAN; 对于以下查询: SELECT DISTINCT TOP 2 VAL FROM X_2_DISTINCT_VALUES OPTION (MAXDOP 1); …

4
删除所有(1200万)记录后,SQL Server“空表”运行缓慢吗?
我有一个大约有150列的SQL Server 2008实例。我以前在该表中填充了大约1200万个条目,但是此后清除了该表以准备新的数据集。 然而,命令,一旦在空表上立即跑如count(*)和select top 1000在SQL Management Studio现在采取亿万运行。 SELECT COUNT(*) FROM TABLE_NAME 花了11分钟以上的时间来返回0,SELECT TOP 1000花了将近10分钟的时间来返回一个空表。 我还注意到硬盘上的可用空间实际上已经消失了(从大约100G减少到20G)。之间发生的唯一事情是我运行了一个查询: DELETE FROM TABLE_NAME 到底是怎么回事?!?


4
如何更改SQL Server排序规则
如何更改整个服务器和特定数据库的SQL Server 2008 R2 Express默认排序规则? 有没有办法使用SQL Server Management Studio的可视界面来做到这一点?在“服务器属性”窗口(以及相应的“数据库属性”窗口中),此属性不可用于编辑。

4
从一台服务器复制(数百个)表到另一台服务器(使用SSMS)
我必须将几百张表(当前为466张,但仍在增长)从一台服务器复制到另一台服务器。 我以前从来没有做过此事,所以我完全不确定如何处理它。所有表格的格式相同:Cart<Eight character customer number> 这是一个较大的项目的一部分,我将所有这些Cart<Number>表合并到一个Carts表中,但这是一个完全不同的问题。 有没有人有我可以用来复制所有这些表的最佳实践方法?如果有帮助,两台服务器上的数据库名称相同。就像我之前说的,我拥有该sa帐户,因此我可以执行将数据从A传输到B所需的一切。两个服务器也都在同一个服务器场中。

2
什么是“部分匹配指数”?
我试图了解有关SQL Server 2016中引入的“外键引用检查”查询计划运算符的更多信息。那里没有很多有关它的信息。微软在这里宣布了它,我在这里发表了博客。通过从具有254个或更多传入外键引用的父表中删除一行,可以看到new运算符:dbfiddle link。 操作员详细信息中显示三种不同的计数: 外键引用计数是传入外键的数量。 没有匹配的索引计数是没有合适索引的传入外键的数量。验证更新或删除的表不会违反该约束将需要对子表进行扫描。 我不知道部分匹配索引计数代表什么。 在这种情况下,什么是部分匹配索引?我无法进行以下任何工作: 筛选索引 将外键列作为INCLUDE索引的列 使用外键列作为第二个键列的索引 多列外键的单列索引 创建多个覆盖索引以为多列外键启用“索引连接”计划 Dan Guzman指出,即使索引键的顺序与外键列的顺序不同,多个列的外键也可以匹配索引。他的代码是在这里,以防有人能够以它为起点来进一步了解部分匹配索引。

6
在整个数据库中更改GETDATE()的使用
我需要将本地SQL Server 2017数据库迁移到Azure SQL数据库,并且由于要克服很多限制,因此我面临一些挑战。 特别是,由于Azure SQL数据库仅在UTC时间(无时区)工作,并且我们需要本地时间,因此我们必须更改数据库中GETDATE() 所有地方的使用方式,事实证明,这比我预期的要多。 我创建了一个用户定义的函数,以获取在我的时区正确工作的本地时间: CREATE FUNCTION [dbo].[getlocaldate]() RETURNS datetime AS BEGIN DECLARE @D datetimeoffset; SET @D = CONVERT(datetimeoffset, SYSDATETIMEOFFSET()) AT TIME ZONE 'Pacific SA Standard Time'; RETURN(CONVERT(datetime,@D)); END 我遇到的问题是实际上GETDATE()在每个视图,存储过程,计算列,默认值,其他约束等中都使用此函数进行了更改。 实施此更改的最佳方法是什么? 我们正在受管实例的公开预览中。与仍然存在相同的问题GETDATE(),因此对解决此问题没有帮助。迁移到Azure是必需的。始终在该时区使用(并将使用)此数据库。

1
SQL Server 2014:有关不一致的自连接基数估计的任何解释?
考虑SQL Server 2014中的以下查询计划: 在查询计划中,自联接ar.fId = ar.fId产生的估计值为1行。但是,这在逻辑上是不一致的估计:ar只有20,608行,并且只有一个不同的值fId(准确地反映在统计数据中)。因此,此联接产生行(~424MMrow)的全叉积,导致查询运行几个小时。 我很难理解为什么SQL Server会提出一个很容易证明与统计数据不一致的估计。有任何想法吗? 初步调查和其他细节 根据Paul 在这里的答案,似乎用于估计联接基数的SQL 2012和SQL 2014启发式方法应该可以轻松处理需要比较两个相同直方图的情况。 我从跟踪标志2363的输出开始,但无法轻松理解。下面的代码段是否表示SQL Server正在比较的直方图fId和bId以便估计仅使用的联接的选择性fId?如果是这样,那显然是不正确的。还是我误读了跟踪标志输出? Plan for computation: CSelCalcExpressionComparedToExpression( QCOL: [ar].fId x_cmpEq QCOL: [ar].fId ) Loaded histogram for column QCOL: [ar].bId from stats with id 3 Loaded histogram for column QCOL: [ar].fId from stats with id 1 Selectivity: 0 请注意,我想出了几种变通办法,这些变通办法包含在完整的repro脚本中,并将此查询缩短为毫秒。这个问题的重点是了解行为,如何在以后的查询中避免它,以及确定它是否应与Microsoft一起提交。 …

2
如何在多行且不带逗号的情况下使用COALESCE?
我正在努力实现以下目标: California | Los Angeles, San Francisco, Sacramento Florida | Jacksonville, Miami 不幸的是,我正在“洛杉矶,旧金山,萨克拉曼多,杰克逊维尔,迈阿密” 我可以使用STUFF函数获得所需的结果,但是想知道是否有使用COALESCE的更干净的方法? STATE | CITY California | San Francisco California | Los Angeles California | Sacramento Florida | Miami Florida | Jacksonville DECLARE @col NVARCHAR(MAX); SELECT @col= COALESCE(@col, '') + ',' + city FROM tbl where city = …
27 sql-server  t-sql 

1
统计信息物理存储在SQL Server中的什么位置?
查询优化器所使用的统计信息在哪里物理存储在SQL Server数据库文件和缓冲池中? 更具体地说,是否有一种方法可以找出使用DMV和/或DBCC的统计信息所使用的页面? 我同时拥有《 SQL Server 2008内部原理》和《 SQL Server内部原理与故障排除》一书,但都没有谈论统计的物理结构。如果没有,我将无法找到此信息。

2
急停阀芯指示哪些问题
当前在SQL Server 2008 R2上运行 我试图提高UPDATE语句的性能。我注意到弹出的计划中有一个渴望假脱机操作。我对假脱机操作的理解非常基础-他们在更新期间为表创建了临时存储。 我还知道,尽管它们可以防止更糟的执行时间,但急切的假脱机通常表明表结构和/或查询语句存在潜在的问题。 我的问题很简单:当您在查询计划中看到一个急切假脱机时,您首先要解决什么问题? 我会分析每一个我们的系统的一部分,以提高性能-我只是在寻找指导,我应该开始。

5
获得随机订购的最佳方法是什么?
我有一个查询,希望将所得记录随机排序。它使用聚集索引,因此如果我不包括order by它,则可能会按该索引的顺序返回记录。如何确保随机的行顺序? 我知道这可能不会是“真正的”随机,伪随机足以满足我的需求。
27 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.