标签: parallelism

为什么在使用 parallel 子句时我看不到并行执行的任何好处?

我有这两种创建表格和填充行的方法。第一个使用并行(3 级)子句,所以我预计插入速度会快得多。但我对 a) 和 b) 所用的时间进行了计时,结果几乎相同。没有迹象表明方法 a) 更快,实际上在某些运行中,方法 b) 更快。

我认为 parallel 子句会并行执行插入,因此速度要快得多。我在这里缺少什么?

一种)

create table TAB1
(col0 number not null,
 col1 number,
 col2 number,
 col3 varchar2(25)) parallel (degree 3)
 storage (initial 100K next 100K pctincrease 0);


begin
 for i in 1..300000 loop
  insert into TAB1 values(i-1,i,300000-i,null);
 end loop;
 commit;
end;
/
Run Code Online (Sandbox Code Playgroud)

b)

create table TAB2
(col0 number not null,
 col1 number,
 col2 number,
 col3 varchar2(25))
 storage (initial 100K next 100K pctincrease 0);


begin
 for i in 1..300000 loop
  insert …
Run Code Online (Sandbox Code Playgroud)

oracle oracle-11g-r2 parallelism

2
推荐指数
1
解决办法
259
查看次数

强制 T-SQL 查询使用并行性好吗?

这可以通过在查询选项中调用跟踪标志 8649 来完成。

OPTION (QUERYTRACEON 8649)

此跟踪标志导致查询的成本为 0,这将始终低于并行性的成本阈值,因此该查询将被视为并行计划。

试图以这种方式强制 T-SQL 查询使用并行性是否有任何缺点?

示例教程如何强制并行

performance sql-server optimization parallelism t-sql query-performance

2
推荐指数
1
解决办法
400
查看次数

SQL Server 使用并行计划成本低于 5

我有一个使用并行计划的数据透视查询,即使成本小于 5。

Parallelism 的成本阈值设置为默认值 5,MAXDOP 为 0。

SELECT Column1, Column2 Column3, Column4 AS Column5, Column6 Column7, Column8 Column9, Column10 Column11
        FROM (
              SELECT Column12,
                        Column13,
                        Column1
                FROM Database1.Schema1.Object1
             ) Object2 PIVOT( SUM(Column13) FOR Column12 IN (Column2, Column4, Column6, Column8, Column10) ) AS pvtScore;
Run Code Online (Sandbox Code Playgroud)

以下屏幕截图显示估计的子树成本为 1.39。

我想知道为什么在成本阈值为 5 时使用并行计划以启动并行性。

坚果

版本:SQL Server 2008 R2

sql-server parallelism sql-server-2008-r2

2
推荐指数
1
解决办法
149
查看次数

缓慢的并行 SQL Server 查询,串行几乎是即时的

我有一个 SQL Server 查询如下(混淆):

UPDATE  [TABLE1]
SET     [COLUMN1] = CAST('N' AS CHAR(1))
FROM    [TABLE1]
WHERE   (COLUMN1 = '2' AND COLUMN2 IN('VAL1', 'VAL2', 'VAL3')) OR 
        (COLUMN1 <> 'N' AND (
                                    SELECT  COUNT(*)
                                    FROM    TABLE2 wle
                                            JOIN TABLE3 wl 
                                                    ON wl.COLUMN3 = wle.COLUMN3
                                    WHERE   TABLE1.COLUMN4 = wle.COLUMN4 AND 
                                            (wl.COLUMN5 = '1' OR wl.COLUMN6 = '1') AND 
                                            wle.COLUMN7 = (
                                                            SELECT  MIN(alias.COLUMN7)
                                                            FROM    TABLE2 AS alias
                                                            WHERE   TABLE1.COLUMN4 = alias.COLUMN4
                                                            )
                                ) > 0
                                            
        )
Run Code Online (Sandbox Code Playgroud)

我们刚刚将我们的(测试)服务器从 SQL Server 2014 SP3 升级到 SQL Server …

parallelism sql-server-2016 query-performance

2
推荐指数
1
解决办法
206
查看次数

长时间运行的 SELECT 查询失败,因为 SQL SERVER 上的 DELETE 导致死锁受害者 - 为什么,以及如何避免这种情况?

首先 1 个线程从表中选择大量数据。

然后,在 SELECT 查询尚未完成之前,另一个线程从该表中删除数据。

它导致 SELECT 查询失败,错误 errorCode=1205 sqlState=40001 和发生死锁的消息。

我认为第二个事务必须等到第一个事务完成,或者第一个事务必须在没有第二个事务所做更改的情况下返回数据。我怎样才能避免这种情况?

我无法改变交易的顺序或以某种方式控制它们(应用程序的用户很多,他们可以随时以任何顺序做任何他们想做的事情)。为什么会发生?

查询是这样的(我对它们进行了一些混淆):

SELECT distinct P.pID, (LastNAME+' '+FirstName+' '+SurName) as NAME, 'person' as Type, CA.OrgName, PC.personemail as Email
FROM Persons P
INNER JOIN WORK PW ON (P.mainwork = PW.pwId)
INNER JOIN CONTACT PC ON (PC.pID = P.pID)
LEFT OUTER JOIN ORG CA ON (CA.orgId = PW.orgId)
WHERE (P.Status = ?)
Run Code Online (Sandbox Code Playgroud)

DELETE FROM persons WHERE id = 1234
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock parallelism transaction

1
推荐指数
1
解决办法
7710
查看次数

