Questions tagged «sql-server-2014»

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

2
如何实现基于集合的算法/ UDF
我有一个算法,需要对具有800K行和38列的表中的每一行运行。该算法在VBA中实现,并且使用来自某些列的值来操纵其他列来进行一堆数学运算。 我目前正在使用Excel(ADO)来查询SQL,并将VBA与客户端游标一起使用来逐行循环应用该算法。它可以工作,但是需要7个小时才能运行。 VBA代码非常复杂,以至于将其重新编码为T-SQL会花费很多工作。 我已经阅读了有关CLR集成和UDF作为可能路线的信息。我还考虑过将VBA代码放在SSIS脚本任务中,以使其更接近数据库,但可以肯定存在解决此类性能问题的专家方法。 理想情况下,我将能够以基于并行集的方式针对尽可能多的行(所有?)运行算法。 任何帮助都很大程度上取决于如何在此类问题上获得最佳性能。 - 编辑 感谢您的评论,我正在使用MS SQL 2014 Enterprise,这里有更多详细信息: 该算法在时间序列数据中找到特征模式。该算法中的函数执行多项式平滑,加窗,并根据输入标准查找感兴趣的区域,返回十二个值和一些布尔结果。 我的问题更多是关于方法的问题,而不是实际的算法:如果我想一次在多个行上实现并行计算,我有什么选择。 我看到建议重新编码为T-SQL,这是很多工作,但是可能的,但是算法开发人员在VBA中工作,并且更改频繁,因此我需要与T-SQL版本保持同步并重新验证每个更改。 T-SQL是实现基于集合的函数的唯一方法吗?

3
备份内部-在运行备份作业时会发生什么-就SQL Server中的锁定和性能开销而言?
对于MySQL,我知道数据库是在SQL语句中逐表备份的,这会导致锁定,如果在备份时更新列,则可能会遇到完整性问题。 据我了解,这不适用于Microsoft SQL Server,但是SQL Server如何处理呢?是否有一些内部冻结来保持数据库一致? 我还听说备份是单线程的,这意味着它仅使用一个核心,假设您备份到单个文件。还要假设您有一台多核计算机,例如16个核,或者至少有一个比一个大得多的核。 从我的个人经验来看,备份时我从来没有遇到过问题,既没有锁定也没有开销问题,但是我的经验有限。这就是为什么我总是建议在服务器属性中打开备份压缩的原因。 那么当备份作业运行时会发生什么呢?而且不同版本之间也存在显着差异吗?例如2008、2012和2014(不是许可)。

