`
berdy
  • 浏览: 512358 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

mysql 学习

阅读更多
表级锁
开销小,加锁快,不会出现死锁。锁冲突概率高,并发度低

行级锁
开销大,加锁慢;会出现死锁,锁冲突概率低,并发度高。

页级锁
开销和加锁时间介于上面两种之间。会出现死锁。

myisam 只支持表级锁。

show status like 'table%';
mysql> show status like 'table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Table_locks_immediate | 43    |
| Table_locks_waited    | 0     |
+-----------------------+-------+
2 rows in set (0.00 sec)
Table_locks_waited   表级锁的争用情况

表锁的两种情况:表共享读锁,表独占写锁。
读锁不会阻塞对同一表的读请求。但是会阻塞对同一表的写请求。
写锁会阻塞对同一表的读和写的请求。
lock table boss_info write|read;获得boss_info表的写|读锁
lock table boss_info read local 支持锁定表后,其他用的并发写入。
unlock tables; 解锁

从上面可看出,myisam读写串行的。一定条件下myisam支持查询和写入的并行。
系统变量concurrent_insert
0 不允许并行插入
1 表中间没有被删除的空洞时,允许并行插入
2 不论表中有有无空洞,都允许并行插入

可以将concurrent_insert设置为2,并定时进行optimize table整理空间碎片。

myisam读写串行。在同时有读写锁定请求时,先获取到写锁。所以myisam不适合做大量更新操作和查询操作应用的
原因。大量的更新操作会造成查询操作的阻塞。不过可以通过设置来条件myisam锁调度。
set low_priority_updates = 1 降低更新请求的优先级。
set low_priority_inserts = 1
set low_priority_deletes = 1
set low_priority_selects = 1

innodb的锁问题

更新丢失: 最后的事务更新的覆盖了其他事务的更新。
脏读:一个事务更新数据,还未提交;其他事务读取同一条记录。update select
不可重复读: 一个事务在读取某些数据后的某个时间,再次读取以前读过的数据,发现数据发生了更新。select delete select
幻读:一个事务根据条件读取某些数据后,重新按照条件读取以前检索过的数据,其他事务插入了满足查询条件的
新数据。select insert select

如何解决并发事务带来的问题:
1、读取数据前,对其加锁,阻止其他事务对数据进行修改
2、不加锁,生成一个数据请求时间点的一致性数据快照,并用这个快照提供一定级别的一致性读取。
就像提供了同一个数据的多个版本。因此也叫多版本并发控制MVCC或MCC

事务的隔离级别:
未提交读: 可能脏读|不可重复读|幻读
已提交读: 不会脏读|不可重复读|幻读
可重复读: 不会脏读|可重复读|幻读
可序列化: 不会脏读|可重复读|不会产生幻读

show status like 'innodb_row_lock%';
mysql> show status like 'innodb_row_lock%';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| Innodb_row_lock_current_waits | 0     |
| Innodb_row_lock_time          | 0     |
| Innodb_row_lock_time_avg      | 0     |
| Innodb_row_lock_time_max      | 0     |
| Innodb_row_lock_waits         | 0     |
+-------------------------------+-------+
5 rows in set (0.00 sec)
如果Innodb_row_lock_waits和Innodb_row_lock_time_avg比较高,则锁争用情况比较严重;

可以设置InnoDB Monitors进一步观察发生锁冲突的表、数据行等,并分析争用原因
create table innodb_monitor (a int) engine=innodb;
show innodb status
drop table innodb_monitor;

打开监视器后,平均15秒会向日志中记录监控的内容,如果长时间打开监控,会导致.err文件
变得非常巨大。

innodb 行锁
共享锁:允许一个事务读取一行,阻止其他事务获得相同数据集的排他锁。
排他锁:允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。

innodb 表锁:
意向共享锁:事务在给数据行加行共享锁前必须获得表的意向共享锁
意向排他锁:事务在给数据行加行排他锁前,必须获得表的意向排他锁。

获得共享锁:
select * from table where ... in share mode;
获得排他锁:
select * from table where ... for update;

innodb行锁是通过给索引上的索引项加锁来实现的。oracle是通过对数据块中的数据行加锁来实现的。
所以,只有通过索引条件检索数据时,innodb才会使用行级锁。否则将会使用表锁。

1、使用相同索引,虽然是对不同记录行操作,也会出现锁冲突。
2、表中有多个索引时,不同事务可以使用不同的索引锁定不同的行。
3、索引字段的类型与参数的类型是否一致,是否会进行类型转换。

分享到:
评论

相关推荐

    mysql学习资料大全

    这份"mysql学习资料大全"包含了一系列的资源,对于想要学习或深入理解MySQL的人来说,是一份非常宝贵的资料集。 首先,从标题我们可以推断,这份资料可能涵盖了MySQL的基础到进阶内容,包括安装配置、SQL语言基础、...

    MySQL学习资料PDF

    这份压缩包包含的三本书籍是MySQL学习的重要资源,涵盖了从基础到高级的全方位知识。 《MySQL必知必会》这本书是MySQL入门的经典之作,适合对数据库没有基础知识的读者。它详细介绍了MySQL的基本操作,包括如何创建...

    mysql学习用数据库dbt3

    在这个“mysql学习用数据库dbt3”压缩包中,包含了一个名为“dbt3_s1.sql”的文件,这通常是用来初始化或恢复数据库的SQL脚本。 在学习MySQL的过程中,理解数据库的设计和管理至关重要。DBT3提供了一种实践环境,让...

    Mysql学习资料大全

    本“Mysql学习资料大全”包含了一系列关于MySQL的教程和参考资料,旨在帮助初学者和经验丰富的开发者深入理解和熟练掌握MySQL的各项功能。 首先,从简介及连接部分开始,这部分内容会涵盖MySQL的基本概念,如数据库...

    数据库mysql学习脑图

    本资源“数据库mysql学习脑图”旨在为MySQL初学者提供一个清晰的学习路径,帮助理解其核心概念和功能。 首先,脑图将可能涵盖数据库基础,包括数据库的概念、数据模型(如层次模型、网状模型、关系模型)以及SQL...

    mySQL学习资料.rar

    这个“mySQL学习资料.rar”压缩包很可能包含了一系列关于MySQL的学习材料,如教程、手册、示例脚本和使用指南,旨在帮助初学者和进阶者深入理解和掌握MySQL。 首先,让我们来探讨一下MySQL的基础知识。MySQL的核心...

    mysql学习资料(9本)

    这份“mysql学习资料(9本)”的压缩包包含了丰富的学习资源,适合不同层次的学习者,从初学者到经验丰富的开发者都能从中受益。 1. **MYSQL 5.5从零开始学.pdf**:这本书可能是一本入门教程,从MySQL 5.5版本的基础...

    mysql学习手册中文版

    MySQL学习手册中文版是一本全面介绍MySQL数据库管理系统的基础知识的指南,适合初学者及有一定经验的用户进行深入学习。MySQL是一种广泛使用的开源关系型数据库,它以其高效、稳定和易于管理的特点,在各种规模的...

    Linux下mysql学习笔记

    【Linux下MySQL学习笔记】 MySQL是一款广泛应用于互联网的开源关系型数据库管理系统,尤其在Linux操作系统上,其稳定性和性能表现尤为突出。本笔记主要针对在Linux环境下安装、配置、管理和优化MySQL的过程进行详解...

    MySQL学习源码(MySQL入门教程).zip

    MySQL学习源码(MySQL入门教程).zipMySQL学习源码(MySQL入门教程).zipMySQL学习源码(MySQL入门教程).zipMySQL学习源码(MySQL入门教程).zipMySQL学习源码(MySQL入门教程).zipMySQL学习源码(MySQL入门教程).zipMySQL...

    MySQL学习资料.zip,包括MySQL基础、进阶、运维

    MySQL学习资料.zip,包括MySQL基础、进阶、运维

    MySql学习资料

    这份“MySQL学习资料”包含了丰富的信息,旨在帮助初学者和有经验的用户更好地理解和操作MySQL。 首先,`MySQL_5.1中文文档`是MySQL 5.1版本的官方中文手册,它是了解和学习MySQL功能、语法、最佳实践的重要资源。...

    机房精空调分类2023+MySQL学习练习数据库+MySQL学习毕业设计

    机房精空调分类2023+MySQL学习练习数据库+MySQL学习毕业设计机房精空调分类2023+MySQL学习练习数据库+MySQL学习毕业设计机房精空调分类2023+MySQL学习练习数据库+MySQL学习毕业设计机房精空调分类2023+MySQL学习练习...

    Mysql学习文档

    ### MySQL学习文档知识点详解 #### 一、MySQL简介与特性 **标题与描述解析:** - **标题**:“Mysql学习文档”表明该文档旨在帮助读者掌握MySQL的相关知识和技术。 - **描述**:“文档讲述的从入门到精通的课程...

    MySQL.rar_MYSQL_mysql学习_学习mysql

    1. 数据库概念:了解数据库的基本概念,如数据库、表、字段、记录和索引等,是MySQL学习的基础。数据库是用来存储和管理数据的系统,而表则是数据的结构化存储方式。 2. SQL语言:SQL(Structured Query Language)...

    MySQL学习文档

    以上就是根据给定文件信息总结出来的MySQL学习文档中的核心知识点。希望这些内容能帮助初学者更好地理解和掌握MySQL的基础操作。随着对MySQL的深入学习,还可以探索更多高级功能,例如事务处理、存储过程、触发器等...

    MYSQL 学习指南

    这份"MYSQL 学习指南"旨在帮助初学者和有一定经验的开发者深入理解MySQL的各个方面,提升数据库管理技能。 首先,从基础开始,MySQL的核心概念包括数据库、表、字段和记录。数据库是存储数据的容器,而表则是组织...

    mysql学习资料 45讲 深度学习

    这个“mysql学习资料 45讲 深度学习”压缩包包含了多个PDF文件,涵盖了MySQL的关键知识点,包括性能优化、高可用性、主备一致性和安全性等方面。下面我们将深入探讨其中几个关键的主题。 1. **"order by"是怎么工作...

    mysql学习资料mysql学习资料

    这个“mysql学习资料”压缩包可能包含教程、示例脚本、练习题和解决方案等,帮助初学者逐步掌握MySQL和SQL技能。通过系统学习和实战练习,你将能够有效地管理和利用数据库资源,为你的职业生涯奠定坚实基础。

Global site tag (gtag.js) - Google Analytics