大牛出招|分分钟解决MySQL查询速度慢与性能差
2.4.1 特征一:事宜性存储引擎及两个非凡日记范例:Redo Log 和 Undo Log
Redo Log:实现事宜的耐久性(已提交的事宜)。 Undo Log:未提交的事宜,独立于表空间,必要随机遇见,可以存储在高机能io装备上。 Undo日记记录某数据被修改前的值,可以用来在事宜失败时举办rollback;Redo日记记录某数据块被修改后的值,可以用来规复未写入data file的已乐成事宜更新的数据。 2.4.2 特征二:支持行级锁
2.5 什么是锁 2.5.1 锁 2.5.2 锁范例 2.5.3 锁的粒度 MySQL的事宜支持不是绑定在MySQL处事器自己,而是与存储引擎相干 将table_name加表级锁呼吁:lock table table_name write; 写锁会阻塞其余用户对该表的‘读写’操纵,直到写锁被开释:unlock tables;
2.5.4 阻塞和死锁 (1)阻塞是因为资源不敷引起的列队守候征象。 (2)死锁是因为两个工具在拥有一份资源的环境下申请另一份资源,而另一份资源刚好又是这两工具正持有的,导致两工具无法完成操纵,且所持资源无法开释。 2.6 怎样选择正确的存储引擎 参考前提:
总结:Innodb大法好。 留意:只管别行使殽杂存储引擎,好比回滚会出题目在线热备题目。 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 机能优化次序 从上到下: (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |