- 浏览: 1544134 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (532)
- 软件设计师 (7)
- PSP (5)
- NET MD (9)
- Hibernate (8)
- DIY (51)
- Work (43)
- GAME (24)
- 未分类 (44)
- iPod (6)
- MySQL (39)
- JSP (7)
- 日语能力考试 (36)
- 小说 (4)
- 豆包网 (23)
- 家用电脑 (7)
- DB2 (36)
- C/C++ (18)
- baby (9)
- Linux (13)
- thinkpad (23)
- OA (1)
- UML (6)
- oracle (24)
- 系统集成 (27)
- 脑梗塞 (6)
- 车 (8)
- MainFrame (8)
- Windows 7 (13)
- 手机 (8)
- git (12)
- AHK (2)
- COBOL (2)
- Java (9)
最新评论
-
安静听歌:
... ...
UUID做主键,好还是不好?这是个问题。 -
lehehe:
http://www.haoservice.com/docs/ ...
天气预报 -
lehehe:
[url http://www.haoservice.com/ ...
天气预报 -
liubang201010:
监控TUXEDO 的软件推荐用这个,专业,权威.并能提供报警和 ...
(转载)Tuxedo中间件简介 -
tinkame:
Next[j] =-1 当j=0时;=Max{k|0<k ...
KMP字符串模式匹配详解
深入浅出MySQL——数据库开发、优化与管理维护
20.3.9 关于死锁 上文讲过,MyISAM表锁是deadlock free的,这是因为MyISAM总是一次获得所需的全部锁,要么全部满足,要么等待,因此不会出现死锁。但在InnoDB中,除单个SQL组成的事务外,锁是逐步获得的,这就决定了在InnoDB中发生死锁是可能的。如表20-17所示的就是一个发生死锁的例子。 表20-17 InnoDB存储引擎中的死锁例子 session_1 session_2 mysql> set autocommit = 0; Query OK, 0 rows affected (0.00 sec) mysql> select * from table_1 where where id=1 for update; ... 做一些其他处理... mysql> set autocommit = 0; Query OK, 0 rows affected (0.00 sec) mysql> select * from table_2 where id=1 for update; ... select * from table_2 where id =1 for update; 因session_2已取得排他锁,等待 做一些其他处理... mysql> select * from table_1 where where id=1 for update; 死锁 在上面的例子中,两个事务都需要获得对方持有的排他锁才能继续完成事务,这种循环锁等待就是典型的死锁。 发生死锁后,InnoDB一般都能自动检测到,并使一个事务释放锁并回退,另一个事务获得锁,继续完成事务。但在涉及外部锁,或涉及表锁的情况下,InnoDB并不能完全自动检测到死锁,这需要通过设置锁等待超时参数innodb_lock_wait_timeout来解决。需要说明的是,这个参数并不是只用来解决死锁问题,在并发访问比较高的情况下,如果大量事务因无法立即获得所需的锁而挂起,会占用大量计算机资源,造成严重性能问题,甚至拖跨数据库。我们通过设置合适的锁等待超时阈值,可以避免这种情况发生。 通常来说,死锁都是应用设计的问题,通过调整业务流程、数据库对象设计、事务大小,以及访问数据库的SQL语句,绝大部分死锁都可以避免。下面就通过实例来介绍几种避免死锁的常用方法。 (1)在应用中,如果不同的程序会并发存取多个表,应尽量约定以相同的顺序来访问表,这样可以大大降低产生死锁的机会。在下面的例子中,由于两个session访问两个表的顺序不同,发生死锁的机会就非常高!但如果以相同的顺序来访问,死锁就可以避免。 表20-18 InnoDB存储引擎中表顺序造成的死锁例子 session_1 session_2 mysql> set autocommit=0; Query OK, 0 rows affected (0.00 sec) mysql> set autocommit=0; Query OK, 0 rows affected (0.00 sec) mysql> select first_name,last_name from actor where actor_id = 1 for update; +------------+-----------+ | first_name | last_name | +------------+-----------+ | PENELOPE | GUINESS | +------------+-----------+ 1 row in set (0.00 sec) mysql> insert into country (country_id,country) values(110,'Test'); Query OK, 1 row affected (0.00 sec) mysql> insert into country (country_id,country) values(110,'Test'); 等待 mysql> select first_name,last_name from actor where actor_id = 1 for update; +------------+-----------+ | first_name | last_name | +------------+-----------+ | PENELOPE | GUINESS | +------------+-----------+ 1 row in set (0.00 sec) mysql> insert into country (country_id,country) values(110,'Test'); ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction (2)在程序以批量方式处理数据的时候,如果事先对数据排序,保证每个线程按固定的顺序来处理记录,也可以大大降低出现死锁的可能。 表20-19 InnoDB存储引擎中表数据操作顺序不一致造成的死锁例子 session_1 session_2 mysql> set autocommit=0; Query OK, 0 rows affected (0.00 sec) mysql> set autocommit=0; Query OK, 0 rows affected (0.00 sec) mysql> select first_name,last_name from actor where actor_id = 1 for update; +------------+-----------+ | first_name | last_name | +------------+-----------+ | PENELOPE | GUINESS | +------------+-----------+ 1 row in set (0.00 sec) mysql> select first_name,last_name from actor where actor_id = 3 for update; +------------+-----------+ | first_name | last_name | +------------+-----------+ | ED | CHASE | +------------+-----------+ 1 row in set (0.00 sec) mysql> select first_name,last_name from actor where actor_id = 3 for update; 等待 mysql> select first_name,last_name from actor where actor_id = 1 for update; ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction mysql> select first_name,last_name from actor where actor_id = 3 for update; +------------+-----------+ | first_name | last_name | +------------+-----------+ | ED | CHASE | +------------+-----------+ 1 row in set (4.71 sec) 20.3.9 关于死锁
发表评论
-
MySQL配置文件my.cnf 例子最详细翻译
2009-07-20 11:58 1750http://www.blogjava.net/hunte ... -
MySQL :: @@Rowcount in MySQL
2009-03-02 15:39 2237@@Rowcount in MySQL? Posted ... -
MYSQL中删除重复记录的方法
2009-02-26 12:23 0MYSQL中删除重复记录的方法 2008 ... -
使用 MYSQLBINLOG 来恢复数据。
2009-02-26 12:21 0使用 MYSQLBINLOG 来恢复数据。 20 ... -
13.2.3. InnoDB Startup Options and System Variable
2009-02-20 13:37 1267http://dev.my ... -
mysql innodb 配置详解
2009-02-20 11:01 3586加为好友发送私信在线聊天 -
mysql的临时表不支持自连接
2009-02-18 13:32 2361TEMPORARY TABLE ProblemsThe fol ... -
windows 下安装两个MySQL收藏
2009-02-03 16:28 2394由于两个MySQL进程需要不同的配置文件,以下所有操作均是在W ... -
1.4.1. What's New in MySQL 5.1
2009-02-03 16:25 11831.4.1. What's New in My ... -
查看mysql版本的四种方法
2009-02-02 10:57 9711:在终端下:mysql -V。 以下 ... -
Server SQL Modes
2009-02-01 11:06 14355.1.7. Server SQL Modes ... -
MySQL中的各种JOIN(CROSS JOIN, INNER JOIN, LEFT [OUTER]
2009-01-13 14:50 6223MySQL中的各种JOIN(CROSS JOIN, I ... -
[转]SQL Server 2000执行计划成本(5/5)
2009-01-09 15:26 1201[转]SQL Server 2000执行计划成本(5/5) ... -
SQL Server 2000执行计划成本(4/5)
2009-01-09 15:25 1104[转]SQL Server 2000执行计划成本(4/5) ... -
[转]SQL Server 2000执行计划成本(3/5)
2009-01-09 15:23 1538[转]SQL Server 2000执行计划成本(3/5) ... -
SQL Server 2000执行计划成本(1/5)
2009-01-09 14:52 1647[转]SQL Server 2000执行计划成本(1/5) ... -
浅谈MySQL数据库优化
2009-01-09 14:46 1346浅谈MySQL数据库优化 [收藏此页] [打印] ... -
sql server支持create table as ...建表么
2009-01-09 11:52 9041sql server支持create table as .. ... -
SQL Server如何识别自动创建的索引
2009-01-08 15:57 1317SQL Server如何识别自动创建的索引 http://w ... -
请问在一个查询里表连接的顺序对查询的性能是否有影响
2009-01-08 12:02 1235请问在一个查询里表连接的顺序对查询的性能是否有影响? 楼主w ...
相关推荐
MySQL数据库在处理并发事务时,可能会遇到一种特殊的情况,即死锁。死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力干涉它们将无法继续执行。死锁是数据库系统中常见的问题,...
标题中的"otp_win64_20.3-Erlang.zip"表明这是一个包含Erlang编程语言特定版本的Windows 64位版本的压缩...此外,Erlang OTP还包括了各种实用工具,如编译器、调试器和性能监视工具,以支持开发和维护Erlang应用程序。
《KKDiveIntoMysqlBook》是一本深入浅出探讨MySQL数据库开发、优化与管理维护的书籍,由知名作者唐汉明编著。该书的第2版提供了更全面、更新的知识点,旨在帮助读者更好地理解和应用MySQL。开源的性质使得这本书的...
了解和处理死锁是数据库管理员和开发人员必备的技能。下面我们将深入探讨MySQL中的InnoDB存储引擎如何处理死锁,以及如何通过实际例子来理解这个问题。 首先,InnoDB存储引擎是MySQL中默认的事务型存储引擎,它支持...
在实际中,解决MySQL(InnoDB)的死锁问题需要深入了解死锁产生的原因、锁的类型以及加锁策略,进而对业务逻辑进行优化或调整数据库配置和代码逻辑以减少死锁的可能性。 ### 个人简介 何登成作为阿里巴巴DBA团队的...
### MySQL数据库性能优化 #### 一、概览 在当今高度依赖互联网技术的世界里,数据库作为数据存储的核心组件,其性能直接影响着应用系统的响应速度和用户体验。MySQL作为一款广泛使用的开源关系型数据库管理系统,...
《MySQL数据库原理及应用》是一门深入探讨关系型数据库管理系统MySQL的课程,旨在教授学生如何设计、创建和管理数据库,以及如何在实际应用场景中高效利用MySQL。教案详细涵盖了该课程的所有章节,为教学提供了全面...
MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,广泛应用于各种规模的企业、网站和应用程序中。DBT3(Decision Bench for TPC-T Benchmark)是针对数据库性能评估的一个基准测试套件,它模拟了复杂的决策...
MySQL数据库是一种广泛使用的开源关系型数据库管理系统,其原理和设计方法是数据库管理员和开发者必须掌握的基础知识。本文将深入探讨MySQL的逻辑架构、并发控制、事务处理等方面。 首先,MySQL的逻辑架构分为三层...
总之,理解和使用sql数据库死锁查询工具是数据库管理员日常维护工作的重要部分。通过有效的监控、诊断和解决方法,可以显著提高数据库的稳定性和性能。对于企业来说,确保数据库健康运行是保障业务连续性和数据安全...
全国计算机三级——数据库技术是针对计算机专业知识的一项重要考核,涵盖了数据管理、数据库设计、SQL语言、数据库系统原理、数据库安全等多个关键领域。本考试要点总结旨在帮助考生高效备考,掌握核心知识点,确保...
在数据库管理中,死锁是一个常见的问题,尤其是在高并发的环境中。死锁指的是两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力干涉它们将无法继续执行。本篇文章将详细讲解如何查看和...
MySQL死锁问题是数据库管理员和开发者在工作中经常遇到的一种并发问题,尤其在面试中也常作为考核候选人的一个知识点。本文将以一个具体的死锁案例为背景,深入分析MySQL中的死锁机制,探讨死锁的成因,并提出预防...
《循序渐进Oracle——数据库管理、优化与备份恢复》这一资源聚焦于Oracle数据库的核心管理技术,涵盖了数据库的日常管理、性能优化以及备份与恢复的关键知识点。以下是对这些主题的详细解析,旨在帮助读者深入理解...
### MySQL开发实战:电子商务订单系统数据库开发的知识点详解 #### 一、MySQL基本特性与重要性 MySQL作为全球最流行的开源关系型数据库管理系统之一,在各类应用程序中占据着举足轻重的地位,无论是在小型个人项目...
MySQL数据库是一种广泛使用的开源关系型数据库管理系统,以其高效、可靠和易于学习的特性深受开发者喜爱。本教程将全面介绍MySQL的基础知识,并通过实例帮助你掌握其核心操作。 首先,我们来了解一下MySQL的基本...
7. **数据库维护与优化**:定期的维护任务如更新统计信息、重建索引、清理无用数据,以及数据库参数调优,都对性能有显著影响。 最后,"Oracle高性能sql优化"可能提供了Oracle数据库特有的优化技术,例如: 1. **...