(1)阻塞是由于资源不足引起的排队等待现象 。
(2)死锁是由于两个对象在拥有一份资源的情况下申请另一份资源 , 而另一份资源恰好又是这两对象正持有的 , 导致两对象无法完成操作 , 且所持资源无法释放 。
2.6 如何选择正确的存储引擎
参考条件:
- 事务
- 备份(Innobd免费在线备份)
- 崩溃恢复
- 存储引擎的特有特性
注意:尽量别使用混合存储引擎 , 比如回滚会出问题在线热备问题 。
2.7 配置参数
2.7.1 内存配置相关参数
确定可以使用的内存上限 。内存的使用上限不能超过物理内存 , 否则容易造成内存溢出;(对于32位操作系统 , MySQL只能试用3G以下的内存 。)
确定MySQL的每个连接单独使用的内存 。sort_buffer_size #定义了每个线程排序缓存区的大小 , MySQL在有查询、需要做排序操作时才会为每个缓冲区分配内存(直接分配该参数的全部内存);join_buffer_size #定义了每个线程所使用的连接缓冲区的大小 , 如果一个查询关联了多张表 , MySQL会为每张表分配一个连接缓冲 , 导致一个查询产生了多个连接缓冲;read_buffer_size #定义了当对一张MyISAM进行全表扫描时所分配读缓冲池大小 , MySQL有查询需要时会为其分配内存 , 其必须是4k的倍数;read_rnd_buffer_size #索引缓冲区大小 , MySQL有查询需要时会为其分配内存 , 只会分配需要的大小 。注意:以上四个参数是为一个线程分配的 , 如果有100个连接 , 那么需要×100 。
MySQL数据库实例:如何为缓存池分配内存:
①MySQL是单进程多线程(而oracle是多进程) , 也就是说MySQL实例在系统上表现就是一个服务进程 , 即进程;
②MySQL实例是线程和内存组成 , 实例才是真正用于操作数据库文件的;
一般情况下一个实例操作一个或多个数据库;集群情况下多个实例操作一个或多个数据库 。
Innodb_buffer_pool_size , 定义了Innodb所使用缓存池的大小 , 对其性能十分重要 , 必须足够大 , 但是过大时 , 使得Innodb 关闭时候需要更多时间把脏页从缓冲池中刷新到磁盘中;
总内存-(每个线程所需要的内存*连接数)-系统保留内存key_buffer_size , 定义了MyISAM所使用的缓存池的大小 , 由于数据是依赖存储操作系统缓存的 , 所以要为操作系统预留更大的内存空间;
select sum(index_length) from information_schema.talbes where engine='myisam'注意:即使开发使用的表全部是Innodb表 , 也要为MyISAM预留内存 , 因为MySQL系统使用的表仍然是MyISAM表 。
max_connections 控制允许的最大连接数 , 一般2000更大 。
不要使用外键约束保证数据的完整性 。
2.8 性能优化顺序
从上到下:

文章插图
文章来源于:segmentFault
作者:唐成勇
推荐阅读
- 详解基于linux环境MySQL搭建与卸载
- Mysql中的DDL, DML, DCL, 和TCL介绍
- HTML、CSS、JavaScript、PHP、 MySQL 的学习顺序是什么?
- 解决Mysql错误Too many connections的方法
- 45岁的李玟依旧性感 李玟个人资料
- 女性喝玫瑰花茶可美容养颜缓解经期不良情绪
- 红糖枸杞老姜茶补血又活络
- 异性朋友有了对象还能联系吗,关系很好的异性朋友有对象了怎么办
- 女性喝红茶有什么好处女性喝红茶好不好
- |160-190cm男性,标准体重表发布,看看您需要减肥吗?
