AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[parallelism](dba)

Martin Hope
Anil Raghavan
Asked: 2022-02-03 06:10:46 +0800 CST

SQL Server 标量 UDF 并行性之谜!

  • 6

在我最喜欢的 SQL Server 大师 Brent Ozar 的网站上引用Erik Darling 的这篇博文:

当您单独从该表中选择时,它会显示“ CouldNotGenerateValidParallelPlan ”。

但是,当您将该表连接到另一个没有调用标量 UDF 的检查约束/计算列的表时,查询将与“找到足够好的计划”并行

USE tempdb;
SET NOCOUNT ON;

SELECT TOP 10000
       ROW_NUMBER() OVER ( ORDER BY ( SELECT NULL )) AS ID, DATEADD(MINUTE, m.message_id, SYSDATETIME()) AS SomeDate
INTO   dbo.constraint_test_1
FROM   sys.messages AS m, sys.messages AS m2;
GO

SELECT TOP 10000
       ROW_NUMBER() OVER ( ORDER BY ( SELECT NULL )) AS ID, DATEADD(MINUTE, m.message_id, SYSDATETIME()) AS SomeDate
INTO   dbo.constraint_test_2
FROM   sys.messages AS m, sys.messages AS m2;
GO

CREATE  FUNCTION dbo.DateCheck ( @d DATETIME2(7))
RETURNS BIT
WITH    RETURNS NULL ON NULL INPUT
AS
    BEGIN
        DECLARE @Out BIT;
        SELECT  @Out = CASE WHEN @d < DATEADD(DAY, 30, SYSDATETIME()) THEN 1 ELSE 0 END;
        RETURN  @Out;
    END;
GO

ALTER TABLE dbo.constraint_test_1 ADD CONSTRAINT ck_cc_dt CHECK ( dbo.DateCheck(SomeDate) = 1 );

SELECT  *
FROM    dbo.constraint_test_1
OPTION  (QUERYTRACEON 8649, MAXDOP 0, RECOMPILE); -- Does not go parallel

SELECT  T1.ID, T2.SomeDate
FROM    dbo.constraint_test_1 T1 INNER JOIN
        dbo.constraint_test_2 T2 ON T1.ID = T2.ID
OPTION  (QUERYTRACEON 8649, MAXDOP 0, RECOMPILE); -- Goes parallel
sql-server parallelism
  • 1 个回答
  • 295 Views
Martin Hope
Islacine
Asked: 2019-12-26 02:28:53 +0800 CST

执行哪个命令来运行多个 OLAP 查询?

  • 0

我有 10 个包含不同 OLAP 查询的 sql 文件。

我想批量运行它们。批处理的意思是,Postgres 会将每个文件视为一个批处理并立即执行查询(取决于其自己的管理过程)

下面的命令,一个一个地执行每一个查询

psql -h localhost -d databasename -U user -p port -a -q -f input.sql -o output.txt

那可能吗 ?以及如何计算执行该批处理 sql 查询所需的时间?

postgresql parallelism
  • 1 个回答
  • 122 Views
Martin Hope
tale852150
Asked: 2019-10-31 15:08:44 +0800 CST

Oracle Standard Edition 数据库版本 12.1 中默认启用还是禁用并行执行?

  • 2

Red Hat Linux 7 上的 Oracle 标准版 12.1

根据文档,Oracle SE 12.1 默认启用并行执行。但是,在查看数据库参数时,存在以下情况:

PARAMETER              VALUE
---------              -----
Parallel execution     FALSE

文档中有错误吗?不应该将其设置为 TRUE。
如果不启用并行执行,此参数指的是什么?如果需要设置为TRUE,该怎么做?

oracle-12c parallelism
  • 1 个回答
  • 1156 Views
Martin Hope
Dryadwoods
Asked: 2019-07-18 06:58:33 +0800 CST

SQL Server - 使用输出更新在并行环境中不起作用

  • 1

我知道输出参数不能保证并行逻辑。我想要实现的逻辑在多线程环境中失败了。

要对此进行测试,只需打开 2 个窗口并尽可能快地并排执行它们。然后比较Ids,有些会重复。

declare @id int 
select @id = 1
while @id >=1 and @id <= 100
begin
    UPDATE sys_QueueJob
    SET StartedOn = GETDATE()
    OUTPUT DELETED.Id as Result
    WHERE Id = (select top 1 qj.Id 
                    from sys_QueueJob qj
                    where qj.ProcessedOn is null AND qj.StartedOn is null                                                   
                    order by CreatedOn asc)
    print 'Count: ' + convert(nvarchar(max), @id)
    select @id = @id + 1
