很早之前就有朋友问过我,能否按业务的优先等级分配SQLServer的资源,使得不同的应用能得到不同的响应,SQLServer2008之前对这个需求貌似没有什么 解决方法,不过从SQLServer2008开始,这个需求就变得很简单了,SQLServer直接就为我们提供了按用户的要求分配
很早之前就有朋友问过我,能否按业务的优先等级分配SQLServer的资源,使得不同的应用能得到不同的响应,SQLServer2008之前对这个需求貌似没有什么
解决方法,不过从SQLServer2008开始,这个需求就变得很简单了,SQLServer直接就为我们提供了按用户的要求分配资源的能力,下面我们就来介绍这个功能。
SQLServer资源调控器分成三个部分:资源池、负载组和分类器函数;资源池为我们提供了将资源(CPU、Memory等)划分到不同的载体中,负载组承载负载并
将这些负载映射到资源池,分类器函数将不同的会话映射到不同的负载组中。
资源池:
08提供了两种预先定义好的资源池
内部池:内部池只用于SQLServer数据库引擎,系统管理员不能改变和设置;
默认池:默认池用于没有分配资源池的各种负载,因此,如果你不指定资源调控器,全部负载将使用默认池。默认池也不能改变或删除,但是可以修改它的资源上
下限。
资源池上下限要求:
各个资源池的下限之和不能超过100%,因为SQLServer会尽力满足每个下限;
上限可以设置为下限和100%之间的任意值。
以下是关于资源池的基本操作:
<span>--</span><span>创建资源池<br> </span><span>Create</span> Resource Pool UserQueries <span>with</span>(max_cpu_percent<span>=</span><span>100</span><span>) </span><span>--</span><span>删除资源池<br></span><span>drop</span> Resource Pool UserQueries
负载组:
负载组可以让管理员轻松地监控资源使用情况,在不同的资源池之间移动某类负载。
负载组被映射到资源池上,一个资源池可以有零个或更多负载组,一个负载组为一组用户会话提供一个桶。
<span>--</span><span>创建负载组</span> <span>Create</span> WorkLoad <span>Group</span><span> DailyExecReports USING UserQueries; </span><span>--</span><span>删除负载组</span> <span>drop</span> WorkLoad <span>Group</span> DailyExecReports
分类器函数:
分类器函数将接入的会话分类,并为会话的请求和查询分配一个负载组。你可以根据连接串中的任意属性(IP地址/应用程序名、用户名等)分别分配组。
按以下条件分配组:
- 一个用户接入并使用SAP_Login登录名,则为他分配SAPUsers负载组;
- 一个用户接入程序名是SSMS,则让它成为AdhocAdmin负载组的一员;
- 一个用户是ReportUsers组一员,则让它成为DaliyExecReports负载组一员;
- 一个用户以共享内存连接,并在NightlyAdmin用户组中,则分配NightlyMaintanceTask组。
<span>--</span><span>创建资源池</span> <span>Create</span> Resource Pool AdminQueries <span>with</span>(max_cpu_percent<span>=</span><span>100</span><span>) </span><span>Create</span> Resource Pool UserQueries <span>with</span>(max_cpu_percent<span>=</span><span>100</span><span>) </span><span>--</span><span>创建负载组</span> <span>Create</span> WorkLoad <span>Group</span><span> NightlyMaintenanceTasks USING AdminQueries; </span><span>Create</span> WorkLoad <span>Group</span><span> AdhocAdmin USING AdminQueries; </span><span>Create</span> WorkLoad <span>Group</span><span> SAPUsers USING UserQueries; </span><span>Create</span> WorkLoad <span>Group</span><span> DailyExecReports USING UserQueries; </span><span>--</span><span>创建分类器函数</span> <span>USE</span><span> master </span><span>GO</span> <span>create</span> <span>FUNCTION</span><span> class_func_1() </span><span>Returns</span> sysname <span>with</span><span> schemabinding </span><span>begin</span> <span>Declare</span> <span>@val</span><span> sysname </span><span>--</span><span>Handle workload groups defined by login names</span> <span>IF</span> <span>SUSER_SNAME</span>()<span>=</span><span>'</span><span>SAP_Login</span><span>'</span> <span>begin</span> <span>SET</span> <span>@val</span><span>=</span><span>'</span><span>SAPUsers</span><span>'</span><span>; </span><span>Return</span> <span>@val</span><span>; </span><span>end</span> <span>IF</span> <span>APP_NAME</span>() <span>like</span> <span>'</span><span>Microsoft SQL Server Management Studio%</span><span>'</span> <span>begin</span> <span>Set</span> <span>@val</span><span>=</span><span>'</span><span>AdhocAdmin</span><span>'</span><span>; </span><span>Return</span> <span>@val</span><span>; </span><span>end</span> <span>IF</span> <span>IS_MEMBER</span>(<span>'</span><span>ReportUsers</span><span>'</span>)<span>=</span><span>1</span> <span>begin</span> <span>Set</span> <span>@val</span><span>=</span><span>'</span><span>DailyExecReports</span><span>'</span><span>; </span><span>Return</span> <span>@val</span><span>; </span><span>end</span> <span>IF</span> CONNECTIONPROPERTY(<span>'</span><span>net_transport</span><span>'</span>)<span>=</span><span>'</span><span>Shared memory</span><span>'</span> <span>and</span> <span>IS_MEMBER</span>(<span>'</span><span>NightlyAdmin</span><span>'</span>)<span>=</span><span>1</span> <span>begin</span> <span>Set</span> <span>@val</span><span>=</span><span>'</span><span>NightlyMaintenanceTasks</span><span>'</span><span>; </span><span>Return</span> <span>@val</span><span>; </span><span>end</span> <span>Return</span> <span>@val</span><span>; </span><span>end</span>
绑定分类器函数:
<span>--</span><span>将分类器函数绑定到资源调控器上</span> <span>Alter</span> Resource Governor <span>With</span>(Classifier_Function<span>=</span>dbo.class_func_1);
启用和禁用分类器函数:
<span>--</span><span>启用</span> <span>ALter</span> Resource Governor <span>Reconfigure</span><span>; </span><span>--</span><span>禁用</span> <span>ALTER</span> RESOURCE GOVERNOR DISABLE;
测试:
现在我们分别使用SAP_Login和sysadmin用户调用此脚本
<span>--</span><span>测试脚本(分别使用SAP_Login和sysadmin用户调用此脚本)</span> <span>set</span> nocount <span>on</span> <span>Declare</span> <span>@i</span> <span>int</span><span>=</span><span>100000000</span><span>; </span><span>Declare</span> <span>@s</span> <span>varchar</span>(<span>100</span>),<span>@count</span> <span>int</span><span>; </span><span>While</span> <span>@i</span><span>></span><span>0</span> <span>begin</span> <span>Select</span> <span>@s</span><span>=</span><span>@@VERSION</span><span>; </span><span>select</span> <span>@count</span><span>=</span><span>COUNT</span>(<span>0</span>) <span>from</span><span> sys.sysobjects </span><span>set</span> <span>@i</span><span>=</span><span>@i</span><span>-</span><span>1</span><span>; </span><span>end</span>
通过性能计数器查看资源分配:
我们可以选择性能计数器的资源统计:SQL Server:Resource Pools Stats;
我们先将资源池按一比一的比例分配:
<span>Create</span> Resource Pool AdminQueries <span>with</span>(max_cpu_percent<span>=</span><span>100</span><span>) </span><span>Create</span> Resource Pool UserQueries <span>with</span>(max_cpu_percent<span>=</span><span>100</span>)
运行测试脚本,显示的CPU利用率图如下
现在将资源分配做如下调整:
<span>Create</span> Resource Pool AdminQueries <span>with</span>(max_cpu_percent<span>=</span><span>10</span><span>) </span><span>Create</span> Resource Pool UserQueries <span>with</span>(max_cpu_percent<span>=</span><span>90</span>)
再次运行测试脚本,显示的CPU利用率图如下
可以看到,当我们调整资源后,两个Session中运行同样的脚本,它们所使用的资源差别很大,这样就达到了根据不同的应用分配不同的资源的目的。
DMV查看资源池:
<span>--</span><span>查看Session所在的资源池</span> <span>select</span><span> s.session_id,s.login_name ,s.program_name,s.group_id,g.name </span><span>from</span><span> sys.dm_exec_sessions s </span><span>join</span><span> sys.dm_resource_governor_workload_groups g </span><span>on</span> s.group_id<span>=</span><span>g.group_id </span><span>where</span> session_id<span>></span><span>50</span>
<span>--</span><span>查看资源池情况</span> <span>select</span> <span>*</span> <span>from</span> sys.dm_resource_governor_resource_pools
可以看到,我们创建的两个资源池(还有两个是系统资源池和默认资源池),而且不同的Session对应到了不同的资源池中。

