0
一个成功的查询操作会引入3个内存的使用,即查询语句的编译,查询计划的缓存以及数据的缓存。
https://blogs.msdn.microsoft.com/sqlqueryprocessing/2010/02/16/understanding-sql-server-memory-grant/
Posted on
Wednesday, July 05, 2017
by
醉·醉·鱼
and labeled under
sql server internals
最近数据库服务器很慢,跑了一下whoIsActive,发现有很多waittype是RESOURCE_SEMAPHORE,发现很是好玩,整理一下。一个成功的查询操作会引入3个内存的使用,即查询语句的编译,查询计划的缓存以及数据的缓存。
如何查看编译需要的内存,数据缓存,以及cached plan size
如何模拟RESOURCE_SEMAPHORE
- https://www.brentozar.com/archive/2013/08/query-plans-what-happens-when-row-estimates-get-high/ 上例举了两个query。在SSMS里面,多开几个窗口,同时跑第二个query就行了。
RESOURCE_SEMAPHORE情况下,有哪些有趣的数据
RESOURCE_SEMAPHORE情况下,所有query都会suspend么?
- 不会。如果你的query还是像Brent Ozar提到的第二个query一样需要很多的内存,那就妥妥地等着吧。如果你的query需要的内存很少,那SQL server会直接执行。
引用
https://www.brentozar.com/archive/2013/08/query-plans-what-happens-when-row-estimates-get-high/https://blogs.msdn.microsoft.com/sqlqueryprocessing/2010/02/16/understanding-sql-server-memory-grant/