Questions tagged «parallelism»

通过将问题分解为可以通过单独的执行路径同时完成的部分来减少运行时间。


2
有没有一种方法可以防止计算列中的标量UDF抑制并行性?
关于SQL Server 中标量UDF的危害,已经写了很多文章。随意搜索将返回大量结果。 但是,在某些地方,标量UDF是唯一的选择。 例如:在处理XML时:XQuery不能用作计算列定义。Microsoft记录的一个选项是使用Scalar UDF将XQuery封装在Scalar UDF中,然后在计算列中使用它。 这会产生各种影响,并有一些解决方法。 查询表时逐行执行 强制对表的所有查询顺序运行 您可以通过模式绑定该函数并持久保存计算的列或对其进行索引来解决逐行执行的问题。即使没有引用标量UDF,这两种方法都无法防止查询的强制序列化。 有已知的方法吗?

2
需要了解并行查询执行错误
今天,我们的生产sql服务器的性能下降了。在发生这种情况时,我们记录了一些"The query processor could not start the necessary thread resources for parallel query execution"错误。我所做的阅读表明,这与执行复杂查询时使用多少个CPU有关。但是,当我在停电期间检查时CPU Utilization was only at 7%。还有其他我可能还没有提到的东西吗?这可能是性能下降的罪魁祸首吗?还是我追赶红鲱鱼? 我的sp_configure值如下: name minimum maximum config_value run_value cost threshold for parallelism 0 32767 5 5

1
sp_cursoropen和并行性
我遇到了一个查询似乎无法解决的性能问题。 我从游标定义中拉出了查询。 该查询需要几秒钟才能执行 SELECT A.JOBTYPE FROM PRODROUTEJOB A WHERE ((A.DATAAREAID=N'IW') AND ((A.CALCTIMEHOURS<>0) AND (A.JOBTYPE<>3))) AND EXISTS (SELECT 'X' FROM PRODROUTE B WHERE ((B.DATAAREAID=N'IW') AND (((((B.PRODID=A.PRODID) AND ((B.PROPERTYID=N'PR1526157') OR (B.PRODID=N'PR1526157'))) AND (B.OPRNUM=A.OPRNUM)) AND (B.OPRPRIORITY=A.OPRPRIORITY)) AND (B.OPRID=N'GRIJZEN'))) AND NOT EXISTS (SELECT 'X' FROM ADUSHOPFLOORROUTE C WHERE ((C.DATAAREAID=N'IW') AND ((((((C.WRKCTRID=A.WRKCTRID) AND (C.PRODID=B.PRODID)) AND …

3
并行统计更新
在SQL Server 2008或更高版本中,是UPDATE STATISTICS WITH FULLSCAN单线程操作还是可以使用并行性?如何使用默认采样更新统计信息-它可以使用并行性吗?我没有看到指定MAXDOP更新统计信息的选项。

3
高CXPACKET和LATCH_EX等待
我正在使用的数据处理系统存在一些性能问题。我从一个小时的周期中收集了等待统计信息,其中显示了大量CXPACKET和LATCH_EX等待事件。 该系统由3个处理SQL Server组成,这些SQL Server进行了大量的数字运算和计算,然后将数据馈送到中央群集服务器中。处理服务器可以一次最多运行6个作业。这些等待统计数据是针对我认为正在引起瓶颈的中央集群的。中央群集服务器具有16个核心和64GB RAM。MAXDOP设置为0。 我猜CXPACKET来自正在运行的多个并行查询,但是我不确定LATCH_EX等待事件指示什么。从我读到的内容来看,这可能是非缓冲等待? 谁能说出这种等待统计的原因是什么,我应该采取什么行动来调查这个性能问题的根本原因? 顶部查询结果是等待的总计统计信息,底部查询结果是1小时内的统计信息

2
我可以重构该查询以使其并行运行吗?
我有一个查询,大约需要3个小时才能在我们的服务器上运行-而且没有利用并行处理。(中有约115万条记录dbo.Deidentified,其中有300条记录dbo.NamesMultiWord)。该服务器可以访问8个核心。 UPDATE dbo.Deidentified WITH (TABLOCK) SET IndexedXml = dbo.ReplaceMultiWord(IndexedXml), DE461 = dbo.ReplaceMultiWord(DE461), DE87 = dbo.ReplaceMultiWord(DE87), DE15 = dbo.ReplaceMultiWord(DE15) WHERE InProcess = 1; 并且ReplaceMultiword是定义为: SELECT @body = REPLACE(@body,Names,Replacement) FROM dbo.NamesMultiWord ORDER BY [WordLength] DESC RETURN @body --NVARCHAR(MAX) 是否要求ReplaceMultiword阻止制定并行计划?有没有办法重写它以允许并行性? ReplaceMultiword 因为某些替代品是其他替代品的短版,所以它们以降序运行,我希望最长的替代品能够成功。 例如,可能有“乔治华盛顿大学”和“华盛顿大学”。如果首先是“华盛顿大学”比赛,那么“乔治”将被甩在后面。 从技术上讲,我可以使用CLR,但我不熟悉该如何使用。

4
处理CXPACKET等待-设置并行性的成本阈值
作为我先前对Sharepoint网站进行性能故障的先前问题的补充,我想知道我是否可以对CXPACKET等待做点什么。 我知道下意识的解决方案是通过将MAXD​​OP设置为1来关闭所有并行性-听起来是个坏主意。但是另一个想法是在并行开始之前增加成本阈值。执行计划成本的默认值5相当低。 因此,我想知道是否存在已经写好的查询,该查询将为我找到执行计划成本最高的查询(我知道您可以找到执行时间最长的查询,依此类推-但是执行计划成本是否可在某处检索到,也可以),这还会告诉我是否已经并行执行了这样的查询。 是否有人手头有这样的脚本,或者可以将我指向相关DMV,DMF或其他系统目录视图的方向,以找出答案?

3
为什么使用GROUP BY子句比不使用GROUP BY子句的集合查询显着更快?
我很好奇为什么有GROUP BY子句的聚合查询比没有子句的查询运行得这么快。 例如,此查询将花费近10秒钟来运行 SELECT MIN(CreatedDate) FROM MyTable WHERE SomeIndexedValue = 1 虽然这个过程不到一秒钟 SELECT MIN(CreatedDate) FROM MyTable WHERE SomeIndexedValue = 1 GROUP BY CreatedDate CreatedDate在这种情况下只有一个,因此分组查询返回的结果与未分组查询相同。 我注意到两个查询的执行计划是不同的-第二个查询使用Parallelism,而第一个查询则没有。 如果SQL Server没有GROUP BY子句,则以不同的方式评估聚合查询是否正常?在不使用GROUP BY子句的情况下,我可以做些什么来提高第一查询的性能? 编辑 我刚刚学会了可以将OPTION(querytraceon 8649)并行性的开销开销设置为0,这使查询使用某种并行性,并将运行时间减少到2秒,尽管我不知道使用此查询提示是否有任何弊端。 SELECT MIN(CreatedDate) FROM MyTable WHERE SomeIndexedValue = 1 OPTION(querytraceon 8649) 我仍然希望运行时间更短,因为查询是要在用户选择时填充一个值,因此理想情况下应该像分组查询一样是瞬时的。现在,我只是包装查询,但我知道这并不是理想的解决方案。 SELECT Min(CreatedDate) FROM ( SELECT Min(CreatedDate) as …

2
MAXDOP = 1,并行查询提示和成本阈值
如果实例MAXDOP设置为1,并且查询提示用于允许特定查询并行进行,那么SQL仍然使用“并行成本阈值”来决定是否实际并行吗? 尽管此链接建议CTFP如果MAXDOP为1 ,则将其忽略。尽管有任何查询,无论成本如何,在没有查询提示的情况下,当MAXDOP值为1 时,它都将并行进行。 谁能让我知道这两个请求的预期行为? 范例1: Instance Maxdop: 1 CTFP: 50 Query hint: Maxdop=2 Query cost: 30 范例2: Instance Maxdop: 1 CTFP: 50 Query hint: Maxdop=2 Query cost: 70

3
将标量函数转换为TVF函数以并行执行-仍在串行模式下运行
发布后,我的一个查询正在串行执行模式下运行,我注意到在视图中使用了两个新功能,该视图在从应用程序生成的LINQ to SQL Query中引用。因此,我将那些SCALAR函数转换为TVF函数,但查询仍在串行模式下运行。 早些时候,我在其他一些查询中将标量转换为TVF,它解决了强制串行执行的问题。 这是标量函数: CREATE FUNCTION [dbo].[FindEventReviewDueDate] ( @EventNumber VARCHAR(20), @EventID VARCHAR(25), @EventIDDate BIT ) RETURNS DateTime AS BEGIN DECLARE @CurrentEventStatus VARCHAR(20) DECLARE @EventDateTime DateTime DECLARE @ReviewDueDate DateTime SELECT @CurrentEventStatus = (SELECT cis.EventStatus FROM CurrentEventStatus cis INNER JOIN Event1 r WITH (NOLOCK) ON (cis.Event1Id = r.Id) WHERE (r.EventNumber …

2
如果并行交换事件死锁是无受害者的,这有问题吗?
我们在生产环境中会看到很多此类查询内并行线程死锁(SQL Server 2012 SP2-是的...我知道...),但是当查看通过扩展事件捕获的死锁XML时,受害者名单是空的。 <victim-list /> 死锁似乎在4个线程之间,两个带有WaitType="e_waitPipeNewRow",两个带有WaitType="e_waitPipeGetRow"。 <resource-list> <exchangeEvent id="Pipe13904cb620" WaitType="e_waitPipeNewRow" nodeId="19"> <owner-list> <owner id="process4649868" /> </owner-list> <waiter-list> <waiter id="process40eb498" /> </waiter-list> </exchangeEvent> <exchangeEvent id="Pipe30670d480" WaitType="e_waitPipeNewRow" nodeId="21"> <owner-list> <owner id="process368ecf8" /> </owner-list> <waiter-list> <waiter id="process46a0cf8" /> </waiter-list> </exchangeEvent> <exchangeEvent id="Pipe13904cb4e0" WaitType="e_waitPipeGetRow" nodeId="19"> <owner-list> <owner id="process40eb498" /> </owner-list> <waiter-list> <waiter id="process368ecf8" …

2
对Parallel Scalar UDF的支持是否合理?
相当有据可查的是,标量UDF强制执行总体串行计划。 并行运行功能 鉴于大量行进入必须计算UDF的管道中的某个点,为什么引擎不能只在处理器之间分配它们呢?如果UDF中没有状态,则顺序无关紧要。 有人声称UDF是黑匣子,必须使用游标。我可以看到,在两次迭代之间保持某种状态的情况下,用户游标无法在SP内并行化,但是看起来应该可以并行化。 解释引擎为何强制整个计划按顺序进行而不是仅由UDF计算阶段进行的加分。 对并行UDF的支持是否是要求的合理功能?

2
在Debian上对单个MySQL查询使用多个内核
我正在将MySQL服务器运行在Debian作为来宾OS的VM(VMWare)上进行测试。来宾系统具有四个模拟的CPU内核,因此我将thread_concurrency设置为四个。 我正在大型表上进行昂贵的联接,这可能需要花费几分钟,但是我在客户机操作系统上看到,一次只使用一个核心。无论涉及的表使用了什么存储引擎(都已通过MyISAM和InnoDB测试),都会发生这种情况。另外,在执行这些大查询时,整个数据库似乎被阻塞,我无法并行执行任何其他查询。奇怪的是,htop显示,查询的核心在查询运行期间发生了变化! 为什么会这样? 这是来自的相关条目SHOW FULL PROCESSLIST;(没有其他查询): | 153 | root | localhost | pulse_stocks | Query | 50 | Copying to tmp table | SELECT DISTINCT * FROM `pulse_stocks`.`stocks` sto, `pulse_new`.`security` sec WHERE (sto.excntry = sec.excntry AND sto.stock_id = sec.ibtic) OR ( sto.isin = sec.isin AND sto.isin <> "" AND …


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.