end

我只想从尚未启动的 qeueJob 表中获取最旧的条目,同时告诉它现在已经启动了。并且相同的代码需要为我提供 100% 的确定性,即下一次执行会给我下一个正确的 Id。

我怎样才能做到这一点?

sql-server parallelism
  • 1 个回答
  • 193 Views
Martin Hope
Erik Darling
Asked: 2019-03-29 15:15:23 +0800 CST

在 SQL Server 中,并行性如何更改内存授予?

  • 9

我听说过有关并行选择查询的内存授予的相互矛盾的事情:

  • 内存授予乘以 DOP
  • 内存授予除以 DOP

它是哪一个?

sql-server parallelism
  • 1 个回答
  • 451 Views
Martin Hope
WorldStar SQL
Asked: 2018-05-06 05:37:13 +0800 CST

在 SQL Server 中可视化并行线程使用情况的最简单和最准确的方法是什么?

  • 5

在这里跟进我的其他问题,我想要一种简单的方法来形象化答案。

我试过使用这样的查询,但“正在运行”的线程数有时会超过 DOP。

SELECT    ost.session_id,
          ost.exec_context_id,
          ost.scheduler_id,
          qp.node_id,
          w.worker_address,
          qp.physical_operator_name,
          ost.task_state,
          qp.row_count
FROM      sys.dm_os_tasks AS ost
JOIN      sys.dm_os_workers AS w
    ON ost.worker_address = w.worker_address
LEFT JOIN sys.dm_exec_query_profiles AS qp
    ON w.task_address = qp.task_address
WHERE     ost.session_id = 57
AND       ost.task_state = 'RUNNING'
ORDER BY  ost.exec_context_id, ost.scheduler_id, qp.node_id, w.worker_address;

我也尝试过使用query_thread_profile扩展事件,但对于具有多个并行分支的计划,它显示相同的 N 个线程 ID。这似乎与给出的答案相反,因为 DOP 没有明确限制使用的线程总数。对于以 DOP 4 运行的查询,它看起来像这样。我确信相同的四个线程(加上协调器)不会用于所有分支和操作员。

xe_session

因此,在 DOP 8 运行这样的查询会为我提供三个并行分支。

SELECT COUNT(DISTINCT t1.Data)
FROM dbo.t1 
JOIN dbo.t2 
ON t1.Id = t2.f_Id
JOIN t3
ON t1.Id = t3.f_Id
OPTION(FORCE ORDER, HASH JOIN);

但有时我的查询返回这个:

查询1

有时它返回这个:

查询_2

这是一些示例数据:

CREATE TABLE dbo.t1 ( Id INT IDENTITY PRIMARY KEY CLUSTERED, Data INT NOT NULL );

CREATE TABLE dbo.t2 ( Id INT IDENTITY PRIMARY KEY CLUSTERED, f_Id INT NOT NULL );

CREATE TABLE dbo.t3 ( Id INT IDENTITY PRIMARY KEY CLUSTERED, f_Id INT NOT NULL );

INSERT dbo.t1 WITH (TABLOCKX) ( Data )
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) % 2000
FROM (
SELECT TOP 1000000 1 AS num
FROM master..spt_values AS sv
CROSS JOIN master..spt_values AS sv2
CROSS JOIN master..spt_values AS sv3
) AS nums

INSERT dbo.t2 WITH (TABLOCKX) ( f_Id )
SELECT TOP 15000000 t.Id
FROM dbo.t1 AS t
CROSS JOIN dbo.t1 AS t2

INSERT dbo.t3 WITH (TABLOCKX) ( f_Id )
SELECT TOP 25000000 t.Id
FROM dbo.t1 AS t
CROSS JOIN dbo.t1 AS t2

谢谢!

sql-server parallelism
  • 1 个回答
  • 309 Views
Martin Hope
WorldStar SQL
Asked: 2018-05-04 16:53:15 +0800 CST

在 SQL Server 中,并行度是每个运算符还是其他?

  • 7

我和一位老 DBA 一起工作,他说了很多奇怪的话。Dude 有一本 O'Reilly 的书,封面上只有一个变形虫。

午餐时我们讨论了并行性,因为我们的新服务器有 24 个内核。他说,在并行计划中,每个操作员都会获得 DOP 线程。因此,如果您有 MAXDOP 8 并且您的查询有 4 个并行运算符,它将同时使用 32 个线程。

这似乎不对,因为您很快就会用完线程。

我还读到整个查询可能只有 8 个,这似乎太少了。

