MySQL数据库的性能的影响

一. 服务器的硬件的限制

二. 服务器所使用的操作系统

三. 服务器的所配置的参数设置不同

四. 数据库存储引擎的选择

五. 数据库的参数配置的不同

六. (重点)数据库的结构的设计和SQL语句

文章相关视频讲解:

c/c++Linux后台服务器开发高级架构师视频资料

MySQL——索引及其优化

MySQL的核心原理分析,核心知识点是什么?


1). 服务器的配置和设置(cpu和可用的内存的大小)

 1.网络和I/O资源 2.cpu的主频和核心的数量的选择(对于密集型的应用应该优先考虑主频高的cpu)(对于并发量大的应用优先考虑的多核的cpu)3.磁盘的配置和选择(使用传统的机械硬盘:特点:读写较慢、存储空间大、最常见、使用最多、价格低;工作过程:移动磁头到磁盘表面上的正确位置;等待磁盘的旋转,使得所得所需的数据在磁头之下;等待磁盘旋转过去,所有所需的数据都被磁头读出选择因素:存储容量、传输速度、访问时间、主轴转速、物理尺寸)(使用RAID增强传统的机器硬盘的性能:特点:利用小的磁盘组成大的磁盘并提供数据的冗余保证数据的完整性的技术数据库中所使用的RAID的级别:RAID0级别、RAID1级别、RAID5级别[分布式奇偶校验磁盘阵列]、RAID10[分片的镜像(数据库最好的方式)]RAID级别选择:如下图)(使用固态存储的SSD和PCI-E卡:特点:相对于机械盘固态磁盘有更好的随机读写性能;相对于机械固态磁盘能更好的支持并发;相对于机械固态磁盘更容易损坏SSD:使用SATA接口可以替换传统的磁盘而不需要任何的改变[受到接口的速度的限制];SATA接口的SSD同样支持RAID技术PCI-E卡(Fusion-IO卡):无法使用在SATA接口[需要使用独特的驱动和配置];价格贵,使用了cpu的资源和内存使用的场景:适用于存在大量的随机I/O的场景;适用于解决单线程负载的I/O瓶颈)(使用网络存储NAS和SAN:SAN[光纤接入服务器]:大量顺序读写操作、读写I/O、缓存、I/O合并、随机读写慢(不如本地的RAID)NAS设备使用网络连接,基于文件的协议如NFS或者SMB来访问适合场景:数据库的备份、)
复制代码

不同REAID级别的对比:

注意事项:

 1.64位数据库的版本使用32位的服务器的版本2.内存的主频的选择主板所能支持的最大内存的频率
复制代码

总结:

 对于cpu:1.64位的cpu一定能够要工作在64位的系统下2.对于并发比较高的场景cpu的数量比频率重要3.对于cpu密集型的场景和复杂SQL则频率越高越好对于内存:1.选择主板所能使用的最高频率的内存2.内存的大小对性能很重要,所以尽可能的大I/O子系统:1.PCIe -> SSD -> RAID10 -> 磁盘 -> SAN
复制代码

2). 操作系统对性能的影响

Windows、FreeBSD、Solaris、Linux
centos的参数优化的设置:(1)内核相关的参数(/etc/sysctl.conf)net.core.somaxconn = 65535net.core.netdev_max_backlog = 65535net.ipv4.tcp_max_syn_backlog = 65535net.ipv4.tcp_fin_timeout = 10net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.core.wmem_defaullt = 87380net.core.wmem_max = 16777216net.core.rmem_defaullt = 87380net.core.rmem_max = 16777216net.ipv4.tcp_keepalive_time = 120net.ipv4.tcp_keepalive_intvl = 30net.ipv4.tcp_keepalive_probes = 3kernel.shmmax = 4294967295vm.swappiness = 0(2)增加资源限制(/etc/security/limit.conf)* soft nofile 65535* hard nofile 65535* 表示对所有的用户有效soft 指的是当前系统的生效的设置hard 表明系统中所能设定的最大值nofile 表示所限制的资源是打开文件的最大数目65535 就是限制的数量(3).磁盘调度策略(/sys/block/devname/queue/scheduler)noop(电梯式调度策略)、deadline(截止时间调度策略)、anticipatory(预料I/O调度策略)cat /sys/block/sda/queue/schedulernoop anticipatory deadline [cfq]echo deadline > /sys/block/sda/queue/scheduler
复制代码

3).MySQl的数据库的体系

关于C/C++ Linux后端开发网络底层原理知识 点击 学习资料 获取,内容知识点包括Linux,Nginx,ZeroMQ,MySQL,Redis,线程池,MongoDB,ZK,Linux内核,CDN,P2P,epoll,Docker,TCP/IP,协程,DPDK等等。

4).MySQl的数据库的存储引擎

