mysql 大量并发和超高CPU的使用率
风险:大量的并发 数据库连接被占满(max_connections默认100)
超高CPU使用率:因CPU资源耗尽而出现宕机。
如何处理数据库中的大表
1 分库分表把一张大表分成多个小表
难点:分表主键的选择 分表后跨分区数据的查寻和统计
2 大表的历史数据归档
难点: 归档时间点的选择 如何进行归档操作
什么是事务
1 事务是数据库系统区别于其它一切文件系统的重要特性之一
2 事务是一组具有原子性的sql语句,或是一个独立的工作单元
事务的原子性-定义:一个事务必须被视为一个不可分割的最小工作单位,整个事务中的所有操作要么全部提交成功,要么全部失败,对于一个事务来说,不可能只执行其中的一部分操作。
事务的一致性-定义:一致性是指事务将数据库从一种一致性状态转换到另外一种一致性状态,在事务开始之前和事务结束后数据库的数据完整性没有被破坏。
事务的隔离性-定义:隔离性要求一个事务对数据库中数据的修改,在未提交完成前对于其它事务时不可见的。
sql中定义的四种隔离级别:
1 未提交读(READ UNCOMMITED) 并发: 高 隔离 :低
2 已提交读(READ COMMITED)
3 可重复读(REPEATABLE READ)
4 可串行化(SERIALIZABLE)并发: 低 隔离 :高
注意:innoDB 的默认隔离级别是 可重复读
查看事务隔离级别:show variables like '%iso%';
开启事务:begin;
设置隔离级别为已提交读:set sesstion tx_isolation='read-committed';
可重复读和已提交读之间的差别:开启事务 insert 插入,可重复读 select 查询不到事务开启后 insert后的数据,已提交读事务隔离级别可以 查询到 事务开启后 insert 的数据。
事务的持久性-定义:一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,已经提交的修改数据也不会丢失
什么是大事务
定义:运行时间比较长,操作的数据比较多的事务。
风险:锁定太多数据,造成大量的阻塞和锁超时。回滚时所需时间比较长。执行时间长,容易造成主从延迟。
如何处理大事务
1 避免一次处理太多的数据
2 移除不必要在事务中的select操作。
2019-9-20 23:00
影响mysql性能的几个方面
1 服务器硬件 2 服务器使用的操作系统 3 MySQL数据库存储引擎 4 数据库参数配置 5 数据库结构设计和sql语句的优化
cpu资源和可用内存大小 网络/IO
老版本mysql对多核cpu支持很不好,新版本 5.6 / 5.7 对cup多核的支持有很大的改善。
内存的大小直接影响数据库的性能,myisam 会把索引保存在内存,数据会放在os里进行缓存。innodb 会把索引和数据都保存在内存中。可以把mysql写多次写操作 先 写入内存,然后达到一定数量再写入磁盘 ,提高mysql性能。
根据数据库大小选择内存条。