什么会影响数据库查询的速度以及影响MySQL性能的因素?

发布者:上海IT外包来源:http://www.lanmon.net点击数:2415


首先,是什么影响了数据库查询的速度
1.1影响数据库查询速度的四个因素
什么会影响数据库查询速度以及影响MySQL性能的因素
1.2风险分析
QPS:QueriesPerSecond表示“每秒查询速率”,这是服务器每秒可以响应的查询数。它衡量特定查询服务器在指定时间内处理的流量。
TPS:是PerSecond的缩写,是每秒的事务数。它是软件测试结果的度量单位。客户端在发送请求时开始计时,并在收到服务器的响应后结束计时,从而计算使用时间和完成的事务数。
提示:最好不要在主库上备份数据库,在大事件之前取消这样的计划。
低效的sql:超高QPS和TPS。
大量并发:数据连接数已满(max_connection默认为100,通常将连接数设置得更大)。并发:数据库服务器同时处理的请求数
CPU使用率过高:CPU资源耗尽和停机。
磁盘IO:磁盘IO性能突然下降并消耗大量磁盘性能的计划任务。解决方案:更快的磁盘设备,计划任务和磁盘维护。
1.3网卡流量:如何避免无法连接数据库的情况
减少从站数量(从服务器将从主站复制日志)
分层缓存(避免前端批量缓存)
避免使用select *进行查询
单独的业务网络和服务器网络
1.4大表引起的问题(重要)
1.4.1大型手表的特点
记录数量巨大,记录数量超过1000万。
表数据文件很大,超过10G
1.4.2大型手表的危害
1.慢查询:很难在短时间内过滤掉所需的数据。查询词具有低歧视 - >
要过滤掉表中的大量数据,一些数据将生成大量磁盘io  - >
降低磁盘效率
2.对DDL的影响:
构建索引需要很长时间:
MySQL-v=5.5索引将导致主从延迟(mysql构建索引,首先在组上执行,然后在库上执行)
修改表结构需要一个长锁表:它将导致长期主从延迟('480秒延迟')1.4.3如何处理数据库中的大表
子库表将一个大表分成多个小表
困难:
子表主键选择
子表后的跨分区数据的查询和统计
1.5大额交易引起的问题(重要*)*
1.5.1什么是交易?
什么会影响数据库查询速度以及影响MySQL性能的因素
1.5.2交易的ACID属性
1.原子性:所有成功的,所有回滚失败。银行存款和取款。
2.一致:银行转账总额保持不变。
3.隔离:
隔离级别:
未读读(READ UNCOMMITED)脏读,两个交易彼此可见;
READ COMMITED符合隔离的基本概念。当事务正在进行时,其他提交的事物对事务是可见的,即,可以获得由其他事务提交的数据。
可重复读取(REPEATABLE READ)InnoDB的默认隔离级别。当事务正在进行时,所有其他事务对它都是不可见的,也就是说,多次执行读取,结果是一样的!
SERIALIZABLE锁定读取的每一行数据,导致大量锁定超时和锁定。严格的数据一致性并且没有并发性。
查看系统的事务隔离级别:显示'%iso%'等变量;
打开一个新的交易:开始;
提交交易:commit;
修改事物的隔离级别:setsession tx_isolation='read-committed';
4,DURABILITY:从数据库的角度来看,磁盘损坏是行不通的
什么会影响数据库查询速度以及影响MySQL性能的因素
Redolog机制可确保事务更新的一致性和持久性
1.5.3大额交易
具有较长运行时间和大量操作数据的事务;
风险:锁定数据太多,回滚时间长,执行时间长。
锁定太多数据,导致大量阻塞和锁定超时;
回滚需要很长时间,数据仍然会被锁定;
如果执行时间很长,则会导致主从延迟,因为只有主服务器完成写入日志后,从服务器才会开始同步,从而导致延迟。
解决方案:
避免一次处理太多数据,并且可以批量处理;
删除不必要的SELECT操作以确保只有必要的写入在事务中。
二,影响MySQL性能的因素(非常重要)
2.1影响绩效的几个方面
服务器硬件。服务器系统(系统参数优化)。
存储引擎。 MyISAM:不支持事务,表级锁。 InnoDB:支持事务,支持行级锁定,事务ACID。
数据库参数配置。
数据库结构设计和SQL语句。 (关键优化)
2.2 MySQL架构
三层:客户端 - >
服务层 - >
存储引擎
什么会影响数据库查询速度以及影响MySQL性能的因素
MySQL是一个插件存储引擎,具有各种存储引擎。只要您实现符合mysql存储引擎的界面,您就可以开发自己的存储引擎!
所有跨存储引擎功能都在服务层实现。
MySQL的存储引擎适用于表,而不适用于库。这意味着可以在单个数据库中使用不同的存储引擎。但是,不建议这样做。
2.3 InnoDB存储引擎
MySQL 5.5及更高版本的默认存储引擎:InnoDB。
2.3.1 InnoDB使用表空间进行数据存储。
显示像'innodb_file_per_table这样的变量
如果innodbfileper_table为ON,则会创建一个单独的表空间,该文件为tablename.ibd;
如果innodbfileper_table为OFF,则数据存储在系统的共享表空间中,文件为ibdataX(X是从1开始的整数);
.frm:是在服务器级生成的文件,类似于服务器层数据字典,记录表结构。
2.3.2(MySQL 5.5默认)系统表空间和(MySQL 5.6及以后默认)独立表空间
1.1系统表空间不能简单地缩小文件大小,导致浪费空间和大量磁盘碎片。
1.2独立表空间可以通过optimeze表收缩系统文件,而无需重新启动服务器或影响对表的正常访问。
2.1如果刷新了多个表,它们实际上是顺序的,从而导致IO瓶颈。
2.2单独的表空间可以同时刷新数据到多个文件。
强烈建立Innodb的单独表空间,并优化更方便和可控的方法。
2.3.3将系统表空间表转换为独立表空间的方法
1.使用mysqldump导出所有数据库数据(存储过程,触发器和计划任务必须一起导出)可以在从属服务器上运行。
2.停止MYsql服务器,修改参数(my.cnf加入innodbfileper_table),并删除Inoodb相关文件(可以重建Data目录)。3.重新启动MYSQL并重建Innodb系统表空间。
4.重新导入数据。
或者Altertable也可以传输,但系统表空间占用的空间无法回收。
2.4 InnoDB存储引擎的功能
2.4.1功能1:事务存储引擎和两种特殊日志类型:重做日志和撤消日志
Innodb是一个事务存储引擎。
完全支持事务的ACID功能。
支持公司要求的两种特殊日志类型:RedoLog和UndoLog
重做日志:实现事务持久性(已提交的事务)。撤消日志:独立于表空间的未提交事务需要随机访问,并且可以存储在高性能io设备上。
撤消日志在修改数据之前记录数据的值。它可用于在事务失败时回滚。重做日志记录数据块的修改值,可用于从尚未写入数据文件的成功事务更新中恢复数据。
2.4.2功能2:支持行级锁
InnoDB支持行级锁定。
行级锁可以最大程度地支持并发。
行级锁由存储引擎层实现。
2.5什么是锁?
2.5.1锁定
什么会影响数据库查询速度以及影响MySQL性能的因素
2.5.2锁定类型
什么会影响数据库查询速度以及影响MySQL性能的因素
2.5.3锁定粒度
MySQL事务支持不依赖于MySQL服务器本身,而是与存储引擎相关联。
什么会影响数据库查询速度以及影响MySQL性能的因素
将table_name添加到表级锁定命令:locktable table_name write;写锁定将阻止其他用户对表的“读写”操作,直到写锁被释放为止:解锁表;
锁的开销越大,粒度越小,并发性越高。
表级锁通常在服务器级实现。
行级锁由存储引擎层实现。 Innodb锁定机制,服务器层未知
2.5.4阻塞和死锁
(1)阻塞是由资源不足引起的队列等待现象。 (2)死锁是因为两个对象在有一个资源时应用另一个资源,而另一个资源碰巧由两个对象持有,导致两个对象无法完成操作和保留的资源。无法发布。
2.6如何选择合适的存储引擎
参考条件:
交易
备份(Innobd的免费在线备份)
崩溃恢复
存储引擎的特定功能
总结: Innodb Dafa很好。
注意:尽量不要使用混合存储引擎。例如,回滚将导致在线热备份出现问题。2.7配置参数
2.7.1内存配置相关参数
确定可以使用的内存上限。
内存使用量的上限不能超过物理内存,否则容易造成内存溢出; (对于32位操作系统,MySQL只能尝试低于3G的内存。)
确定单独使用MySQL的每个连接所使用的内存。
sort_buffer_size的值
#定义每个线程排序缓冲区的大小,MySQL会在有查询时为每个缓冲区分配内存,需要做排序操作(直接分配参数的所有内存); join_buffer_size#定义每个线程的使用连接缓冲区的大小,如果查询与多个表关联,MySQL将为每个表分配一个连接缓冲区,导致查询生成多个连接缓冲区; read_buffer_size#定义MyISAM的全表扫描当分配读缓冲池的大小时,MySQL将在需要查询时为其分配内存。它必须是4k的倍数; read_rnd_buffer_size #Index缓冲区大小,MySQL将在需要时为其分配内存,仅分配所需的大小。 。
注意:以上四个参数分配给一个线程。如果有100个连接,则需要×100。
MySQL数据库实例:
1MySQL是单进程多线程(而oracle是多进程),这意味着MySQL实例是一个服务进程,即进程;
2 MySQL实例由线程和内存组成,实例实际上用于操纵数据库文件;
通常,实例在一个或多个数据库上运行;在集群的情况下,多个实例在一个或多个数据库上运行。
如何为缓存池分配内存:
Innodb_buffer_pool_size,定义Innodb使用的缓冲池的大小,对于它的性能非常重要,并且必须足够大,但是当它太大时,Innodb需要更多时间将脏页从缓冲池关闭到磁盘。
总内存 - (每个线程所需的内存*连接数) - 系统保留的内存
Key_buffer_size,定义MyISAM使用的缓存池的大小。由于数据依赖于存储操作系统缓存,因此为操作系统保留了更大的内存空间。
选择总和(index_length)

Information_schema.talbes
哪里
E``ngine=`` '的myisam'
注意:即使用于开发的表都是Innodb表,也为MyISAM保留内存,因为MySQL系统使用的表仍然是MyISAM表。Max_connections控制允许的最大连接数,通常为2000。
不要使用外键约束来确保数据完整性。
2.8性能优化顺序
从上到下:
什么会影响数据库查询速度以及影响MySQL性能的因素
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部