Sql Server中通过sql命令获取cpu占用及产生锁的sql

获取 Sql Server 中 CPU 占用及产生锁的 SQL 通常需要通过观察系统状态和运行 SQL 的表现来进行,下面将介绍通过 SQL 命令来实现这一目标的完整攻略。

查找 CPU 占用

查询系统进程

可以使用以下的 SQL 命令查询 Sql Server 的相关进程信息,从而获得 CPU 占用情况:

SELECT * FROM sys.sysprocesses WHERE spid > 50 ORDER BY CPU DESC

该命令中,sys.sysprocesses 是 SQL Server 中的系统表,其中包含有关运行在 SQL Server 实例上的用户和系统进程的信息。通过查看此表中的 CPU 列即可获得当前正在消耗 CPU 的运行进程。上述代码查询的是 spid 大于 50 的进程(因为小于或等于 50 的是系统进程),并按 CPU 占用降序排列。

查看 SQL 执行计划

另一个查找 CPU 占用的方式是使用 SQL Server Profiler 或 SQL Server Management Studio 的查询执行计划选项。执行计划可以显示各个 SQL 查询在执行过程中消耗 CPU 和 IO 的情况,从而帮助排查性能瓶颈。

例如,在 SQL Server Management Studio (SSMS) 中,可以打开查询窗口,输入需要分析的 SQL,然后在执行前选择“查询”菜单下的“执行选项”,在弹出窗口中勾选“显示实际执行计划”,执行 SQL 后即可查看到执行计划和相关性能数据。

查找产生锁的 SQL

查看锁等待信息

可以使用以下的 SQL 命令查看 Sql Server 上当前正在等待的锁的信息:

SELECT 
    L.request_session_id AS SPID, 
    DB_NAME(L.resource_database_id) AS DatabaseName, 
    NOTES.last_wait_type AS WaitType, 
    L.resource_type AS ResourceType, 
    L.resource_description AS ResourceDescription,   
    L.request_mode AS RequestMode, 
    L.request_status AS RequestStatus, 
    L.request_owner_type AS RequestOwnerType, 
    L.request_owner_id AS RequestOwnerID, 
    L.request_mode AS RequestMode, 
    L.request_time AS RequestTime,
    Q.text AS QueryText
FROM sys.dm_tran_locks L 
LEFT JOIN sys.dm_exec_sessions S ON L.request_session_id = S.session_id 
OUTER APPLY sys.dm_exec_sql_text(S.sql_handle) AS Q 
OUTER APPLY sys.dm_exec_input_buffer(S.session_id, NULL) AS NOTES     
WHERE L.request_status = 'WAIT' AND S.session_id > 50

该命令使用了 sys.dm_tran_locks 等锁定相关系统表,将正在等待的锁的信息和相关的查询语句一起输出,以便于进一步分析锁等待的具体原因。

查看被锁的资源信息

除了上述的锁等待查询命令外,还可以使用以下的 SQL 命令查看 Sql Server 上被某个进程所锁定的资源对象:

SELECT      SystemProcesses.spid, 
            SystemProcesses.program_name, 
            SystemProcesses.loginame, 
            SystemProcesses.waittype, 
            SystemProcesses.lastwaittype, 
            SystemLocks.ResourceType, 
            SystemLocks.ResourceDescription, 
            SystemLocks.Mode, 
            SystemLocks.Status   
FROM        MASTER.dbo.syslockinfo SystemLocks 
LEFT JOIN   MASTER.dbo.sysprocesses SystemProcesses ON SystemProcesses.spid = SystemLocks.req_spid 
WHERE       SystemProcesses.spid > 50 
ORDER BY    SystemProcesses.spid

该命令中,syslockinfo 是 Sql Server 的系统表,用于记录被锁住的资源信息。该命令通过连表输出了被锁住的资源和相关进程的信息。

通过上述两个 SQL 命令,造成 SQL Server 性能瓶颈的锁等待问题可以得到有效的排查。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Sql Server中通过sql命令获取cpu占用及产生锁的sql - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • 提升MySQL查询效率及查询速度优化的四个方法详析

    提升MySQL查询效率及查询速度优化的四个方法详析 MySQL是一款非常流行的关系型数据库管理系统,它可以支持相当复杂的数据查询操作。但是,在实际使用中,我们会发现查询速度有时候会变得相当缓慢,影响到系统的整体性能。为了提升MySQL的查询效率,我们可以从以下四个方面入手进行优化: 1. 数据库设计优化 优化数据库设计是提升MySQL查询效率的关键步骤。在设…

    database 2023年5月19日
    00
  • Adabas和Couchbase的区别

    Adabas和Couchbase是两个不同的数据库系统,它们有不同的特点和特性。下面将针对这两个数据库系统进行详细讲解他们的区别,包括数据结构、数据模型、数据访问、性能等方面的比较。 Adabas Adabas是一个关系数据库管理系统,它的特点是由其特有的数据结构ADAM(Adabas DAta Model)实现了高效的数据存取,以及高可靠性的事务处理。Ad…

    database 2023年3月27日
    00
  • SQLite 和 PostgreSQL 的区别

    下面我来详细讲解SQLite和PostgreSQL的区别。 SQLite和PostgreSQL的概述 SQLite是一种嵌入式数据库,通常被用来作为移动设备或桌面应用程序中的本地数据库 PostgreSQL是一种功能强大的开源关系型数据库,支持大型企业级数据存储和处理 SQLite和PostgreSQL的数据类型 SQLite支持的数据类型较少,主要包括:N…

    database 2023年3月27日
    00
  • Python2.x利用commands模块执行Linux shell命令

    使用commands模块可以方便地在Python中执行Linux shell命令。但需要注意的是,commands模块在Python 2.6之后已不再被支持,应该使用subprocess模块代替。 以下是使用commands模块执行Linux shell命令的攻略: 导入commands模块 import commands 获取命令的输出 调用command…

    database 2023年5月22日
    00
  • Linux下安装mysql的教程详解

    Linux下安装MySQL的教程详解 准备工作 在正式安装MySQL之前,需要先进行一些准备工作: 确认Linux服务器的发行版本 在命令行终端中输入以下命令,查看Linux服务器的发行版本:cat /etc/issue 通过源安装必要组件 在命令行终端中输入以下命令,通过系统的源安装必要的组件:sudo apt-get updatesudo apt-get…

    database 2023年5月22日
    00
  • oracle ORA-01114、ORA-27067错误解决方法

    Oracle ORA-01114、ORA-27067错误解决方法 问题描述 当在Oracle数据库中执行操作时,可能会遇到ORA-01114和ORA-27067错误。ORA-01114错误信息如下: ORA-01114: IO error writing block to file (block # ) ORA-27067: I/O error on fil…

    database 2023年5月21日
    00
  • Ubuntu 14.04下mysql安装配置教程

    下面是详细的Ubuntu 14.04下mysql安装配置教程: 1. 安装步骤 1.1 更新软件源 进入终端,输入以下命令: sudo apt-get update 1.2 安装mysql-server 同样在终端中输入以下命令: sudo apt-get install mysql-server 在安装过程中,会提示设置root用户的密码。 1.3 下载m…

    database 2023年5月22日
    00
  • Spring myBatis数据库连接异常问题及解决

    下面就给您详细讲解一下如何解决 Spring MyBatis数据库连接异常的问题。 1. 问题背景 在 Spring MyBatis 的项目中,我们可能会遇到以下异常: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; neste…

    database 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部