(1).Mysql之存储引擎MyISAM组成的结构:表为MYD和MYI、frm的文件组成特性:并发性和锁级别MyISAM表支持索引类型MyISAM表支持数据的压缩(命令行:myisampack)myisampack -b -f myIsam.MYI;压缩后的表不能进行写操作,只能进行读操作修复:对数据库中的表进行检查并修复:check table mytable;repair table mytable;myisamchk工具,修复时数据库服务必须停止限制:使用MySQL5.0之前时默认表的大小4G(存储大表修改MAX_Rows和AVG_ROW_LENGTH)使用MySQL5.0之后的版本默认支持256TB适用的场景:非事务型的应用只读类的应用空间类的应用(GPS的数据)
(2).Mysql之存储引擎InnoDBmysql5.5.8之后版本默认使用的存储引擎组成结构:通过设置innodb_file_per_table参数存储的位置不同ON:独立表空间:tablename.ibdOFF:系统表空间:ibdataX建议:对于mysql中建议使用InnoDB的独立表空间特性:事务性存储引擎完全支持事务的存储引擎Redo log(存储已经提交的事务)和Undo log(存储未提交的事务)InnoDB支持行级别锁最大程序的支持并发行级别的锁是由存储引擎层实现的锁:共享锁(读锁)、独占锁(写锁)表级锁、行级锁阻塞:确保事务并发的正常的执行死锁:两个或者两个以上的事务执行过程中相互等待对方的资源而产生的一种异常InnoDB状态检查:show engine innodb status; 适用场景:InooDB适用于大多数OLTP应用
(3).Mysql之存储引擎CSV特点:数据以文本的方式存储在文件中.CSV文件存储表的内容.CSM文件存储表的元数据如表的状态和数据量.frm文件存储表的结构的信息以CSV格式进行数据的存储所有的列必须不能为NULL的不支持索引(不适合大表,不适合在线处理)可以对数据文件直接进行编辑适用的场景:适合作为数据交换的中间表mysql数据目录->csv文件->其他web程序excel电子表格 -> csv文件 -> mysql数据目录
(4).Mysql之存储引擎Archive特点:以zlib对表数据进行压缩,磁盘I/O更少数据存储在ARZ为后缀的文件中只支持insert和select操作只支持在自增的ID列上加索引适用场景:日志和数据采集类的应用
(4).Mysql之存储引擎Memory特点:数据只保存在内存中Memory存储引擎的I/O效率特别高支持HASH索引和BTree索引所有的字段为固定长度不支持BLOG和TEXT等大字段Memory存储引擎使用表级锁表中存储数据的最大值由max_heap_table_size参数决定适用场景:用于查找或者映射表,例如邮编和地区用于保存数据分析产生的中间表用于缓存周期性聚合数据的结果表
复制代码

5).MySQl的数据库的服务器参数

(1).Mysql配置参数作用域全局参数 set global 参数名=参数值;set @@global.参数名:=参数值;会话参数set[session] 参数名=参数值;set @@session.参数名:=参数值;
(2).内存配置相关的参数确定可以使用的内存的上限确定MySQL的每个连接使用的内存sort_buffer_size join_buffer_sizeread_buffer_size read_rnd_buffer_size确定需要为操作系统保留多少内存如何为缓存池分配内存Innodb_buffer_pool_size总内存-(每个线程锁需要的内存*连接数)- 系统的保留内存key_buffer_size
(3).I/O相关配置参数InnoDb存储引擎的I/O参数设置:Innodb_log_file_sizeInnodb_log_file_in_groupInnodb_log_buffer_sizeInnodb_flush_log_at_trx_commitInnodb_flush_method = O_DIRECTInnodb_file_per_table = 1Innodb_doublewrite = 1MySIAM存储引擎的I/O参数设置:delay_key_writeOFF:每次操作后刷新键缓冲中的脏块到磁盘ON:只对在键表时指定了delay_key_write选项的表使用延迟刷新ALL:对所有MYSIAM表都使用延迟键写入
(4).安全相关配置参数expire_logs_days 指定自动清理binlog的天数max_allowed_packet 控制MySQL可以接受的包的大小(32M)skip_name_resolve 禁用DNS查找sysdate_is_now 确保sysdate()返回确定性的日期read_only 禁止非super权限的用户写权限skip_slave_start 禁止Slave自动恢复sql_mode 设置MySQL所使用的SQL模式strict_trans_tablesno_engine_subtitutoionno_zero_dateno_zero_in_dateonly_full_group_by
(5).其他相关配置参数sync_binlog = 1控制MySQL如何向磁盘刷新binlogtmp_table_size和max_heap_table_size 控制内存临时表的大小(设置一致)max_connections = 2000 控制允许的最大连接数
复制代码

6).MySQl的数据库的结构设计和SQL的优化

(1).过分的反范式化为表的建立太多的列
(2).过分的范式化造成太多的表关联
(3).在OLTP环境中使用不恰当的分区表
(4).使用外键保证数据的完整性
复制代码

性能优化的顺序

  • 数据库结构设计和SQL语句优化
  • 数据库的存储引擎的选择和参数的配置
  • 系统的选择及其优化
  • 硬件升级