为什么我在 sysprocesses 中看到每个 SPID 的线程多于 MAXDOP?

他们都对吗?

sql-server parallelism
  • 2 个回答
  • 867 Views
Martin Hope
Azeem Haider
Asked: 2017-10-19 21:08:26 +0800 CST

UNION 查询是否以并行形式运行

  • 2

我有三个表,我想以并行形式从这三个表中选择数据以提高性能。

我正在运行这样的查询。

SELECT * FROM table1
UNION ALL
SELECT * FROM table2
UNION ALL
SELECT * FROM table3

我想问一下,这些查询是并行运行还是按顺序运行?

我可以做些什么来提高这个查询的性能?我可以为每个查询创建一个线程吗?

如果我使用单个连接为此查询创建三个线程,它是否并行工作?或者我需要为每个查询创建三个连接以并行运行?

我读了一些关于这个的文章,我发现它取决于处理器内核。如果有多个内核,它会自动以并行形式运行,如果它是单个处理器,则它必须一个接一个地运行。

我在我的电脑 Core i5 中测试它。我认为核心 i5 至少有两个物理处理器,但它似乎不是以并行形式运行的。

当我使用解释表单两个表运行查询时发现了这一点

id       select_type       table         partitions       type        possible_keys      key       key_len    ref      rows      filtered     Extra
------------------------------------------------------------------------------------------------------------------------------------------------------
1        PRIMARY          table1           NULL           ALL            NULL            NULL       NULL      NULL    122882      100.00       NULL
2        UNION            table2           NULL           ALL            NULL            NULL       NULL      NULL    122882      100.00       NULL
NULL     UNION RESULT   <union1,2>         NULL           ALL            NULL            NULL       NULL      NULL    NULL        NULL         Using temporary

实际上,我想在 Google Cloud SQL 上工作是它是否支持以并行形式运行 UNION 查询。

2017 年 10 月 20 日更新

表 1、表 2 和表 3

 id            int(11) Primary Key 
 title         varchar(100)
 description   varchar(250)
 pic           varchar(100)
 tag_id        int(11)
 list_id       int(11)
 video_src     varchar(100)

每个表包含多122882行。这是目前的位置,但它正在快速增长并达到数百万。我不想在未来面对任何问题。

它不准确,但它列出了类似的内容。
不同表中Partitions相同列的原因是我想根据特定区域保存数据。如果我知道用户区域,我认为从表中获取数据会更快。但有时我需要从多个区域获取数据,例如从 3 个表中获取数据。实际上不是只有 3 个表,而是很多表 PARTITION by country_province_city_tablename。但在示例中假设只有 3 个表。

查询

当我需要从特定区域获取数据时。

  SELECT * FROM `table1` WHERE id = 7

当我需要从多个区域获取数据时。

  SELECT * FROM `table1` WHERE id IN(1,5,7,3)
  UNION ALL
  SELECT * FROM `table2` WHERE id IN(1,6,3,8,2)
  UNION ALL
  SELECT * FROM `table3` WHERE id IN(6,54,1,5,7)     

如您所见WHERE,子句仅适用于PRIMARY KEY默认索引的内容。这使得搜索一行变得容易。

您认为PARTITION BY REGION好还是不好?
以及如何以并行形式运行这些查询以提高性能?

table1、table2 和 table3 只是占位符 用确切的名称替换它们

  table1 -->  PK_PNJ_PTK_Posts
  table2 -->  PK_ISB_RWP_Posts
  table3 -->  PK_PNJ_KSR_Posts