3
我的用户属于哪个广告组登录?
我不确定是否为该问题选择了正确的标题。我真正要追求的是,​​给定单个Windows AD用户,我想找出有权访问此服务器中特定数据库的Windows AD组(登录)的列表。 当我运行以下查询时 select name, principal_id, type, type_desc, default_schema_name, create_date, modify_date, owning_principal_id, sid, is_fixed_role from sys.database_principals 在我的服务器上 Microsoft SQL Server 2008 R2(SP1)-10.50.2500.0(X64)2011年6月17日00:54:03版权所有(c)Windows NT 6.1(Build 7601:Service Pack 1)上的Microsoft Corporation标准版(64位) 我得到以下结果(部分列表): 我需要知道特定登录名的所有权限。此登录名可以通过AD组访问我的服务器/数据库。 1)从上面的列表中,我的登录名属于哪个广告组? 我一直在下面进行此操作,但是我真的很想找出该用户所属的AD组(根据上图可以访问此服务器的列表)的列表。 首先,我以相关用户身份执行 EXECUTE AS LOGIN='mycompany\HThorne' DECLARE @User VARCHAR(20) SELECT @USER = SUBSTRING(SUSER_SNAME(), CHARINDEX('\', SUSER_SNAME()) + 1, LEN(SUSER_SNAME())) 我确保我拥有正确的凭据 …

3
多语句事务中不允许使用ALTER DATABASE语句
我已经从此处下载了基于AdventureWorks的内存中示例,并遵循了随附文档中描述的所有步骤。但是,当我尝试在SQL Server Management Studio中运行脚本时,出现错误消息: 多语句事务中不允许使用ALTER DATABASE语句 错误指向第9行,即: IF NOT EXISTS (SELECT * FROM sys.data_spaces WHERE type='FX') ALTER DATABASE CURRENT ADD FILEGROUP [AdventureWorks2012_mod] CONTAINS MEMORY_OPTIMIZED_DATA GO 由于这是(或多或少)正式的Microsoft文档,所以我认为这是我做错的事情,但是我不知道这是什么。


3
在SQL Server 2014中查询慢100倍,行计数假脱机行估计是罪魁祸首?
我有一个查询,该查询在SQL Server 2012中运行800毫秒,在SQL Server 2014中运行约170秒。我认为我已将其范围缩小到Row Count Spool运营商的基数估计不佳。我已经读过一些关于假脱机操作符的信息(例如,here和here),但是仍然难以理解以下几点: 为什么此查询需要Row Count Spool运算符?我认为正确性不是必需的,那么它试图提供什么特定的优化? 为什么SQL Server估计联接到Row Count Spool运算符会删除所有行? 这是SQL Server 2014中的错误吗?如果是这样,我将提交Connect。但是我想先加深了解。 注意:LEFT JOIN为了在SQL Server 2012和SQL Server 2014中都能达到可接受的性能,我可以将查询重新编写为或向表中添加索引。因此,此问题更多地是关于深入了解此特定查询和计划的,而较少涉及如何用不同的措词查询。 慢查询 有关完整的测试脚本,请参见此Pastebin。这是我正在查看的特定测试查询: -- Prune any existing customers from the set of potential new customers -- This query is much slower than expected in SQL Server 2014 SELECT …

4
无法创建SSISDB目录
尝试在sql server 2014集成服务中创建目录时出现以下错误。知道我在安装或其他地方错过了什么吗? 无法访问目录备份文件“ C:\ Program Files \ Microsoft SQL Server \ 120 \ DTS \ Binn \ SSISDBBackup.bak”。确保数据库文件存在,并且SQL Server服务帐户能够访问它(Microsoft.SqlServer.IntegrationServices.Common.ObjectModel)

2
使用来自SQL Server中另一个表的值更新表
我的数据库中有2个表。 表格1 ------------------------------------------------------------------------- | name | family | phone | email | gender | phone2 | address | birthdate | ------------------------------------------------------------------------- 表#2 ----------------------------------------- | gender | address | phone | birthdate | ----------------------------------------- 在表#1的列地址和PHONE2是空的和列性别和生日的值是相同的表#2。 我怎样才能读取表#2和更新数据的地址和PHONE2表#1的值从表#2 的地址和电话列时,性别和出生日期是各行中的一样吗? 例如:这是表#1中的一些数据 ------------------------------------------------------------------------- | name | family | phone | email | gender | phone2 …

3
查询挑战:根据度量而非行数创建均匀大小的存储桶
我将以尽可能均匀地向固定数量的卡车装载订单来描述问题。 输入: @TruckCount - the number of empty trucks to fill 一套: OrderId, OrderDetailId, OrderDetailSize, TruckId (initially null) Orders由一个或多个组成OrderDetails。 这里的挑战是TruckId为每个记录分配一个。 一个订单不能跨卡车分割。 卡车应尽可能均匀地*装载,以表示sum(OrderDetailSize)。 *平均:最小载重卡车和最大载重卡车之间可实现的最小增量。根据此定义,1,2,3比1,1,4更均匀地分布。如果有帮助,请假装您是统计算法,甚至可以创建高度直方图。 没有考虑最大卡车负载。这些是魔术弹力卡车。但是卡车的数量是固定的。 有一个明显的解决方案是迭代-循环分配订单。 但是可以按照基于集合的逻辑来完成吗? 我的主要兴趣是针对SQL Server 2014或更高版本。但是针对其他平台的基于集合的解决方案也可能很有趣。 这感觉就像Itzik Ben-Gan的领土:) 我的实际应用程序将处理工作负载分配到多个存储桶中,以匹配逻辑CPU的数量。因此,每个存储桶没有最大大小。统计信息具体更新。我只是认为将问题抽象到卡车上作为解决挑战的一种方式会更有趣。 CREATE TABLE #OrderDetail ( OrderId int NOT NULL, OrderDetailId int NOT NULL PRIMARY KEY, OrderDetailSize tinyint NOT NULL, …

2
与有条件的INSERT和SELECT相比,与OUTPUT进行MERGE更好吗?
我们经常遇到“如果不存在,请插入”的情况。丹·古兹曼(Dan Guzman)的博客对如何使此过程具有线程安全性进行了出色的研究。 我有一个基本表,可以简单地将一个字符串分类为一个整数SEQUENCE。在存储过程中,我需要获取该值的整数键(如果存在),或者INSERT获取它的值。dbo.NameLookup.ItemName列上有唯一性约束,因此数据完整性不会受到威胁,但是我不想遇到异常。 这不是一个,IDENTITY所以我无法获得SCOPE_IDENTITY,NULL在某些情况下该值可能是。 在我的情况下,我只需要处理INSERT桌子上的安全性,因此我试图确定使用MERGE这种更好的做法: SET NOCOUNT, XACT_ABORT ON; DECLARE @vValueId INT DECLARE @inserted AS TABLE (Id INT NOT NULL) MERGE dbo.NameLookup WITH (HOLDLOCK) AS f USING (SELECT @vName AS val WHERE @vName IS NOT NULL AND LEN(@vName) > 0) AS new_item ON f.ItemName= new_item.val WHEN MATCHED THEN UPDATE SET …

1
ROW_NUMBER()OVER(按B排序,按C排序)不使用(A,B,C)上的索引
考虑以下两个功能: ROW_NUMBER() OVER (PARTITION BY A,B ORDER BY C) ROW_NUMBER() OVER (PARTITION BY B,A ORDER BY C) 据我了解,它们产生的结果完全相同。换句话说,在PARTITION BY子句中列出列的顺序无关紧要。 如果有索引,(A,B,C)我希望优化程序在两个变体中都使用此索引。 但是,令人惊讶的是,优化器决定在第二个变体中进行额外的显式排序。 我已经在SQL Server 2008 Standard和SQL Server 2014 Express上看到了它。 这是我用来复制它的完整脚本。 在Microsoft SQL Server 2014上尝试-12.0.2000.8(X64)2014年2月20日20:04:26版权所有(c)Windows NT 6.1(Build 7601:Service Pack 1)上的Microsoft Corporation Express Edition(64位) 和Microsoft SQL Server 2014(SP1-CU7)(KB3162659)-12.0.4459.0(X64)2016年5月27日15:33:17版权所有(c)Windows NT 6.1(内部版本7601)上的Microsoft Corporation Express Edition(64位):服务包1) …

