内容简介:首先,处于睡眠(Sleeping)状态的会话意味着当前没有运行任何请求。这样也意味着这种状态的会话是不会消耗CPU资源的,那么它是否消耗内存资源呢?答案是会,它会保留了一定数量的内存,用于保存与会话相关的结构。 这包括会话上下文等信息, 关于每个处于睡眠状态会话消耗的内存具体大小,可以使用下面脚本查看睡眠(Sleeping)状态会话消耗的内存(不确定其值的准确性,文末有介绍):
在SQL Server中,会话的状态有运行(Running)、睡眠(Sleeping)、休眠(Dormant)、Preconnect 等状态,有时候你会在数据库中看到很多会话处于睡眠(Sleeping)状态,那么这些睡眠(Sleeping)状态的会话会消耗CPU、Memory资源吗?如果消耗资源的话,那么sleeping会话具体消耗多少内存资源呢? 另外它会影响数据库性能吗?
首先,处于睡眠(Sleeping)状态的会话意味着当前没有运行任何请求。这样也意味着这种状态的会话是不会消耗CPU资源的,那么它是否消耗内存资源呢?答案是会,它会保留了一定数量的内存,用于保存与会话相关的结构。 这包括会话上下文等信息, 关于每个处于睡眠状态会话消耗的内存具体大小,可以使用下面脚本查看睡眠(Sleeping)状态会话消耗的内存(不确定其值的准确性,文末有介绍):
SELECT s.session_id , s.status , s.last_request_start_time , s.memory_usage*8 AS memory_usage_kb , t.task_state , s.host_name , s.program_name , s.transaction_isolation_level --, s.open_transaction_count FROM sys.dm_exec_connections AS c JOIN sys.dm_exec_sessions AS s ON s.session_id = c.session_id LEFT JOIN sys.dm_os_tasks AS t ON t.session_id = s.session_id WHERE s.status='sleeping' ORDER BY s.memory_usage DESC;
使用这个这个脚本查出,发现处于睡眠(Sleeping)状态会话消耗的内存有很多情况: 0KB、16KB、24KB、32KB、40KB、.....216KB. 似乎没有什么规律,当然以32KB、40KB居多。官方文档关于这方面的介绍几乎没有,仅仅在 “ Memory Used by SQL Server Objects Specifications ” 中有部分介绍,如下所示:
下表列出 SQL Server 中不同对象所用内存的大致数值。列出的数值为估计值,具体取决于环境和创建对象的方式。 SQL Server 2005 管理某些项的方式与早期版本存在显著差异。
SQL Server 2000 |
SQL Server 2005 |
SQL Server 2008 |
|
锁 |
每个所有者 64 字节 + 32 字节 |
每个所有者 64 字节 + 32 字节 |
每个所有者 64 字节 + 32 字节 |
打开的数据库 |
每个文件 3924 字节 + 1640 字节,每个文件组 336 字节 |
不适用于 SQL Server 2005 |
不适用于 SQL Server 2008 |
打开的对象 |
对象中每个打开的索引 256 字节 + 1724 字节 |
不适用于 SQL Server 2005 |
不适用于 SQL Server 2008 |
用户连接 |
12 KB + (3 * network_packet_size) |
约为 (3 * network_packet_size + 94 KB) |
约为 (3 * network_packet_size + 94 KB) |
网络数据包大小是表格格式数据流 (TDS) 数据包的大小,该数据包用于应用程序和 SQL Server 数据库引擎之间的通信。默认的数据包大小为 4 KB ,由 “ 网络数据包大小 ” 配置选项控制。
启用多个活动的结果集时,用户连接约为 (3 + 3 * num_logical_connections) * network_packet_size + 94 KB 。
但是在SQL Server 2008之后的文档,没有看到这方面内容的介绍。在SQL Server 2005、SQL Server 2008数据库中测试发现(使用最上面的脚本)memory_usage大小为16KB、24KB,远小于94KB, 这个文档和测试结果也一度让我怀疑sys.dm_exec_sessions这个DMV视图中memory_usage字段计算Sleeping会话消耗内存的准确性 。很遗憾,官方资料关于memory_usage的介绍仅为:Number of 8-KB pages of memory used by this session. Is not nullable. 不过,有点可以确认的是:Sleeping状态的会话消耗的内存资源真的很少。基本上对数据库性能影响很小。
参考资料:
https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/aa337559(v=sql.105)
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/62d19c9e-7ccb-4e1b-a18f-f249c23f0376/sleeping-spids-consume-cpu-and-memory-?forum=sqlgetstarted
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- java – Spring会话数据Redis – 从Redis Store获取有效会话,当前用户
- google-app-engine – GAE webapp2会话:创建和检查会话的正确过程
- 图解 Session(会话)
- 内网会话劫持
- Tomcat集群之会话保持
- Tomcat集群之会话保持
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Kafka技术内幕
郑奇煌 / 人民邮电出版社 / 2017-11 / 119.00元
Kafka自LinkedIn开源以来就以高性能、高吞吐量、分布式的特性著称,本书以0.10版本的源码为基础,深入分析了Kafka的设计与实现,包括生产者和消费者的消息处理流程,新旧消费者不同的设计方式,存储层的实现,协调者和控制器如何确保Kafka集群的分布式和容错特性,两种同步集群工具MirrorMaker和uReplicator,流处理的两种API以及Kafka的一些高级特性等。一起来看看 《Kafka技术内幕》 这本书的介绍吧!