表格中的行

    //table1 or PK_PNJ_PTK_Posts

    id      title     description    tag_id     list_id      video_src
   ----------------------------------------------------------------------
    1      Title1     desc1           37           13        path/to/file1
    2      Title2     desc2           43           34        path/to/file2
    3      Title3     desc3           433           4        path/to/file3
    4      Title4     desc4           53           36        path/to/file4
    5      Title5     desc5           43           31        path/to/file5
    6      Title6     desc6           73           54        path/to/file6
    7      Title7     desc7           3             9        path/to/file7
    8      Title8     desc8           53           56        path/to/file8
    9      Title9     desc9           13           32        path/to/file9
    ..     ....        ...            ..           ..          ....
    ..     ....        ...            ..           ..          ....


    //table2 or PK_ISB_RWP_Posts

    id      title     description    tag_id     list_id      video_src
   ----------------------------------------------------------------------
    1      Title1     desc1           37           13        path/to/file1
    2      Title2     desc2           43           34        path/to/file2
    3      Title3     desc3           433           4        path/to/file3
    4      Title4     desc4           53           36        path/to/file4
    5      Title5     desc5           43           31        path/to/file5
    6      Title6     desc6           73           54        path/to/file6
    7      Title7     desc7           3             9        path/to/file7
    8      Title8     desc8           53           56        path/to/file8
    9      Title9     desc9           13           32        path/to/file9
    ..     ....        ...            ..           ..          ....
    ..     ....        ...            ..           ..          ....


    //table3 or PK_PNJ_KSR_Posts

    id      title     description    tag_id     list_id      video_src
   ----------------------------------------------------------------------
    1      Title1     desc1           37           13        path/to/file1
    2      Title2     desc2           43           34        path/to/file2
    3      Title3     desc3           433           4        path/to/file3
    4      Title4     desc4           53           36        path/to/file4
    5      Title5     desc5           43           31        path/to/file5
    6      Title6     desc6           73           54        path/to/file6
    7      Title7     desc7           3             9        path/to/file7
    8      Title8     desc8           53           56        path/to/file8
    9      Title9     desc9           13           32        path/to/file9
    ..     ....        ...            ..           ..          ....
    ..     ....        ...            ..           ..          ....
mysql parallelism
  • 1 个回答
  • 3421 Views
Martin Hope
user99201
Asked: 2017-06-12 06:02:24 +0800 CST

SQL Server 线程和并行度

  • 3

我对 SQL Server 线程的理解是,SQL Server 将会话中的执行请求分解为多个任务,并将每个任务与一个工作线程相关联。因此 SQL Server 总是尝试使用多个线程(如果可用且需要)来运行查询,无论它是并行查询还是非并行查询。

但是以下语句(来自 Microsoft SQL Server 2012 Internals (MS Press) 一书)似乎陈述了一些不同的内容:

一个并行查询执行计划可以使用多个线程;非并行查询使用的串行执行计划仅使用单个线程。

编辑:我最初的理解是(可能不正确)调度程序可能(在需要时)使用来自同一个 NUMA 节点的多个工作人员/线程来处理同一执行请求的不同任务,当它是串行执行时。

对于并行执行,多个调度程序/处理器将同时处理相同的执行请求(分解为多个任务),并且每个调度程序将使用(再次,当需要时)来自它们各自的 NUMA 节点。

换句话说,无论是否并行,都有可能使用多个线程。

明明我原来的理解肯定有瑕疵,但不知道错在哪里。我最初的理解是否仅在执行PARALLEL查询时适用?

谢谢

sql-server parallelism
  • 1 个回答
  • 8068 Views
Martin Hope
matskm
Asked: 2016-01-14 02:59:38 +0800 CST

如何减少巨大的 CXPACKET & LATCH_EX (ACCESS_METHODS_DATASET_PARENT) 等待时间?

  • 5

问题

自今年年初以来,由于我们系统中的 SQL 超时,我们一直在经历严重的用户中断。

有问题的 SQL-Server 实例在工作时间具有非常高的 CPU 使用率(所有 16 个内核上始终高于 90%)。

我们还注意到非常高的等待时间:CXPACKET 和 LATCH_EX 的组合约占所有等待的 97%。这在 CXPACKET 和 LATCH_EX 之间分配了大约 50/50。

占 LATCH_EX 绝大多数 (>95%) 的非缓冲锁存等待是 ACCESS_METHODS_DATASET_PARENT。

这表明问题与并行性有关。

等待时间规模的一个例子是:

CXPACKET : 332,301,799 ms
LATCH_EX : 267,955,752 ms
PAGEIOLATCH_SH : 2,955,160 ms

这是 1 月 11 日 08:00-16:24 之间的时间段。

正在考虑的选项

1) 将 MAXDOP 从 0 更改为 4 到 8 之间的值

2)将并行度的成本阈值从50修改为更高的数字

关于如何缓解我们所看到的非常高的 CPU 负载并减少超时的建议非常受欢迎,特别是建议的行动方案是否明智,以及将 MAXDOP 和并行性的成本阈值更改为哪些数字。

背景资料

  • SQL-Server 2008 R2 在 AMD Opteron 6180 SE 上运行,其中 16 个内核分配给此 SQL-Server 实例。

  • 工作负载类型:在工作时间内同时连接大约 800 个连接;混合了一些 OLAP 的大多数 OLTP 类型的工作负载。

  • Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) ... Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1).内存在 24 个内核之间约为 128 Gigs。此实例有 16 个内核可用

sql-server-2008-r2 parallelism
  • 3 个回答
  • 14683 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve