大牛出招|分分钟解决MySQL查询速度慢与性能差
副标题[/!--empirenews.page--]
一、什么影响了数据库查询速度1.1 影响数据库查询速度的四个因素 ![]() 1.2 风险分析 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。 Tips:最好不要在主库上数据库备份,大型活动前取消这样的计划。
并发量:同一时刻数据库服务器处理的请求数量
1.3 网卡流量:如何避免无法连接数据库的情况
1.4 大表带来的问题(重要) 1.4.1 大表的特点
1.4.2 大表的危害 1.慢查询:很难在短时间内过滤出需要的数据 查询字区分度低 -> 要在大数据量的表中筛选出来其中一部分数据会产生大量的磁盘io -> 降低磁盘效率 2.对DDL影响: 建立索引需要很长时间:
修改表结构需要长时间的锁表:会造成长时间的主从延迟('480秒延迟') 1.4.3 如何处理数据库上的大表 分库分表把一张大表分成多个小表 难点:
1.5 大事务带来的问题(重要) 1.5.1 什么是事务 1.5.2事务的ACID属性 1.原子性(atomicity):全部成功,全部回滚失败。银行存取款。 2.一致性(consistent):银行转账的总金额不变。 3.隔离性(isolation): 隔离性等级:
查看系统的事务隔离级别:show variables like '%iso%'; 开启一个新事务:begin; 提交一个事务:commit; 修改事物的隔离级别:set session tx_isolation='read-committed'; 4.持久性(DURABILITY):从数据库的角度的持久性,磁盘损坏就不行了 redo log机制保证事务更新的一致性和持久性 1.5.3 大事务 运行时间长,操作数据比较多的事务; 风险:锁定数据太多,回滚时间长,执行时间长。
解决思路:
二、什么影响了MySQL性能(非常重要)2.1 影响性能的几个方面
MyISAM: 不支持事务,表级锁。 InnoDB: 支持事务,支持行级锁,事务ACID。
2.2 MySQL体系结构 分三层:客户端->服务层->存储引擎
2.3 InnoDB存储引擎 MySQL5.5及之后版本默认的存储引擎:InnoDB。 2.3.1 InnoDB使用表空间进行数据存储。 show variables like 'innodb_file_per_table 如果innodb_file_per_table 为 ON 将建立独立的表空间,文件为tablename.ibd; 如果innodb_file_per_table 为 OFF 将数据存储到系统的共享表空间,文件为ibdataX(X为从1开始的整数); .frm :是服务器层面产生的文件,类似服务器层的数据字典,记录表结构。 2.3.2 (MySQL5.5默认)系统表空间与(MySQL5.6及以后默认)独立表空间 1.1 系统表空间无法简单的收缩文件大小,造成空间浪费,并会产生大量的磁盘碎片。 1.2 独立表空间可以通过optimeze table 收缩系统文件,不需要重启服务器也不会影响对表的正常访问。 2.1 如果对多个表进行刷新时,实际上是顺序进行的,会产生IO瓶颈。 2.2 独立表空间可以同时向多个文件刷新数据。 强烈建立对Innodb 使用独立表空间,优化什么的更方便,可控。 2.3.3 系统表空间的表转移到独立表空间中的方法 1、使用mysqldump 导出所有数据库数据(存储过程、触发器、计划任务一起都要导出 )可以在从服务器上操作。 2、停止MYsql 服务器,修改参数(my.cnf加入innodb_file_per_table),并删除Inoodb相关文件(可以重建Data目录)。 3、重启MYSQL,并重建Innodb系统表空间。 4、 重新导入数据。 或者 Alter table 同样可以的转移,但是无法回收系统表空间中占用的空间。 2.4 InnoDB存储引擎的特性 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |