阻塞分析

MySQL锁阻塞分析 日常维护中,经常会碰到线程被阻塞,导致数据库响应非常慢,下面就看看如何获取是哪个线程导致了阻塞的。 1. 环境说明 RHEL 6.4 x86_64 + MySQL 5.6.19 事务隔离级别:RR 2. 测试过程 3. 查看锁阻塞线程信息 这里用几中方法进行分析: 3.1  使用show processlist查看 MySQL [(none)]> 阅读详情

来自:http://blog.youkuaiyun.com/roy_88/article/details/2682044 

--阻塞   
/***********************************************************************************************************************   
阻塞:其中一个事务阻塞,其它事务等待对方释放它们的锁,同时会导致死锁问题。   
  
整理人:中国风(Roy)   
  
日期:2008.07.20   
************************************************************************************************************************/   
  
--生成测试表Ta   
if not object_id('Ta') is null  
    drop table Ta   
go   
create table Ta(ID int Primary key,Col1 int,Col2 nvarchar(10))   
insert Ta    
select 1,101,'A' union all  
select 2,102,'B' union all  
select 3,103,'C'   
go   
生成数据:   
/*   
表Ta   
ID          Col1        Col2   
----------- ----------- ----------   
1           101         A   
2           102         B   
3           103         C   
  
(3 行受影响)   
*/   
  
将处理阻塞减到最少:   
1、事务要尽量短   
2、不要在事务中请求用户输入   
3、在读数据考虑便用行版本管理   
4、在事务中尽量访问最少量的数据   
5、尽可能地使用低的事务隔离级别   
  
go   
阻塞1(事务):   
--测试单表   
  
-----------------------------连接窗口1(update/insert/delete)----------------------   
begin tran   
--update   
    update ta set col2='BB' where ID=2   
--或insert   
begin tran   
    insert Ta values(4,104,'D')   
--或delete   
begin tran   
    delete ta where ID=1   
  
--rollback tran   
  
------------------------------------------连接窗口2--------------------------------   
begin tran   
    select * from ta   
  
--rollback tran   
  
--------------分析-----------------------   
select    
    request_session_id as spid,   
    resource_type,   
    db_name(resource_database_id) as dbName,   
    resource_description,   
    resource_associated_entity_id,   
    request_mode as mode,   
    request_status as Status   
from    
    sys.dm_tran_locks   
/*   
spid        resource_type dbName resource_description resource_associated_entity_id mode  Status   
----------- ------------- ------ -------------------- ----------------------------- ----- ------   
55          DATABASE      Test   0                    S                             GRANT NULL  
54          DATABASE      Test   0                    S                             GRANT NULL  
53          DATABASE      Test   0                    S                             GRANT NULL  
55          PAGE          Test   1:201                72057594040483840             IS    GRANT  
54          PAGE          Test   1:201                72057594040483840             IX    GRANT  
55          OBJECT        Test   1774629365           IS                            GRANT NULL  
54          OBJECT        Test   1774629365           IX                            GRANT NULL  
54          KEY           Test   (020068e8b274)       72057594040483840             X     GRANT --(spID:54请求了排它锁)   
55          KEY           Test   (020068e8b274)       72057594040483840             S     WAIT  --(spID:55共享锁+等待状态)   
(9 行受影响)   
*/   
  
--查连接住信息(spid:54、55)   
select connect_time,last_read,last_write,most_recent_sql_handle     
from sys.dm_exec_connections where session_id in(54,55)   
  
--查看会话信息   
select login_time,host_name,program_name,login_name,last_request_start_time,last_request_end_time    
from sys.dm_exec_sessions where session_id in(54,55)   
  
--查看阻塞正在执行的请求   
select    
    session_id,blocking_session_id,wait_type,wait_time,wait_resource   
from    
    sys.dm_exec_requests   
where  
    blocking_session_id>0--正在阻塞请求的会话的 ID。如果此列是 NULL,则不会阻塞请求   
  
--查看正在执行的SQL语句   
  
select    
    a.session_id,sql.text,a.most_recent_sql_handle   
from    
    sys.dm_exec_connections a   
cross apply   
    sys.dm_exec_sql_text(a.most_recent_sql_handle) as SQL   --也可用函数fn_get_sql通过most_recent_sql_handle得到执行语句   
where  
    a.Session_id in(54,55)   
/*   
session_id  text   
----------- -----------------------------------------------   
54          begin tran   update ta set col2='BB' where ID=2   
55          begin tran   select * from ta   
*/   
  
处理方法:   
--连接窗口2   
begin tran   
    select * from ta with (nolock)--用nolock:业务数据不断变化中,如销售查看当月时可用。   
  
  
  
  
  
