当前位置: 首页 > 面试题库 >

打开的连接数以及连接的hibernate状态的含义

邢星波
2023-03-14
问题内容

我在数据库中运行了此查询:

SELECT  
DB_NAME(dbid) as DBName,  
COUNT(dbid) as NumberOfConnections, 
loginame as LoginName 
FROM 
    sys.sysprocesses 
WHERE  dbid > 0 
GROUP BY  dbid, loginame

---------------------------------------------------
SELECT  COUNT(dbid) as TotalConnections 
FROM sys.sysprocesses 
WHERE  
dbid > 0 
---------------------------------------------------
exec sp_who2 'Active'

我想知道与数据库的连接总数。第一个查询的总和与第二个查询的总和相等,但第三个查询返回的行数不同。

我想知道第三个查询返回什么?我在第三个查询的结果中看到一些状态为sleeping。这是什么意思?连接是空闲的,还是已在池中准备好了?如果sleeping我的结果中有很多联系,那意味着什么?

谢谢


问题答案:

的状态sleeping来会话连接,但不主动运行任何东西(比如最简单的定义,虽然可能不是100%准确的,是没有什么针对session_idsys.dm_exec_requests)。

sp_who2 'active'筛选出具有的状态的任何SPIDsleeping或拥有的最后一个命令AWAITING COMMANDLAZY WRITERCHECKPOINT SLEEP。不,我没有记住做过什么sp_who2。我只是看了一下源代码:

EXEC master..sp_helptext sp_who2;

请注意,这sp_who2是未记录且不受支持的,并且不建议使用sysprocesses,当前仅出于向后兼容的原因而存在。我认为,使用Adam
Machanic的sp_whoisactive
这样的程序可以为您提供更好的服务。或者至少至少知道如何使用更现代的DMV,例如sys.dm_exec_sessionssys.dm_exec_requests

编辑

我应该添加一个不幸的免责声明,即更现代的DMV仍然无法正确显示所涉及的数据库。但这到底意味着什么呢?如果您有这样的查询:

USE database_A;
GO

SELECT [column] FROM database_B.dbo.[table] 
  UNION ALL
SELECT [column] FROM database_C.dbo.[table];

sys.sysprocesses.dbid在此查询运行时,您希望哪个数据库ID反映在该会话中?我将其留给读者练习以确定实际发生的事情。长话短说,这不是您要用来了解当前正在“触及”哪些数据库的视图/列。



 类似资料:
  • 我的应用程序有两个quartz作业同时从Oracle DB读取两个不同的表。我正在尝试使用c3p0与Hibernate和Oracle从池中获取连接。Tomcat7启动时,C3P0似乎已初始化: 2021-02-15 18:47:26,271[INFO]HibernateEntityManager 3.2.1.GA 2021-02-15 18:47:26,290[INFO]Hibernate注释3.

  • 在打开和关闭其他ejb连接时保持和ejb连接打开是常见的还是可以接受的,还是应该在客户端完成连接并为后续任务打开新连接后立即关闭连接? 我目前正在开发一个使用EJB(JBoss AS7.1.1.final)的Swing应用程序。该应用程序打开一个ejb连接(即创建一个SynalContext实例),然后在应用程序保持运行的情况下将该SynalContext用于常见任务。有许多长时间运行的操作,其中

  • 我们在Aurora集群中使用MySQL,我们有两个实例--主实例和从实例。我们在c3po连接池上处理spring事务。我们使用的是mariadb jdbc驱动程序(版本2.2.3)。

  • 问题内容: 我在客户端上将nodejs与socket.io和angularjs一起使用。我从互联网上获取了angular- socketio示例,并向其中添加了方法。 套接字服务: 控制器: 但是,当我尝试使用此方法断开连接时,出现错误: 而且我不知道在哪里挖…… 问题答案: [更新] 是Angular的内部私有变量,因此您不应该真正依赖于此类事情。伊戈尔在另一个答案中描述了一些处理此问题的建议,

  • 嘿,我正在使用Glassfish开源v4,我遇到了一个奇怪的问题。 我在管理控制台中定义了到Oracle 11g的JDBC连接池,并设置了: 初始和最小池大小:500 最大游泳池大小:1000 池大小调整数量::750 我已经为这个连接池创建了一个特定的用户。然而,有时当我检查数据库中打开的连接时,我发现有1000多个连接(我看到的最大连接数是1440个) 当发生这种情况时,任何查询尝试都会失败,

  • 当在客户端和服务器之间建立了连接之后,就会从Web Socket实例触发事件。它是客户端和服务器之间的初始握手。 建立连接之后引发的事件称为。创建Web Socket连接非常简单。所要做的就是调用WebSocket构造函数并传入服务器的URL。 以下代码用于创建Web Socket连接 - 建立连接后,将在Web Socket实例上触发事件。 是指客户端和服务器之间的初始握手,它会产生第一次交换,