对于 SQL Server 数据库中已存在同名对象,需要采取以下步骤:确认对象类型(表、视图、存储过程)。如果对象为空,可使用 IF NOT EXISTS 跳过创建。如果对象有数据,使用不同名称或修改结构。使用 DROP 删除现有对象(谨慎操作,建议备份)。检查架构更改,确保没有引用删除或重命名的对象。

当 SQL Server 服务无法启动时,可采取以下步骤解决:检查错误日志以确定根本原因。确保服务帐户具有启动服务的权限。检查依赖项服务是否正在运行。禁用防病毒软件。修复 SQL Server 安装。如果修复不起作用,重新安装 SQL Server。

要查看 SQL Server 端口号:打开 SSMS,连接到服务器。在对象资源管理器中找到服务器名称,右键单击它,然后选择“属性”。在“连接”选项卡中,查看“TCP 端口”字段。

SQL Server 数据库文件通常存储在以下默认位置:Windows: C:\Program Files\Microsoft SQL Server\MSSQL\DATALinux: /var/opt/mssql/data可通过修改数据库文件路径设置来自定义数据库文件位置。

问题发现这次使用的是SqlServer数据库,之前并没有使用过,但是问题不大,我按照需求文档的步骤连接好SqlServer之后,启动SpringBoot项目,发现了一个报错,如下:刚开始我以为是SqlServer连接问题呢,于是便去查看数据库,发现数据库一切正常,我首先第一时间问了我的同事,他们是否有这样的问题,发现他们并没有,于是我便开始了我最拿手的环节,面向百度编程。开始解决具体报错信息是这样,于是我便开始了百度报错:ERRORc.a.d.p.DruidDataSource$CreateCo

SQL Server 英文安装可通过以下步骤更改为中文:下载相应语言包;停止 SQL Server 服务;安装语言包;更改实例语言;更改用户界面语言;重启应用程序。

有网友反馈,在win11上无法安装sqlserver这款软件,不知道是怎么回事,根据目前的测试来看,win11存在硬盘问题,部分接口硬盘无法安装这款软件。win11为啥不能安装sqlserver:答:win11不能安装sqlserver是硬盘的问题。1、据了解,win11存在对于硬盘的检测bug。2、这导致sqlserver无法在“三星m.2接口”硬盘上安装。3、因此,如果我们要安装的话,需要准备一块其他硬盘。4、然后将该硬盘安装到电脑里,如果没有额外插槽的话就要换掉之前的硬盘。5、安装完成后,

可以通过以下步骤查询 SQL Server 数据库日志:1. 打开 SQL Server Management Studio,连接到数据库服务器;2. 展开“管理”节点,导航到“SQL Server 日志”;3. 选择要查询的日志文件,右键单击并选择“查看日志文件”;4. 浏览日志记录。其他查询日志方法:使用 Transact-SQL 查询、PowerShell Cmdlet。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

SublimeText3 Linux new version
SublimeText3 Linux latest version

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

Atom editor mac version download
The most popular open source editor

SublimeText3 Mac version
God-level code editing software (SublimeText3)
