`
jiangduxi
  • 浏览: 458913 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

MySQL数据库的锁引发的问题

阅读更多
  在少量数据进行测试一个Update和insert频繁操作表的时候,运行良好。但是最近在实际运营中,数据量可能过大,导致很可能出现死锁现象。通过导出process list看,可以看到多个Update操作语句的状态为locked。导致的后果就是系统运行变慢,用户的Update操作失效(可能都被locked),在这种情况下只有重新启动服务器后系统恢复正常。使用是Mysql5.1版本的数据库。

个人分析的思路如下:
引用

1. 分析locked操作的时候表,直接是与存在死锁发生的可能原因。
  2. 分析locked操作的表中的触发器是否会引起死锁发生的可能原因。
  3. 根据locked操作的表的类型分析是否有存在死锁发生的可能原因。

以上三点是现在个人真的出现的状态和解决的思路。希望有这方面实际经验的朋友指点下!大家都来谈谈吧!谢谢了
分享到:
评论
9 楼 jyslb 2010-09-02  
Define:
比如说有两个线程,线程一要先更新记录A然后更新记录B,线程二要先更新记录B然后更新记录A,两个线程并发的情况下,很有可能就出现死锁。他们分别锁定了AB记录,又在等待获得另一条记录的锁权限。

Analyze:
程序中是否存在多线程批量进行数据库insert, update, delete动作,是否存在竞争状态

Improvement1: 是否可以去除批量提交
Improvement2: 是否可以考虑单线程
Improvement3:考虑对数据库操作进行排序
8 楼 ffyahoo 2010-08-31  
yuwenbao 写道
呵呵,是不是事务的timeout?楼主的存储引擎是innodb吧,建议楼主去掉所有表的外键,mysql是会锁键的。而且由于mysql的innodb没有行级锁,所以当数据量大时,如果对键的约束限制的太死,是很容易发生死锁的。

innodb只要是针对主键或者索引的,都会进行行锁,否则,则为表锁。另外,楼主有没有做删除操作?删除的时候要是查不到条件相符的要求,会进行表锁。最郁闷的是,当你一边在做无效删除,一边在有效插入的时候,就会导致死锁。所以删除先最好先查询下,如果有这个记录,再进行删除,否则不做删除。
7 楼 yuwenbao 2010-08-30  
基本上mysql 行锁是不可用的,具体您可以分析下mysql的优化器规则。当他发现要全表扫描时,你的行锁也就被废掉了。
6 楼 jiangduxi 2010-08-30  
yuwenbao 写道
呵呵,是不是事务的timeout?楼主的存储引擎是innodb吧,建议楼主去掉所有表的外键,mysql是会锁键的。而且由于mysql的innodb没有行级锁,所以当数据量大时,如果对键的约束限制的太死,是很容易发生死锁的。


如果是死锁,应该会报deallock异常吧,但是没有出现死锁的异常,只是在mysql的进程中出现很多lock。的确存储引擎是使用innodb。

MySQL5.1不是支持对MyISAM和MEMORY表进行表级锁定,对InnoDB表进行行级锁定。
5 楼 yuwenbao 2010-08-29  
呵呵,是不是事务的timeout?楼主的存储引擎是innodb吧,建议楼主去掉所有表的外键,mysql是会锁键的。而且由于mysql的innodb没有行级锁,所以当数据量大时,如果对键的约束限制的太死,是很容易发生死锁的。
4 楼 linkerlin 2010-08-29  
明显是事务没有提交嘛
3 楼 jiangduxi 2010-08-23  
sw1982 写道
有事务么?碰到过这种情况,非常诡异!去掉事务后成功

lz 能不能将你碰到的情况,描述下。并且是在多大的数据量的时候出现那诡异的情况! 谢谢
2 楼 sw1982 2010-08-22  
有事务么?碰到过这种情况,非常诡异!去掉事务后成功
1 楼 chjr 2010-08-22  
mysql使用时,建议(1)尽量避免建立除主键索引外的唯一索引,否则会加重锁的竞争,很容易出现死锁。唯一性在应用程序里保证
(2)同时对多个表操作的场景里,一定要保证操作的顺序一致

相关推荐

    MySQL 数据库监控攻略

    通过以上对MySQL数据库监控关键指标及常用工具的介绍,可以发现,有效的监控策略不仅能够帮助我们及时发现和解决问题,还能够为优化数据库性能提供依据。对于任何依赖MySQL数据库的应用来说,建立一个全面而细致的...

    MySQL锁类型以及子查询锁表问题、解锁1

    MySQL中的锁机制是数据库并发控制的关键部分,它确保了在多用户环境中数据的一致性和完整性。在MySQL中,主要存在两种类型的锁:行级锁(Row-Level Locks)和表级锁(Table-Level Locks)。InnoDB存储引擎默认支持...

    MySQL数据库对并发事件的控制和处理.pdf

    用户权限管理允许管理员精确控制每个用户的操作权限,限制可能引发并发问题的操作。加密连接确保了数据在传输过程中的安全性,防止被截获。审计日志记录数据库的所有操作,有助于追踪和分析潜在的安全威胁。 综上所...

    mysql数据库锁的产生原因及解决办法

    MySQL数据库锁是数据库管理系统为了保证数据的一致性和完整性而在并发操作中采取的一种机制。当多个用户同时访问数据库并试图修改同一数据时,如果没有适当的控制,可能会导致数据的不一致。数据库锁就是用来解决这...

    MySql数据库设计技巧

    MySQL数据库设计技巧是数据库管理员和开发人员在构建高效、可靠且可扩展的数据库系统时必须掌握的核心技能。本文将深入探讨几个关键知识点,帮助你优化MySQL数据库的设计。 1. 正确选择数据类型:理解每种数据类型...

    MySQL数据库开发期末复习试题.pdf

    锁机制用于并发控制,防止多个客户端同时访问数据引发的问题。事务是数据库操作的基本单位,保证了数据的一致性,InnoDB存储引擎是MySQL中唯一支持外键约束的引擎。 创建临时表的命令是CREATE TEMPORARY TABLE,它...

    数据库中锁机制的学习

    本文将深入探讨数据库锁的基本概念、类型以及它们在实际应用中的作用。 首先,我们要理解锁的两种基本类型:共享锁(Shared Locks)和排他锁(Exclusive Locks)。共享锁允许一个事务读取一行数据,但不允许其他...

    2021030516_基于java和mysql数据库的线上选课系统.rar

    同时,通过合理的并发控制策略,如乐观锁或悲观锁,避免多用户同时操作同一数据时引发的冲突。 此外,为了保证系统的可扩展性和可维护性,代码应遵循良好的编程规范,模块化设计,以便于后期的功能扩展和bug修复。...

    MySQL中的悲观锁与乐观锁

    在MySQL数据库中,悲观锁(Pessimistic Lock)和乐观锁(Optimistic Lock)是两种常见的并发控制机制,它们用于解决多用户环境下同一资源的并发访问问题。这两种锁各有特点,适用于不同的业务场景。 首先,悲观锁...

    MySQL数据库面试题.docx

    MySQL数据库在IT行业中扮演着至关重要的角色,尤其对于程序员和数据库管理员来说,深入理解其核心概念和优化策略是必备技能。以下是对MySQL数据库面试题的详细解析: 1. **InnoDB的四种事务隔离级别**:读未提交...

    行业-59 对MySQL锁机制再深入一步,共享锁和独占锁到底是什么?l.rar

    MySQL数据库在多用户环境下为了保证数据的一致性和完整性,引入了锁机制。锁是数据库管理系统中用于控制并发操作的一种机制,它确保了多个事务在读写数据时不会产生冲突。本篇文章将深入探讨MySQL中的两种主要锁类型...

    MySQL数据库事务隔离级别详解

    MySQL数据库的事务隔离级别是数据库管理系统中用于控制事务处理中并发操作的重要机制。在多用户同时访问数据库的情况下,事务隔离级别能够确保数据的一致性和完整性,避免并发操作带来的各种问题,如脏读、不可重复...

    数据库加锁与性能分析

    本文主要探讨了在单处理机和多处理机系统中数据库的并发执行方式,以及如何通过事务管理和锁机制来避免并发操作引发的数据不一致性问题。 事务是并发控制的基本单位,其ACID属性(原子性、一致性、隔离性、持久性)...

    MySQL数据库开发的三十六条军规.rar

    MySQL数据库开发的三十六条军规是对数据库设计与管理的最佳实践的总结,旨在提高开发效率,优化SQL查询性能,确保数据安全性和一致性。以下是对这些军规的详细解释: 1. **选择合适的数据库引擎**:根据业务需求,...

    记一次MySQL数据库问题排查

    在本文中,我们将探讨在MySQL数据库中遇到的问题及其解决方案,主要关注两个关键点:过多的数据库连接和事务引发的锁等待超时。 首先,我们来看第一个问题,“占着茅坑不拉屎”,即过多的数据库连接。当系统频繁...

    mysql 数据库死锁原因及解决办法

    MySQL数据库死锁是数据库管理系统中常见的一种问题,它发生在两个或更多个事务之间,当它们互相等待对方释放资源,导致所有事务都无法继续执行。死锁的发生通常与资源的竞争和事务的执行顺序有关。 死锁产生的主要...

    查看数据库死锁信息

    要解决这个问题,第一步是查看MySQL数据库的死锁日志。可以通过以下步骤进行操作: 1. 使用MySQL客户端工具或者命令行界面登录到MySQL服务器。在命令行中输入如下命令: ``` mysql -h <数据库IP地址> -P <端口号>...

    数据库删除数据太慢

    本文将围绕“数据库删除数据太慢”的问题展开讨论,并提出一系列提高删除速度的思路与方法。 #### 一、理解删除操作的本质 1. **逻辑删除与物理删除**: - **逻辑删除**:通过设置某个字段(如`deleted`或`is_...

    [数据库] Navicat for MySQL换种思维解决插入同时更新数据1

    在MySQL数据库管理中,Navicat是一个常用的图形化界面工具,它允许用户方便地执行SQL查询、管理数据库对象以及进行数据导入导出等操作。在日常的数据操作中,我们可能会遇到这样的需求:在插入新记录的同时,也需要...

    mysql中的事务、锁讲解和操作

    通过学习事务的提交、回滚、日志管理以及锁的使用和优化,可以有效地预防和解决并发访问引发的问题,提升数据库的运行效率。无论是初学者还是经验丰富的开发者,都需要深入研究这些概念,以便在实际项目中更好地应用...

Global site tag (gtag.js) - Google Analytics