MySQL数据库的性能的影响分析及优化相关推荐

  1. MySQL数据库访问性能优化

    MYSQL应该是最流行的WEB后端数据库.大量应用于PHP,Ruby,Python,Java 等Web语言开发项目中,无论NOSQL发展多么快,都不影响大部分架构师选择MYSQL作为数据存储. MYS ...

  2. leip与mysql数据库_性能分析方法 - osc_xm8bu282的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.性能分析的常用手段 1.空间换时间,利用内存缓存从磁盘上取出的数据,CPU可以直接访问内存,从而比从磁盘读取数据更高的效率. 2.时间换空间,当空间成为瓶颈的时候,切开数据分批次处理,用更少空间完 ...

  3. 打造扛得住的MySQL数据库架构-第一课--影响数据库性能的因素

    连接数,并发量 500 服务器连接错误 磁盘IO: 网卡流量: 1000MB 什么的表才叫大表??? 超过千万行,10G 大表的影响: 大表对DDL操作的影响 修改表的结构需要长时间锁表 5.5和版本 ...

  4. Mysql学习总结(63)——Mysql数据库架构方案选择与分析

    一.数据库架构原则 高可用 高性能 一致性 扩展性 二.常见的架构方案 方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用 jdbc:mysql://vip:3306/xxdb 高可用分析: ...

  5. mysql数据库最大性能_数据库Mysql性能优化

    关于本文,笔者参考了一下其他博主的资料,加上个人的认知和理解,先整理如下: 在mysql数据库中,mysql key_buffer_size是对MyISAM表性能影响最大的一个参数(注意该参数对其他类 ...

  6. MySQL数据库的性能优化总结

    一.MySQL数据库的优化目标.基本原则: 1.优化目标: MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,无论是索引优化.还是表结构优化,参数优化,最后都可以归纳到这这两个分类中: (1)减 ...

  7. [渗透攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包

    这是最近学习渗透和网站攻防的基础性文章,前面文章从数据库原理解读了防止SQL注入.SQLMAP的基础用法.数据库差异备份.Caidao神器.这篇文章将详细讲解MySQL数据库攻防知识,有点类似第一篇文 ...

  8. 高速PCB损耗性能的影响分析

    摘要:降低信号的传输损耗对于保证高速PCB的电气性能至关重要,文章采用矢量网络分析仪分析了高速板材.铜箔类型.玻纤布类型.阻焊油墨.粗化药水.表面处理工艺等材料及加工工艺的选择对高速PCB的损耗性能的 ...

  9. 连接 mysql 数据库的 失败_MySQL_连接MySQL数据库失败频繁的原因分析,连接mySQL数据库失败频繁,主 - phpStudy...

    连接mySQL数据库失败频繁,主要是什么原因造成的? 一年前,我开发了一个网站http://www.***.com,租用的是linux下PHP+mySQL的虚拟空间,之前一直工作正常. 近半年来,却频 ...

最新文章

  1. 关于curl使用记录
  2. 场景法:基本流、备选流、构造场景
  3. 从静态到动态,词表征近几十年发展回顾
  4. 在Android中,如何以编程方式在dp中设置边距?
  5. MAP 最大后验——利用经验数据获得对未观测量的点态估计
  6. ActiveReports for .NET 3 破解
  7. 新手vue构建单页面应用实例
  8. Android 关于Edittext输入框光标焦点无法及时定位解决办法.
  9. 纯CSS实现Tab栏的切换
  10. JavaScript 技术篇-js获取dom节点、html标签自定义属性的值。
  11. SybaseIQ - utility_db介绍
  12. 五天面试 Google、Facebook、Airbnb 等硅谷五家顶级公司,我是如何都拿到 Offer 的
  13. cocos2d-x游戏开发(八)各类构造器
  14. 在shell脚本中调用sqlplus
  15. 使用科大讯飞语音转文字的服务进行电话录音分析
  16. C# Android wifi控制灯,求助如何在基于安卓通过WiFi与Arduino通信,实现对LED灯的控制。...
  17. 元件库导入_最新版字体图标元件库分享,一套绝佳的矢量字体图标元件库
  18. fetch与axios
  19. Async注解使用及源码分析
  20. IEEE极限编程:Word Ordering

热门文章

  1. 自定义相机旋转拍照角度
  2. c语言新建一个单向链表菜鸟,【图片】菜鸟的进击——玩转C语言链表【c程序设计吧】_百度贴吧...
  3. python的沙盒环境--virtualenv
  4. 计算机专业英语作业1,计算机专业英语1次作业.doc
  5. 智能ABC输入法的三个小秘密
  6. iOS Socket(1) —— 简介
  7. 线程间通信方式Linux,线程间的通信、同步方式与进程间通信方式
  8. 计算机二级信息管理,2021年上半年全国计算机等级考试[信息管理技术]精选模拟试题及答案解析...
  9. 天大2021年秋学期考试《建筑施工》离线作业考核试题
  10. python解题冒泡排序_python 冒泡排序,快排