SELECT 中的廉价函数如何使整个查询变慢?

我将 Postgres 13.3 与内部和外部查询一起使用,它们都只产生一行(只是一些关于行数的统计数据)。

我不明白为什么下面的 Query2 比 Query1 慢得多。它们基本上应该几乎完全相同,最多可能只有几毫秒的差异......

查询 1:需要 49 秒

WITH t1 AS (
        SELECT
            (SELECT COUNT(*) FROM racing.all_computable_xformula_bday_combos) AS all_count,
            (SELECT COUNT(*) FROM racing.xday_todo_all) AS todo_count,
            (SELECT COUNT(*) FROM racing.xday) AS xday_row_count
        OFFSET 0 -- this is to prevent inlining
)

SELECT
            t1.all_count,
            t1.all_count-t1.todo_count AS done_count,
            t1.todo_count,
            t1.xday_row_count
FROM t1;
Run Code Online (Sandbox Code Playgroud)

查询 2:需要 4 分 30 秒

我只添加了一行:

WITH t1 AS (
        SELECT
            (SELECT COUNT(*) FROM racing.all_computable_xformula_bday_combos) AS all_count,
            (SELECT COUNT(*) FROM racing.xday_todo_all) AS todo_count,
            (SELECT COUNT(*) …
Run Code Online (Sandbox Code Playgroud)

postgresql cte parallelism functions postgresql-performance

1
推荐指数
1
解决办法
160
查看次数

SQL Server 不使用 OPTION(MAXDOP 20)创建并行计划

我们在具有 8 个套接字和 20 个处理器的 VM 上托管了一个 UAT3 服务器,我们在具有相同配置的同一 VM 上托管了类似的 UAT2 服务器。

我们在两个服务器上运行以下查询

select recid from Table1 where nation='AE'
Run Code Online (Sandbox Code Playgroud)

两个服务器具有相同的数据和相同的结构。

UAT2 和 UAT3 具有默认设置并行5 和最大并行度的成本阈值0。

IN UAT2 服务器并行处理正在发生。它需要 10 秒才能完成,但 UAT3 串行处理正在发生,因为它需要 3 分 30 秒。

我们比较 UAT2 和 UAT3 服务器配置都相同。不知道为什么 SQL Server 在 UAT2 中选择并行执行而不是在 UAT3 中。

下面是表定义

select recid from Table1 where nation='AE'
Run Code Online (Sandbox Code Playgroud)

下面是视图

CREATE TABLE [dbo].[FKMB_CUSTOMER]( 
    [RECID] [nvarchar](64) NOT NULL, 
    [XMLRECORD] [xml] NULL, 
    [ALT_CUSTOMER] AS 
        ([dbo].[IX_CUSTOMER_ALT_CUSTOMER]([XMLRECORD])) 
        PERSISTED, 
    [SMS] AS 
        ([dbo].[IX_CUSTOMER_SMS_1]([XMLRECORD])) …
Run Code Online (Sandbox Code Playgroud)

sql-server parallelism execution-plan query-performance

1
推荐指数
2
解决办法
178
查看次数

为什么并行会导致锁升级,临界点在哪里?

我使用定制的 Stack Overflow 数据库(180GB)并运行一个简单的更新查询:(Users 表上只有一个聚集索引)

Begin Tran
Update U set U.Reputation=100000 
from StackOverflow.dbo.Users as U 
where U.CreationDate = '2008-10-10 14:26:33.540'
Run Code Online (Sandbox Code Playgroud)

查询计划

在此输入图像描述

此查询会导致锁升级。我无法在另一个窗口中使用同一个表运行查询:

select * from StackOverflow.dbo.Users as U where U.id=11
Run Code Online (Sandbox Code Playgroud)

如果我option (maxdop 1)在查询末尾添加以避免并行,则一切都很好(计划)。

在较小的 Stack Overflow DB (StackOverflow2013 - 52GB) 中不会发生锁升级(计划)。

如何确定导致升级的数据量?

我使用 SQL Server 2019。数据库兼容级别为 150。

表信息:

  • StackOverflow2013.dbo.Users -- 2 465 713 行;45 184 页
  • StackOverflow.dbo.Users -- 8 917 507 行;143 667 页

sql-server parallelism lock-escalation

1
推荐指数
1
解决办法
421
查看次数

执行计划使用并行化的查询是否可以使用属于同一可用性组的另一台服务器上的处理器内核?

如果我有两台服务器(服务器 A 和服务器 B)属于同一个可用性组故障转移集群,并且在服务器 A 上运行的查询具有使用并行化的执行计划,那么该查询是否可以使用处理器的内核在服务器 B 上?

sql-server parallelism clustering availability-groups sql-server-2017

0
推荐指数
1
解决办法
58
查看次数

基数,MS-SQL 的并行提示替代方案

UPDATE MARK M SET ARCHIVE_FLAG = 'N' WHERE EXISTS 
(SELECT /*+ cardinality(S1, 10) parallel(S1,8)*/ 1 FROM SHFASG S, SHIFT S1 
WHERE S.ID = S1.ID AND M.ID = S.MARKID AND ARCHIVE_FLAG <> 'Y');
Run Code Online (Sandbox Code Playgroud)

这是我拥有的 oracle 查询,我想为我的 MS SQL DB 创建类似的查询,请提供任何帮助

sql-server optimization parallelism cardinality-estimates query-performance

0
推荐指数
1
解决办法
119
查看次数