影响数据库性能的因素:sql查询速度,服务器硬件,网卡流量,磁盘IO。
QPS:每秒中处理的查询量。
大量的并发:可能会导致数据库连接数被占满。
超高的CPU使用率:因CPU资源耗尽而宕机。
数据性能的瓶颈往往是磁盘IO(更换性能更高的磁盘)。
网卡流量:网卡IO也有可能会被占满(减少从服务器的数量,进行分级缓存,避免使用select*,把业务网络和服务器网络进行分级)。
大表,大表是相对而言的,不同的存储引擎有不同的限制。
记录行数巨大,单表超过千万行。
表数据文件巨大,表数据文件超过10G。
大表往往就意味着慢查询,会降低sql的查询效率,很难在一定的时间内过滤出所需要的数据。
大表建立索引的时间非常长。5.5 之前的版本建立索引会锁表,之后的版本会引起主从延迟。所以要非常小心。
修改表结构需要长时间锁表。
大表的处理方式:
分库分表
难点:分表主键的选择,分表后跨分区数据的查询和统计。
历史数据归档
难点:归档时间点的选择,如何进行归档操作。
大事务
事务是数据库系统区别于其他一切文件系统的重要特性之一。事务是一组具有原子性的SQL语句,或是一个独立的工作单元。
原子性,一致性,隔离性(数据修改未提交时对其他事务是不可见的),持久性。
SQL标准中定义的四种隔离级别:
未提交读(脏读):数据在没有提交前也能被读到。
已提交读/不可重复读:大多数数据库默认的隔离级别。MySql不是用这个。
可重复读:当前事务没有提交时,其他事务对数据库的操作当前事务依然不可见。MySql用这个
可串行化:每一句都加锁,在严格要求数据一致性的系统中使用。
大事务:运行时间比较长,操作的数据比较多的事务。
风险:锁定太多的数据,造成大量的阻塞和锁超时。回滚时间也比较长。执行时间长,容易造成主从延迟。
避免一次处理太多的数据(分批处理)。
移除不必要在事务中的SELECT操作。