4
使用SQL Server FILESTREAM时保持(部分)备份较小
我有一个数据库,其中有近1TB的FILESTREAM数据不需要备份(如果删除了该数据,则会在几个小时内自动重新创建,因此并不重要)。大多数数据每两天更改一次,因此差异备份并不能真正帮助减小容量。 我有工作,我需要通过恢复模式设置的方式备份Full,创建一个单独FILEGROUP的FILESTREAM,然后取的只有“主”的备份FILEGROUP。造成的问题是日志文件(也已备份)现在不必要地很大,因为它包含FILESTREAM数据。 SIMPLE恢复模式使我无法执行特定FILEGROUPs的备份,因此我也不认为这是一个选择。 我的想法只是将FILESTREAM数据移到一个单独的数据库中,但是现在我失去了参照完整性,并且肯定还会继承许多其他问题。 有什么方法可以在Simple恢复模式下创建部分备份(无需将FILESTREAM表设置为只读)?如果没有,我的问题是否还有其他合理的解决方案?

1
SQL Server在哪里将表的IDENTITY VALUE物理存储在哪里?
我希望有人可以指出我在这个方向上的正确方向。到目前为止,这是我的工作。 SELECT * FROM sys.identity_columns是一个提供“ last_value”的系统视图,但是该视图的定义使用了内部函数IdentityProperty(colName, 'LastValue')-因此是死胡同(不是从系统表中拉出它)。 互联网上的任何地方(我看过的地方)都建议使用DBCC IDENT_...命令来发现该值,但这仍然使我不清楚其实际存储位置。 因此,我开始DBCC PAGE(TestDB,1,1325,3)针对测试工具数据库搜索单个页面,并使用RESEED命令在值10和12之间重新设定种子。 在执行此操作时,我注意到上的十六进制值IAM: Header,IAM: Single Page Allocations并且IAM: Extent Alloc Status Slot 1所有值都已更改。(并且意识到它们无论如何都会随着bUse1值的变化而定期变化,而bUse1值本身也会逐渐变化)。 所以另一个死胡同,我全都没主意了。我还能在哪里搜索? 我正在运行SQL Server2014。我对内部知识有无限的渴望,并且还没有遇到像这样难以捉摸的东西。它引起了我的注意,因为从理论上讲,它(一个绝对值)存储在某个位置,并且应该(可以说)是可定位的。在我探索内部存储的数据/元数据的位置时,这个特殊的值使我感到难以捉摸。我猜测/希望有人会来告诉我,您可以接受,DBCC PAGE但我找错了地方。

1
如何在UNPIVOT(循环连接)中使用批处理模式?
我有以下形式的查询: SELECT ... FROM ColumnstoreTable cs CROSS APPLY ( SELECT * FROM (VALUES ('A', cs.DataA) , ('B', cs.DataB) , ('C', cs.DataC) ) x(Col0, Col1) ) someValues 这将从Columnstore支持的子查询(ColumnstoreTable)中获取每一行,并将这些行相乘。这本质上是一个UNPIVOT。实际查询大于此。查询的这一部分将用于其他处理。 这里的问题是将其CROSS APPLY实现为循环连接,这是一个合理的选择。不幸的是,循环连接不支持批处理模式。 查询的这一部分对性能非常重要,我怀疑以批处理模式运行它可能对性能非常有益。 如何重写此查询,以便不退出批处理模式? 我确实尝试使用临时表代替VALUES,但这并没有改变没有哈希连接的相等连接条件的事实。

4
还原数据库向导将无法在SSMS 2014中打开
在运行Windows Server 2012 R2的开发机上,我刚刚将SQL Server从2012升级到2014。 使用SQL Server Management Studio 2014时,当我右键单击数据库时Tasks -> Restore -> Database...没有任何反应。还原数据库向导未按预期显示。 事件查看器中没有错误或崩溃。光标甚至都不会变成沙漏。 使用T-SQL还原可以正常工作,如果我返回并使用SSMS 2012,则可以正常工作。关于如何使向导在SSMS 2014中工作的任何想法? 我在两个版本的SSMS中都连接到相同的SQL Server实例,并且尝试以管理员身份运行SSMS。 它是Service Pack 1: Microsoft SQL Server Management Studio 12.0.4100.1 Microsoft Analysis Services Client Tools 12.0.4100.1 Microsoft Data Access Components (MDAC) 6.3.9600.17415 Microsoft MSXML 3.0 5.0 6.0 Microsoft Internet Explorer 9.11.9600.18125 …

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.