阻塞2(索引):   
  
-----------------------连接窗口1   
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE    --针对会话设置了 TRANSACTION ISOLATION LEVEL   
begin tran   
    update ta set col2='BB' where COl1=102   
  
--rollback tran   
  
  
  
------------------------连接窗口2   
insert into ta(ID,Col1,Col2) values(5,105,'E')   
  
  
  
处理方法:   
  
create index IX_Ta_Col1 on Ta(Col1)--用COl1列上创索引,当更新时条件:COl1=102会用到索引IX_Ta_Col1上得到一个排它键的范围锁   
  
  
  
阻塞3(会话设置):   
  
-------------------------------连接窗口1   
  
begin tran   
--update   
    update ta set col2='BB' where ID=2   
    select col2 from ta where ID=2   
  
--rollback tran   
  
--------------------------------连接窗口2   
  
SET TRANSACTION ISOLATION LEVEL READ COMMITTED --设置会话已提交读:指定语句不能读取已由其他事务修改但尚未提交的数据   
begin tran   
    select * from ta    
  
  
  
处理方法:   
--------------------------------连接窗口2(善用会话设置:业务数据不断变化中,如销售查看当月时可用)   
  
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED --设置会话未提交读:指定语句可以读取已由其他事务修改但尚未提交的行   
begin tran   
    select * from ta   
<pre></pre>


VSCode连接SAP ABAP开发环境 本文介绍了使用VSCode连接ABAP开发环境的详细步骤。首先通过SICF或SMICM事务码获取ABAP连接地址,然后安装ABAP remote filesystem插件。提供了两种创建连接的方法:通过命令面板逐步配置(输入服务器地址、账号、系统标识等)或直接编辑JSON配置文件。最后通过命令面板选择已创建的连接即可完成连接,连接成功后可在VSCode左侧工作区查看ABAP系统内容进行开发。JSON配置方式更为简便推荐。整个流程帮助开发者摆脱复杂的Eclipse配置,实现快速便捷的ABAP开发环境搭建。 阅读详情

相关推荐

解决Visual C++2008安装失败,error 1935

重装系统后Visual C++没了,其他都能装上但VC2008会报这个error 1935。鉴于我把网上所有的解决方法排了一遍错,我也不知道是哪一步起效,所以就都放上来了。特别注意:报error 1935的错误原因可能不尽相同,比如我的报错开头为An error occurred,结尾为HRESULT:0x80070005。80070005 拒绝访问通常是权限问题,安装Visual C++无法写入文件夹或注册表(直接跳转第7步)

weixin_44427808的博客 1万+

在Golang中常见的7种阻塞使用方式

在工作和学习总,使用Golang的实现业务逻辑的时候,往往需要使流程阻塞一段时间等待其他协程的执行;锁的时候,如果多个协程同时想要获取锁,那么就会出现竞争关系。当第二个协程在尝试获取锁的时候,发现锁已经被其他协程占用,则会一直不停的尝试获取锁,形成阻塞。通道像一个传送带或者队列,总是遵循先入先出(First In First Out)的规则,保证收发数据的顺序。是调整代码执行位置,如果形成了一个循环的化,同样会阻塞程序。Go 语言中的time包提供了时间的显示和测量用的函数。

qq_16027093的博客 1973

射频功率放大器设计实战:从理论到Layout的全流程解析

本文以一款40W、960MHz LDMOS功率放大器为例,系统解析了从理论分析、仿真设计到版图实现的射频功率放大器设计全流程。内容涵盖AB类放大器选型、核心指标定义、稳定性分析、Load-Pull/源牵引仿真、史密斯圆图匹配、偏置网络设计,以及最终的谐波平衡仿真与版图电磁验证,为工程师提供了一套从理论到实践的完整设计方法论。

weixin_29266007的博客 249

Go 永久阻塞的方法

简介 我们经常需要让主 goroutine 处于永久阻塞状态,这样其他的 gorotine 就可以一直运行处理信息。下面我总结了几种可以实现永久阻塞的方法,其中大部分实例代码无法直接运行,因为 Go runtime 会检查所有 goroutine 并提示所有的 goroutine 都处于 deadlock,在实际使用中,我们添加具体的业务 goroutien 就可以运行了。 死循环 说到永久阻塞第一个想到的应该就是死循环。 package main func main() { for {

1794

分级 API Key 的使用案例

分级 API Key 的使用案例 1. 背景介绍 1.1 问题由来 随着网络服务的普及,API(Application Programming Interface,应用程序编程接口)成为了连接不同系统和应用的关键桥梁。API Key(API密钥)

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 998

在 RAP 中把业务对象“搬到网口上”:service definition 与 service binding 的全流程、范式与实战

本文解析了SAP ABAP开发中service definition和service binding的关键作用。service definition负责选择要暴露的CDS实体和行为,形成服务模型;而service binding则将服务绑定到具体协议(如OData),生成可访问的端点。两者分离带来三大优势:支持同一模型多重发布、降低环境迁移耦合度、强化安全治理。文章通过预订业务对象的端到端示例,展示了如何从CDS建模到生成Fiori Elements预览。最后以售后工单业务为例,说明这种架构如何支持内外服务

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 390

Golang通道阻塞情况与通道无阻塞实现

如果通道已满,并且没有协程在读取通道中的数据,那么任何试图将数据写入通道的协程都会被阻塞,直到有空间可用为止。如果通道为空,并且没有协程在等待从通道中读取数据,那么任何试图从通道中读取数据的协程都会被阻塞,直到有数据可用为止。使用select的default语句,在channel不可读写时,即可返回使用select+定时器,在超时时间内,channel不可读写,则返回。

qq_42009262的博客 1970

SAP 实施:Waterfall vs. Agile —— 一场“结构性矛盾“的深刻比较先说结论:在 SAP 世界里,这从来不是“谁更好“的宗教问题,而是“你的项目 DNA 是什么“的战略选择。​

SAP 实施:Waterfall vs. Agile —— 一场"结构性矛盾"的深刻比较 先说结论:在 SAP 世界里,这从来不是"谁更好"的宗教问题,而是"你的项目 DNA 是什么"的战略选择。​ SAP 早已用 SAP Activate​ 给出了官方态度——它不是纯 Agile,也不是回头去搞旧 Waterfall,而是一个带质量门的混合架构。 1. 先回到本质:两者解决的是不同维度的风险 维度 Waterfall(传统 ASAP 路线)​ Agile(SCRUM/Kanban 式迭代)​

金牌架构师 336

Go 阻塞

在Go语言中,阻塞通常指的是一个goroutine(轻量级线程)在等待另一个goroutine完成操作(如I/O操作、channel通信等)时,暂时停止执行的现象。Go语言提供了多种同步和通信机制,可以用于实现阻塞的效果。

qq_39335595的博客 1066

Unity DOTS核心概念之 System(系统)

本文全面解析Unity ECS架构中System的核心概念与最佳实践。System作为纯逻辑载体,遵循"查询数据→处理数据"的工作流,严格分离数据与逻辑。文章详细介绍了: System定义方式(推荐ISystem接口)与三大设计准则(纯逻辑、无状态、最小权限) 生命周期管理(OnCreate/OnUpdate/OnDestroy)和执行顺序控制(UpdateInGroup/UpdateBefore) 实体查询机制(SystemAPI.Query高级筛选)和多线程优化(IJobEntity

分享知识,拥抱变化 183

零差云控 ZeroErr eRob 电机 CAN、CANopen、EtherCAT、ROS2 机器人开发详细教程

TwinCAT 3(Windows 控制与自动化技术)是 Beckhoff 提供的开发平台,可将任何兼容 PC 转变为实时控制系统,用于管理各种类型的工业自动化系统,如 PLC(可编程逻辑控制器)、运动控制、机器人等。

机器人控制与仿真应用 1万+

Go是如何处理goroutine阻塞的?

当我们在go func{}下有如何代码的时候,Go是如何处理阻塞的?注:阻塞情况还有其它情况比如 加锁,网络连接读/写,select 我们需要知道在Go中代码的执行是需要线程(M)绑定 P 才能在CPU上执行如果不知道什么是GMP,可以先阅读【GMP】当我写下go func的时候,到底发生了什么?_程序员红豆的博客-优快云博客我们先理解什么是G、M、PG∶goroutine,一个计算任务。由需要执行的代码和其上下文组成,上下文包括∶当前代码位置,栈顶、栈底地址,状态等。M∶ machine,系统线程,执行

红豆的编程空间 2069

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

阻塞赋值与非阻塞赋值的再分析

在Verilog HDL设计中,经常会遇到阻塞赋值与非阻塞赋值,这是学习逻辑设计时最基础的知识点。设计者经常会在书中看到一些建议:什么时候该用阻塞赋值,什么情况下使用非阻塞赋值。可是,如果仅仅按照这样的设计推荐来进行设计的话,经常会碰到一头雾水的情况。本文就对阻塞赋值和非阻塞赋值进行详细的讨论,深入分析这两种赋值语句的区别。 “阻塞”与“非阻塞”疑问的由来,主要体现在always或initial

卷舒开合任天真 5117

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Go中的阻塞分析

Go中的阻塞分析 原文地址:https://github.com/DataDog/go-profiler-notes/blob/main/block.md 原文作者:felixge 本文永久链接:https://github.com/gocn/translator/blob/master/2021/w43_Block_Profiling_in_Go.md 译者:lsj1342 校对:laxiaohong 描述 Go 中的阻塞分析有助于您分析程序在等待下列阻塞操作上的花费时间: select cha

lsj1342的博客 729

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

mysql 锁阻塞_MySQL锁阻塞的深入分析

日常维护中,经常会碰到线程被阻塞,导致数据库响应非常慢,下面就看看如何获取是哪个线程导致了阻塞的。1. 环境说明RHEL 6.4 x86_64 + MySQL 5.6.19事务隔离级别:RR2. 测试过程3. 查看锁阻塞线程信息这里用几中方法进行分析:3.1 使用show processlist查看MySQL [(none)]> show processlist;+----+------+...

weixin_35647799的博客 435

利用logmnr分析历史阻塞会话

利用logmnr分析历史阻塞会话 之前基于ash会话级视图可以查当前阻塞以及被阻塞的会话信息,如下: 示例1: select sample_time,sql_text,session_id,session_serial#,session_type,b.sql_id, event,blocking_session,blocking_session_serial#, blocking_inst_id ...

Kay的博客 447

『每周译Go』Go 中的阻塞分析

描述Go 中的阻塞分析有助于您分析程序在等待下列阻塞操作上的花费时间:selectchan sendchan receivesemacquire ( Mutex.Lock, RWMutex...

Go中国 1123

阻塞队列分析

文章目录阻塞队列分析解决问题优势劣势适用场景组成部分阻塞队列类型核心方法底层原理相似对比非阻塞队列实现生产者-消费者模式(Object)非阻塞队列实现生产者-消费者模式(Lock)阻塞队列实现的生产者-消费者模式(BlockingQueue) 阻塞队列分析 解决问题 问题 在concurrent包发布之前,程序员需要自己去控制线程的阻塞和唤醒,同时兼顾效率和线程安全,这给程序带来了不小的复杂度...

nmgyangguangyuan的博客 385

阻塞算法与非阻塞算法对比及分析

###非阻塞算法 在并发上下文中,非阻塞算法是一种允许线程在阻塞其他线程的情况下访问共享状态的算法。在绝大多数项目中,在算法中如果一个线程的挂起没有导致其它的线程挂起,我们就说这个算法是非阻塞的。 为了更好的理解阻塞算法和非阻塞算法之间的区别,先介绍一下阻塞算法然后再介绍非阻塞算法。 ####阻塞并发算法 一个阻塞并发算法一般分下面两步: 执行线程请求的操作 阻塞线程直到可以安全地执行操作 很多算法和并发数据结构都是阻塞的。例如,java.util.concurrent.BlockingQueue的不同

liuerchong的博客 1132

行锁阻塞分析

1、分析会话阻塞出现的时间段。2、分析会话阻塞的等待事件。3、定位会话阻塞源头。

462

【IO基础知识】同步、异步、阻塞、非阻塞分析

上面的四个关键字虽然都与IO有关,但具体是由两组信息构成的。阻塞/非阻塞的概念主要与调用方式有关,主要为:指在调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务。指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回,但想要得到这些结果需要不停地进行询问。虽然表面上看非阻塞的方式可以明显的提高CPU的利用率,但是也带了另外一种后果就是系统的线程切换增加。增加的CPU执行时间能不能补偿系统的切换成本需要好好评估。同步/异步的概念主要与消息的通知机制有关,主要为:一个任务的完成

singularity0001的博客 814

达梦阻塞分析与处理

数据库,阻塞,锁

qq_21378183的博客 1881

go~协程阻塞分析

协程被阻塞8秒。

wangkai6666的博客 532

hanganalyze分析会话阻塞

hanganalyze分析会话阻塞参考文档:USING AND READING HANGANALYZE或者[ID 215858.1]1、模拟阻塞会话数据库版本:SQL> select * from ...

cuhun7152的博客 143

金仓KES添加分区阻塞分析

alter table …add partition语句给表添加分区操作需要在表上持有表级锁才能执行,当其他进程在被操作的表上已经持有锁并且没有释放时会阻塞添加分区的操作,使添加分区的操作处于锁等待状态。客户现场系统视图观察到多个进程处于”Lock“状态,证实添加分区操作被卡住是由于其他进程持有将添加分区的表上的锁,最终导致添加分区的操作无法获取表级锁,从而表现为卡住的状态。定时任务和手动添加表分区操作被卡住原因为无法获取待添加分区表上的锁,导致锁等待,添加表分区的进程状态处于‘Lock’状态。

littlegirll的专栏 476
上一篇: 死锁分析
下一篇: 数据结构(C#):队列
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值