数据库事务介绍: 简单的说,事务就是指逻辑上的一组SQL操作,组成这组操作的SQL语句,执行时要么全成功,要么全失败。 事务的四大特性(ACID): 1.原子性(Atomicity) 事务是不可分割的一个单位,事务中的所有SQL操作要么都发生,要么都不发生。 2.一致性(Consistency) 事务发生前和发生后,数据的完整性必须保持一致。 3.隔离性(Isolation) 当并发访问数据库时,一个正在执行的事务在执行完毕前,对于其他的会话是不可见的,多个并发事务之间的数据是相互隔离的。使用mysqldump备份时,使用--single-transcation参数 4.持久性(Durability) 一个事务一旦被提交,它对数据库中的数据的改变是永久性的。如果出了错误,事务也不允许撤销,只能通过”补偿式事务”。 事务的开启: 数据库默认事务时自动提交的。也就是发一条sql他就执行一条。如果想多条sql放一个事务中执行,则需要使用事务进行处理。当我们开启一个事务,而且没有提交,mysql会自动回滚事务。 数据库事务开启自动提交: set autocommit =ON set autocommit =OFF ###关闭自动提交 commit 提交事务 rollback 回滚事务 mysql常见引擎: InnoDB: 支持兼容的(ACID)事务,支持事务的4个级别,支持多版本阅读; 支持参数完整性,即对外键的支持; 行级锁定(更新时一般是锁定当前行),通过索引实现,表扫描仍然会是表锁,注意间隙锁的影响; 读写阻塞与事务隔离级别相关; 具有非常高效的缓存特性,能缓存索引,也能缓存数据; 整个表和主键以Cluster方式存储,组成一颗平衡树; 所有Secondary Index 都会保存主键信息。 支持分区,表空间,类似Oracle数据库。 支持键外约束。 和MyISAM引擎相比,对硬件资源要求较高。 相比MyISAM引擎,innodb更消耗资源,速度没有MyISAM快。 InnoDB调优: 1.主键尽可能小,避免给Secondary Index带来过大的空间负担。 2.避免全表扫描,因为会使表锁。 3.尽可能缓存所有的引擎和数据,提高响应速度,减少磁盘I/O消耗。 4.在大批量小插入的时候,尽量自己控制事务而不要使用autocommit自动提交。 5.合理使用innodb_flush_log_at_trx_commit值,不要过度追求安全性。 6.避免主键更新,因为这回带来大量的数据移动。 MyISAM:是mysql5.5.5前默认的存储引擎。 不支持事务; 表级锁定,读写互相阻塞,读读不阻塞; 只会索引缓存,通过key_buff_size缓存索引,不会缓存数据; 读取速度较快,占用资源较少; 不支持外键约束,但支持全文索引。 MyISAM引擎调优: 1.设置合适的索引(缓存机制)。 2.调整读写优先级,根据实际要求确保重要操作优先执行。 3.启用延迟插入改善大批量写入性能(降低写入频率,尽可能一次写入多条数据)。 4.尽量顺序操作让insert数据都写入到尾部,减少阻塞。 5.分解大的操作,降低单个操作的阻塞时间。 6.降低并发数(减少对mysql的访问),某些高并发场景通过应用进行排队队列机制。 7.相对静态(更改不频繁)的数据库数据,充分利用Query Cache和memcached缓存服务器可以极大的提高访问效率。 8.MyISAM的count只有在全表扫描时才特别高效,带有其他条件的count时都需要进行实际数据访问。 9.可以把主从同步的主库使用Innodb,从库使用MyISAM引擎。