Questions tagged «sql-server-2014»

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

1
ALTER TABLE…从常规表切换到分区表失败
下面的代码执行以下操作: 在C:\ TEMP中创建一个数据库play_partition 创建两个相同的分区表play_table和archive_play_table 将play_table分区1切换到archive_play_table分区1 在与play_table分区2相同的文件组上,创建一个新的未分区表temp_table,其结构与play_table相同。 将play_table_partition 2切换到temp_table 尝试将temp_table切换回play_table分区2并失败 消息4982,级别16,状态1,第64行ALTER TABLE SWITCH语句失败。检查源表'play_partition.dbo.temp_table'的约束是否允许目标表'play_partition.dbo.play_table'上分区2定义的范围所不允许的值。 为什么会失败? 我正在使用SQL Server 2014(企业版试用版)。 问候, 科林·戴利 http://www.colindaley.com/translator /* Playing with partitioned tables */ USE master; GO DROP DATABASE play_partition; GO CREATE DATABASE play_partition ON PRIMARY( NAME = play_partition , FILENAME = 'C:\TEMP\play_partition.mdf') ,FILEGROUP play_fg1( NAME = play_fg1 ,FILENAME …

1
SQL Server升级破坏了数据库快照后,如何“删除”数据库快照
我正在处理SQL Server升级到2014后无法删除数据库快照的问题。快照已失效,但不能删除。 现在,尽管“连接”项中的注释令人失望,但我认为此问题最终将得到解决。但是,我需要尽快处理。 有没有办法删除由于该错误而无法删除的数据库快照?我担心我已经用尽了所有有据可查的手段来做到这一点。可能需要对系统表进行未记录的修改。有没有一种方法可以强制删除数据库(快照)?

3
“将数据库部署到SQL Azure”任务丢失
我最近在拥有的工作站上安装了SQL Server 2014 Express,并且正在尝试将其部署到SQL Azure。我之前在使用SQL Server 2012 Express的以前的工作站上通过以下操作完成了此操作: 右键单击数据库>任务>“将数据库部署到SQL Azure” 在SQL Server 2014上,该选项完全消失,取而代之的是一个新选项:“将数据库部署到Windows Azure VM” 我无法弄清楚为什么缺少部署到SQL Azure的选项。SQL Server 2014是否需要单独安装某些东西?根据我在网上阅读的内容,这两个选项都应该在2014年版中同时出现。Microsoft是否为SQL Server 2014 Express删除了此选项?

2
SQL Server:是否涵盖所有列的索引?
我们的团队继承了一个应用程序和关联的数据库。以前的开发人员似乎执行了一个规则,即每个表上的每个索引都有一个INCLUDE子句,以始终添加不属于键一部分的每个列。这些表平均具有2到5个索引或唯一约束以及外键。 目的是不管在数据库上引发什么查询,都是为了提高SELECT性能,因为访问是通过默认(但并非总是)检索所有列的ORM进行的。我们希望这样做的副作用是增加了存储需求(可能如此),并且增加了INSERT / UPDATE / DELETE的开销时间。 问题是,这是明智的策略吗?我们的团队具有SQL Server的历史,但是没有成员会认为自己是其内部行为的专家(尽管已经提出了一个问题,即如果该策略是最佳策略,那么现在是否将其作为默认策略?)。我们还应该期待其他哪些副作用(数据库服务器CPU /内存/ TempDB的使用情况等),或者上述某些假设是否正确? 此外,该应用程序既可以安装到SQL Server内部部署(自2012年以来的版本)中,也可以安装到Azure SQL中-如果我们为两者之间的任何差异或Azure的其他副作用做好了准备,方法?


6
并行运行存储过程
我正在尝试尝试同时使用不同的参数多次运行相同的存储过程。 我正在使用SQL 2014 这样做的原因是该过程大约需要7个小时才能完成。实际上,它多次执行相同的过程。因此,例如,它可能会为每个分支建立一个新的数据库和表。 我想要做的是分解存储过程,这样我可以在每个分支中运行,但随后并行运行每个查询。我已经通过在单独的查询窗口中运行它进行了测试,并且运行速度快了将近80%。 谁能给我一个虚拟的指南,以并行运行查询?

1
通过删除运算符哈希匹配内部联接来提高查询性能
在尝试将以下问题的内容应用于我自己的情况时,我有点困惑,因为如果可能的话,如何摆脱运算符哈希匹配(内部联接)。 SQL Server查询性能-无需哈希匹配(内部联接) 我注意到了10%的成本,并且想知道是否可以降低它。请参阅下面的查询计划。 这项工作来自我今天必须调整的一个查询: SELECT c.AccountCode, MIN(d.CustomerSID) FROM Stage.Customer c INNER JOIN Dimensions.Customer d ON c.Email = d.Email OR ( c.HomePostCode = d.HomePostCode AND c.StrSurname = d.strSurname ) GROUP BY c.AccountCode 在添加这些索引之后: --------------------------------------------------------------------- -- Create the indexes --------------------------------------------------------------------- CREATE NONCLUSTERED INDEX IDX_Stage_Customer_HOME_SURNAME_INCL ON Stage.Customer(HomePostCode ,strSurname) INCLUDE (AccountCode) --WHERE HASEMAIL …

