• Max Degree of Parallelism最大并行度配置--缓解CPU压力


    配置 max degree of parallelism 服务器配置选项

    https://docs.microsoft.com/zh-cn/sql/database-engine/configure-windows/configure-the-max-degree-of-parallelism-server-configuration-option?view=sql-server-ver15

    由于公司的业务在急速增长中,发现数据库服务器已经基本撑不住这么多并发。一方面,要求开发人员调整并发架构,利用缓存减少查询。一方面从数据库方面改善并发。数据库的并行度可设置如下:

    1)cost threshold for parallelism:数据库引擎在编译的时候,预估执行计划的cost;若此cost消耗超过cost threshold for parallelism设置的值;sqlserver就会使用并行执行计划。

    2)max degree of parallelism:并行执行计划最多能使用多少线程并行执行语句。默认值为0

    在OLTP环境中,会存在大量的并发查询,因此会存在以下两种情况:

    1)单个查询的并发过高,可能会导致等待并发同步的消耗

    若SQL Server中有大量的CXPACKET等待类型,则可能由于是并发过高的原因,CXPACKET等待类型是由于等待一个或多个线程同步,而出现的等待类型。

    然而并非说CXPACKET等待类型等待就是不好,我们只是需要减少此等待类型。具体查询如下

    SELECT '查看百分比是否>10%,如果大于10%,考虑降低并行度'    
    select cast([signal_wait_time_ms] as decimal(30,2))/[wait_time_ms] as [百分比],*     
    from sys.dm_os_wait_stats (nolock)    
    where [wait_time_ms]<>0 AND  wait_type='CXPACKET'   

    2)单个查询的并发过高,占用大量cpu资源,导致其他线程无法使用

    若有许多查询长期处于Runnable的状态,则可能是由于并发的影响,其他进程拿不到cpu执行。从而大量线程无法running。具体查询如下

    SELECT '查看cpu任务'    
    SELECT scheduler_id, current_tasks_count, runnable_tasks_count    
    FROM sys.dm_os_schedulers (nolock)    
    WHERE scheduler_id < 255  


    如何设置合理的并行度呢?

    --配置最大并行度
    sp_configure 'max degree of parallelism',1
    go
    --使设置生效
    Reconfigure
    go
    
    sp_configure 'cost threshold for parallelism',10--设置为10s
    go
    --使设置生效
    Reconfigure
    go

    1)在OLTP服务器环境中

    a)对并发度要求高,对每个用户请求都要及时响应,一般建议将max degree of parallelism  设置为1;因此cost threshold for parallelism  的值没有作用,默认为5即可

    b)对并发度要求不高,经常会有复杂查询的数据库,若cpu个数<8,一般建议将max degree of parallelism 设置为cpu数量;若cpu个数>=8建议将值设为8;cost threshold for parallelism 默认即可

    2)在OLAP服务器环境中

    由于查询均比较复杂,则可将max degree of parallelism 设置为0,同时如果考虑到等待消耗问题,则可以考虑将cost threshold for parallelism 的值设置为10,以降低并发执行的可能

    3)在OLTP和OLAP混合环境中

    a)对并发度要求高,则可以考虑将max degree of parallelism  设置为<=4,cost threshold for parallelism 值默认即可

    b)对并发度要求不高,经常会有复杂查询的数据库,若cpu个数<8,一般建议将max degree of parallelism 设置为cpu数量;若cpu个数>=8建议将值设为8;cost threshold for parallelism 默认即可

    OLAP和OLTP的 概念和区别

    联机事务处理OLTP(on-line transaction processing)主要是执行基本的、日常的事务处理,比如在银行存取一笔款,就是一个事务交易。OLTP的特点一般有:

    1.实时性要求高;

    2.数据量不是很大;

    3.交易一般是确定的,所以OLTP是对确定性的数据进行存取;(比如存取款都有一个特定的金额)

    4.并发性要求高并且严格的要求事务的完整,安全性。(比如这种情况:有可能你和你的家人同时在不同的银行取同一个帐号的款),

    联机分析处理OLAP(On-Line Analytical Processing)是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。典型的应用就是复杂的动态的报表系统。OLAP的特点一般有:

    1.实时性要求不是很高,很多应用的顶多是每天更新一下数据;

    2.数据量大,因为OLAP支持的是动态查询,所以用户也许要通过将很多数据的统计后才能得到想要知道的信息,例如时间序列分析等等,所以处理的数据量很大;

    3.因为重点在于决策支持,所以查询一般是动态的,也就是说允许用户随时提出查询的要求。所以在OLAP中通过一个重要概念“维”来搭建一个动态查询的平台(或技术),供用户自己去决定需要知道什么信息。

    以下是大致的区分:

    OLTP OLAP

    用户: 操作人员,低层管理人员 决策人员,高级管理人员

    功能: 日常操作处理 分析决策

    DB设计: 面向应用 面向主题

    数据: 当前的,最新的细节的,二维的分立的 历史的,聚集的,多维的集成的, 统一的

    存取: 读/写数十条记录 读上百万条记录

    工作单位: 简单的事务 复杂的查询

    用户数: 上千个 上百个

    DB大小:100MB-GB 100GB-TB

    这些概念(或技术)都是应用层面的,这个和用什么数据库系统是无关的。有兴趣的朋友如果愿意了解OLAP的具体应用而又不愿意花太大的力气,不妨到科研、教育、文化和卫生系统去看一看,他们那里一般都有一个叫做SPSS的统计分析软件,这是一个和SQLSERVER在同一层次上的世界级的、最权威的统计分析软件,其菜单上有一个“分析”项目,其下拉的第一个项目就是OLAP,当然也可以自己装一个试试。

    OLTP与OLAP是两种很高级的应用,以上只是点到了一些最表面的东西,给大家一个抛砖引玉的作用。纸上得来终觉浅,绝知此事要躬行

  • 相关阅读:
    吴裕雄--天生自然C++语言学习笔记:C++ 存储类
    吴裕雄--天生自然C++语言学习笔记:C++ 修饰符类型
    吴裕雄--天生自然C++语言学习笔记:C++ 常量
    吴裕雄--天生自然C++语言学习笔记:C++ 变量作用域
    吴裕雄--天生自然C++语言学习笔记:C++ 变量类型
    吴裕雄--天生自然C++语言学习笔记:C++ 数据类型
    吴裕雄--天生自然C++语言学习笔记:C++ 注释
    吴裕雄--天生自然C++语言学习笔记:C++ 基本语法
    SPOJ375Query on a tree I(树剖+线段树)(询问边)
    HDU5768Lucky7(中国剩余定理+容斥定理)(区间个数统计)
  • 原文地址:https://www.cnblogs.com/linybo/p/13920057.html
Copyright © 2020-2023  润新知