mysql优化2

事物
死锁
死锁是指两个或多个事物在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。多个事物同时锁定一个资源,也会产生死锁
如果刚好两个事物都执行醒了一条update语句,更新一行数据,同时也锁定改行数据。接着两个事物都尝试执行第二条update语句,发现改行数据已经被对方锁定,然后两个事物都等待对方释放锁,同时又持有对方需要的锁,则陷入死循环。

事物日志
存储引擎在修改表的数据时,使用事物日志,使得只需要修改其内存拷贝,再把修改行为记录到持久在硬盘上的事物日志中,而不是每次都将修改的数据持久化到磁盘
事物日志采用追加的方式,因此日志的操作时磁盘上一小块区域的顺序io,而不像随机io需要在硬盘的多个地方移动磁头,事物持久以后,内存中被修改的数据在后台可以慢慢的刷回到磁盘。我们通常称为预写式日志,修改数据需要写两次磁盘。
如果数据的修改已经记录到事物日志并持久化,但数本身还没有写回磁盘,此时系统崩溃,存储引擎重启时能够自动恢复这部分修改的数据。

存储引擎

InnoDB引擎
InnoDB表是基于聚簇索引建立的,其结构和mysql其他存储引擎有很大区别。内部做了很多优化,包括从磁盘读取数据时采用的可预测性预读。

MyISAM引擎
在mysql5.1版本之前,MyISAM是默认的存储引擎。提供了大量的特性,包括全文检索,压缩,空间函数等,但mysiam不支持事务和行及锁,而且一个缺陷就是崩溃后无法安全恢复。虽然myIsqm有这样的缺陷,但并非一无是处,对于只度数据,或者表小,可以继续使用myISAM引擎

MyISAM特性
1加锁与并发,MyISAM对整张表加锁,而不是针对行。读取时会对需要读到的行的所有表加共享锁,写入则对表加排他锁。在表有读取查询的同时,也可以往表中插入新的记录(被称为并发插入)
2修复:mysql可以对myisqm表惊醒手工或者自动检查和修复操作,但这里说的修复和事物恢复以及崩溃修复是不同的概念,执行表的修复可以导致一些数据的丢失,而且修复非常慢,可以通过 check table tablename检查表的错误,如果有错误可以通过执行repair table tablename进行修复
3.索引特性:对于myisam表,即使是blob和text等长字段,也可以基于前500个字符创建索引。myisqm也支持全文索引这是一种基于分词创建的索引,可以支持复杂的查询
4.延迟更新索引建:创建myisam表的时候,如果指定了delay_key_write选项,每次修改完成时,不会立刻将修改的索引数据写入磁盘,而是会写到内存中的建缓冲区,只有清理建缓冲区或者不关闭表的时候才会将对应的索引块写入到磁盘,可以极大的提升写入性能,但是数据库或者主机崩溃时会造成索引损坏,需要执行修复操作。

Memory引擎
在Memor表中,所有的数据都是保存在内存中,不需要进行i/o 重启时会保留表结构,但数据会丢失

修改表的存储引擎
1.ALTER TABLE tableName Engine = innodb
2.倒入导出可以用mysqldump工具
3.create and select create table newTable like oldTable;
alter table newTable engine=innodb;
insert into newtable select * from oldtable;

你可能感兴趣的:(mysql优化2)