3
SQL Server Management Studio 2014备份-设置属性设备错误
我最近将本地SQL Server升级到了版本2014,该版本还安装了SSMS2014。 使用SQL Server Management Studio 2014创建备份(本地和远程,服务器版本2008-2014)时,出现以下错误: 要完成此操作,请设置属性设备。 在下拉菜单中,我选择了“磁盘”,还选择了备份路径。该路径存在于服务器上,并且我对此路径具有完全权限。 如果我使用具有相同设置的旧SQL Server Management Studio 2012,则备份可以正常工作。 它也可以使用T-SQLBACKUP DATABASE SOMEDATABASE TO DISK = 'D:\SomeDir\SomeDataBase.bak' WITH COMPRESSION 因此,该问题必须与2014版管理工具有关。我在互联网上找到的唯一解决方案是由于缺少路径,对我而言并非如此。 有没有人遇到过和/或解决了这个问题? 编辑:添加了屏幕截图(德语界面) 翻译: -Vollständig: 完整-Datenträger:磁盘 媒体和安全选项不变。仅以Master数据库为例,其他每个数据库都发生过这种情况。 更新21.07.2015 该问题似乎与我在德语Windows上使用英语包和德语SQL Server 2014安装有关。如果Windows显示语言设置为德语,该问题将消失。如果Windows显示语言设置为英语,则该问题再次出现。 感谢您的所有贡献。

4
SQL Server 2014的MAXDOP设置
我知道这个问题已经被问过很多次,并且也有答案,但是,我仍然需要更多有关该主题的指导。 以下是来自SSMS的CPU的详细信息: 以下是数据库服务器任务管理器中的“ CPU”选项卡: 我MAXDOP通过以下公式保持设置为2: declare @hyperthreadingRatio bit declare @logicalCPUs int declare @HTEnabled int declare @physicalCPU int declare @SOCKET int declare @logicalCPUPerNuma int declare @NoOfNUMA int declare @MaxDOP int select @logicalCPUs = cpu_count -- [Logical CPU Count] ,@hyperthreadingRatio = hyperthread_ratio -- [Hyperthread Ratio] ,@physicalCPU = cpu_count / hyperthread_ratio -- [Physical …

1
为什么在此列上自动创建的统计信息为空?
信息 我的问题与堆有关的中等大表(〜40GB数据空间)有关 (不幸的是,应用程序所有者不允许我将聚集索引添加到表中) 在“标识”列(ID)上创建了自动创建的统计信息,但为空。 自动创建统计信息和自动更新统计信息处于启用状态 表格中发生了修改 还有其他(自动创建的)统计信息正在更新 由索引创建的同一列上还有另一个统计信息(重复) 内部版本:12.0.5546 重复统计信息正在更新: 实际问题 据我了解,即使在完全相同的列(重复项)上有两个统计信息,也可以使用所有统计信息并跟踪修改,所以为什么这个统计信息仍然为空? 统计信息 数据库统计信息 桌子尺寸 创建统计信息的列信息 [ID] [int] IDENTITY(1,1) NOT NULL 身份栏 select * from sys.stats where name like '%_WA_Sys_0000000A_6B7099F3%'; 自动建立 获取其他统计信息 select * From sys.dm_db_stats_properties (1802541555, 3) 与我的空状态相比: 来自“生成脚本”的统计信息和直方图: /****** Object: Statistic [_WA_Sys_0000000A_6B7099F3] Script Date: 2/1/2019 10:18:19 AM ******/ …


3
根据特定公式找到最小的缺失元素
我需要能够从具有数千万行的表中找到丢失的元素,并且具有一BINARY(64)列的主键(这是要从中计算出的输入值)。这些值主要是按顺序插入的,但有时我想重复使用先前删除的值。用IsDeleted列修改已删除的记录是不可行的,因为有时会插入一行,该行的行数比当前现有行的数百万。这意味着样本数据将类似于: KeyCol : BINARY(64) 0x..000000000001 0x..000000000002 0x..FFFFFFFFFFFF 因此,在0x000000000002和之间插入所有缺少的值0xFFFFFFFFFFFF是不可行的,所用的时间和空间将是不希望的。本质上,当我运行算法时,我希望它返回0x000000000003,这是第一个开始。 我想出了一个用C#进行二进制搜索的算法,该算法将查询数据库中position处的每个值i,并测试是否期望该值。对于上下文,我的算法很糟糕:https : //codereview.stackexchange.com/questions/174498/binary-search-for-a-missing-or-default-value-by-a-given-formula 例如,此算法将在具有100,000,000个项目的表上运行26-27个SQL查询。(这似乎不是很多,但它的将要发生的非常频繁。)目前,这个表中有大约5000万行,并且表现越来越明显。 我的第一个替代想法是将其转换为存储过程,但这有其自身的障碍。(我必须编写一个BINARY(64) + BINARY(64)算法,以及许多其他东西。)这将很痛苦,但并非不可行。我也考虑过基于实施翻译算法ROW_NUMBER,但是对此我感到很不好。(BIGINT对于这些值,A 几乎不够大。) 我想提出其他建议,因为我真的需要尽快。值得的是,C#查询选择的唯一列是KeyCol,其他与该部分无关。 同样,就其价值而言,当前获取适当记录的查询大致如下: SELECT [KeyCol] FROM [Table] ORDER BY [KeyCol] ASC OFFSET <VALUE> ROWS FETCH FIRST 1 ROWS ONLY <VALUE>算法提供的索引在哪里。我也没有这个BIGINT问题OFFSET,但是我会的。(现在只有5000万行意味着它永远不会要求该值以上的索引,但是在某个时候它将超过该BIGINT范围。) 一些其他数据: 从删除来看,gap:sequential比率约为1:20; 表中的最后35,000行的值> BIGINT的最大值;

1
从varbinary(max)中清空数据后缩小DB的最佳方法?
我们有一个数据库,其中有大量数据存储在varbinary(max)类型的字段中。在某些时候,我们可以清除大多数行(但不是全部)的数据。我们的计划是使该字段可为空,并在不再需要该数据时将其清空。完成后,我们希望减少数据库的大小。做到这一点的最佳方法是什么? 如果没有一种利用当前设置回收空间的好方法,那么我的一个想法就是将数据字段移动到只有两列的单独表中:主表的键和数据字段。然后,当不再需要这些行时,我们可以简单地删除它们。(然后进行某种缩小。)但是,与简单地使现有字段可为空相比,这将是一件困难得多的更改。 注意:实际上,我不太关心使数据库文件变小,但是我关心新释放的空间变得可重用。 这一字段占数据库大小的90%以上。我已经在3TB了。

2
SQL Server 2014压缩和最大行大小
我需要创建一个包含许多十进制(26,8)列的宽非规范化表(少于1024列限制,大多数列将为null或零)。我知道每行限制8060字节,因此我尝试创建具有页面压缩功能的表。下面的代码创建表,插入一行并查询行大小。行大小远低于限制,但是如果我尝试向表中再添加一个小数(26,8)列,操作将失败,并显示错误“创建或更改表't1'失败,因为最小行大小为8074,包括1256”内部开销字节。”。有什么方法可以创建具有这么多列的单个表吗? drop table t1 GO create table t1(c1 decimal(26, 8) null) with (data_compression = page) GO declare @i int = 2; declare @sql varchar(100); while @i <= 486 begin set @sql = 'alter table t1 add c' + convert(varchar, @i) + ' decimal(26, 8) null'; execute (@sql); set @i += …

1
奇异的密度导致抽样统计
通过采样与全扫描进行估算时,NC指数获得完全不同的统计分布;采样的样本具有奇异的密度向量。这导致执行计划不佳。 我有一个约2700万行的表,并且非聚集索引支持一个非null的FK列。该表聚集在其主键上。两列都是varchar。 FK列的全扫描统计信息更新给出了正常外观的密度矢量: All density Average Length Columns 6,181983E-08 45,99747 INSTANCEELEMENTID 3,615442E-08 95,26874 INSTANCEELEMENTID, ID 也就是说,我们希望与之INSTANCELEMENTID连接的每个不重复读取约1.7行。 直方图中的典型bin如下所示: RANGE_HI_KEY RANGE_ROWS EQ_ROWS DISTINCT_RANGE_ROWS AVG_RANGE_ROWS FOOBAR 133053 10 71366 1,679318 但是,如果我们进行了抽样更新(使用此表的默认样本数为23万行),那么情况就变得奇怪了: 4,773657E-06 45,99596 INSTANCEELEMENTID 3,702179E-08 95,30183 INSTANCEELEMENTID, ID 现在的密度INSTANCEELEMENTID要大两个数量级。(但是,两根色谱柱的密度均已估算为可以接受的值)。 现在,直方图中的典型bin如下所示: RANGE_HI_KEY RANGE_ROWS EQ_ROWS DISTINCT_RANGE_ROWS AVG_RANGE_ROWS FOOBAR 143870,4 766,2573 1247 115,3596 ZOTZOT 131560,7 1 …

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.