MSSQL中的等待事件RESOURCE_SEMAPHORE和RESOURCE_SEMAHPORE_QUERY_COMPILE说明

0    209    1

Tags:

👉 本文共约3807个字,系统预计阅读时间或需15分钟。

简介

SQL Server 有 两类RESOURCE_SEMAPHORE 等待事件: RESOURCE_SEMAPHORE 和 RESOURCE_SEMAHPORE_QUERY_COMPILE.

Resource_SEMAPHORE是指一条或多条语句在执行的时候等待memory的分配。

RESOURCE_SEMAHPORE_QUERY_COMPILE是指一条语句在编译的时候等待memory的情况。

资源信号(RESOURCE_SEMAPHORE)

RESOURCE_SEMAPHORE 等待类型表示一个Workder等待SQL Server给予其申请的内存,以便执行Hash和Sort等操作。

1,RESOURCE_SEMAPHORE 揭示内存压力

当出现 RESOURCE_SEMAPHORE 等待时,这说明查询语句向系统请求的内存没有得到满足,就是说,该查询语句在执行Task前,需要一定量的内存资源,如果SQL Server当前的内存不足,不能分配查询语句请求的内存,将导致查询语句处于等待内存资源的状态。在SQL Server存储引擎中,排序(Sort)操作和哈希(Hash)操作是非常消耗内存资源的两个操作,优化相应的查询语句,以减少这两个操作,可以缓解SQL Server的内存压力,但在SQL Server实例中,经常出现RESOURCE_SEMAPHORE 等待,这说明SQL Server存在内存压力。

在数据库中有一个选项,Min Memory Per Query,该选项表示SQL Server为每个查询分配的最小内存,这意味着,当一个查询需要额外的内存资源,该查询获取的内存大小,很大部分是由该选项决定的,只有为每个查询授予一定的内存之后,该查询语句才会真正开始执行。

MSSQL中的等待事件RESOURCE_SEMAPHORE和RESOURCE_SEMAHPORE_QUERY_COMPILE说明

2,发送RESOURCE SEMAPHORE用于授予请求内存(Requested Memory)

当SQL Server实例收到用户的查询请求时,SQL Server优化器首先创建编译计划(Complied Plan),根据编译计划再创建执行计划(Execution Plan)。当SQL Server优化器创建编译计划时,它需要计算查询在执行时需要消耗的内存,用于执行查询的内存分为必需内存(Required Memory)和额外内存(Additional Memory)。必需内存是指SQL Server实例执行Sort或Hash操作时必须分配的最小内存,如果没有分配必需内存,查询请求不会执行。额外内存是查询用于存储临时的中间数据的内存,如果SQL Server没有足够的内存,查询将临时数据存储在硬盘中,这会降低查询性能。

SQL Server 要授予每个查询多少内存,查询才能真正开始执行呢?

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
MSSQL中的等待事件RESOURCE_SEMAPHORE和RESOURCE_SEMAHPORE_QUERY_COMPILE说明后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
验证码:
请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部