MySQL优化(二)——什么影响了MySQL性能

另外,如果您的 RDS MySQL 实例资源使用率不高,说明可能存在一定的资源浪费。在优化 SQL 查询和配置参数之后,可以考虑根据实际需求调整 RDS 实例的规格,以降低成本。

硬件

mysql占用内存过高的原因_mysqld内存占用很高mysql占用内存过高的原因_mysqld内存占用很高


mysql占用内存过高的原因_mysqld内存占用很高


mysql占用内存过高的原因_mysqld内存占用很高


net.ipv4.tcp_keepalive_time=120 发送时间

系统

数据库参数配置

数据库结构设计和SQL语句

一、硬件

1、CPU的选择

我们的应用是否是CPU密集型的

对于cpu密集型的应用,我们需要加快sql语句的处理速度。由于mysql的sql语句处理是单线程的,因此我们需要更好的cpu,而不是更多的cpu。

我们系统的并发量如何

64位已经是默认配置了。

2、内存的选择

内存的io要远高于磁盘,即便是SSD或者Fusion_IO。所以把数据缓存到内存中读取,可以大大提高性能。

常用的mysql引擎中,MyISAM把索引缓存到内存,数据不缓存。而InnoDB同时缓存数据和索引。

缓存不仅对读取有益,对写入也是可以优化的,我们可以通过缓存,将多次写入合并成一次写入作。

怎么选择内存:主频尽量大,型号尽量相同,单条内存容量尽量打。

传统机械磁盘

RAID增强传统机械磁盘

固态存储SSD和PCIe卡

网络存储NAS和SAN

如何选择传统机械硬盘

存储容量

传输速度

主轴转速

物理尺寸:越小性能越高,存储空间越小

什么是RAID:把多个容量小的磁盘组成一组容量更大的磁盘,并提供数据冗余来保证数据完整性的技术。

RAID5,分布式奇偶校验磁盘阵列

RAID10,分片镜像

特点

是否冗余

盘数

读写

RAID0

否N

快快

RAID1

高速读,简单,安全

快慢

RAID5

安全,成本这种

有N+1

快取决于最慢的/etc/myf /etc/mysql/myf ~/.myf盘

RAID10

贵,高速,安全

快快

RAID10

固态存储

相比机械磁盘,固态磁盘能更好的支持并发。

相比机械磁盘,固态磁盘 更容易损坏

SSD:

1.使用SATA接口。可以替换传统磁盘而不需任何改变

2.SATA接口的SSD同样支持RAID技术。注意SSD的RAID与传统不同。

PCI-E

1.无法使用SATA接口,需要独特的驱动和配置

2.价格相对于SSD要贵,但是性能比SSD更好

固态存储的使用场景:

1.适用于存在大量的随机I/O的场景。

2.适用于解决单线程负载的I/O瓶颈。

网络存储

SAN:通过光钎链接,可以将其当做硬盘使用。适合大量顺序读写

NAS:使用网络连接,通过基于文件的协议如NFS或SMB来访问。

网络存储适合的场景:

数据库备份

4、网络性能的影响

延迟、带宽(吞吐)

网络带宽的影响,不必多说。可能很多人认为数据库与Web的通信是在内网下的,带宽影响不大。其实在大促的情况下,我们有50台,同时向数据库请求2M的数据,那么就需要100M的带宽了。

建议:

采用高性能和高带宽的网络接口设备和交换机。

对多个网卡进行绑定,增强可用性和带宽。

尽可能的进行网络隔离。

5、硬件对性能的影响,总结

cpu

1、64位的cpu一定要工作在64位的系统下。

3、对于cpu密集型场景和复杂SQL则频率越高越好。

内存

1、选择主板所能使用的频率的内存

2、内存的大小对性能很重要,所以尽可能的大

I/O子系统

PCIe_>SSD_>Raid10_>磁盘_>SAN

二、系统

MySql适合的作系统

Windows

FreeBSD

Solaris

下面的内容以CentOs系统为例

系统参数优化

内核相关参数(/etc/sysctl.conf)

网络相关

- net.core.xconn=65535

对于一个TCP连接来说,端和客户端需要进行三次握手来建立网络的连接。当三次握手成功之后,我们可以用netstat命令查看端口的状态由转变成了连接,接着该连接就可以传输数据了。对于一个状态的端口,都会有自己的队列,而该参数就决定了队列的长度。

- net.coredev_max_backlog=65535

- net.ipv4.tcp_max_syn_backlog=65535

加快tcp连接的回收

net.ipv4.tcp_fin_timeout=10

net.ipv4.tcp_tw_reuse=1

net.ipv4.tcp_tw_recycle=1

tcp连接接收和发送缓冲区大小的默认值和值

net.core.wmem_default = 87380

net.core.wmem_=16777216

net.core.rmem_default=87380

net.core.rmem_max=16777216

检测占用的tcp连接是否已经失效

net.ipv4.tcp_keepalive_probes=3 发送几次

内存相关参数

kernel.shmmax = 4294967295

注意:

1、这个参数应该设置的足够大,以便能在一个共享内存段下容纳下整个的Innodb缓冲池大小

2、这个值的大小对于64位linux系统,可取的值为物理内存值-1byte,建议值为大于物理内存的一半,一般取值大于Innodb缓冲池大小即可。

vm.swappiness=0

这个参数当内存不足时会对性能产生比较明显的影响。

拓展:

Linux系统内存交换区:在linux系统安装时都会有一个特殊的磁盘分区,称之为系统交换分区。如果我们使用free-m在系统中查看可以看到类似下面内容,其中swap就是交换分区。 当作系统因为没有足够的内存时就会将一些虚拟内存写到磁盘的交换区中,这样就会发生内存交换

-主张 完全禁用 的风险:

1、降低作系统的性能

2、容易造成内存溢出,崩溃,或都作系统kill掉

结论:在MySQL上保留交换分区,但是要控制何时使用。vm.swappiness=0就是告诉Linux内核除非虚拟内存完全满了,否则不要使用交换区。

这个文件实际上是linux PAM也就是插入式认证模块的配置文件。

其中重要的配置是:打开文件数的限制。

soft nofile 65535

hard nofile 65535

其中:表示对所有用户有效,soft指当前系统生效的设置,hard表明系统中所能设定的值,nofile表示所限制的资源是打开文件的数目,65535就是限制的数量。

结论:把可打开的文件数量增加到65535,以保证可以打开足够多的文件句柄。

注意:这个文件的修改需要重启系统才可以生效。

磁盘调度策略(/sys/block/devname/queue/scheduler)

noop anticipatory deadline [cfq]

查看:cat /sys/block/sda/queue/scheduler

noop(电梯式调度策略)

noop实现了一个FIFO队列,它像电梯的工作方法一样对I/O请求进行组织,当有一个新的请求到来时,它将请求合并到最近的请求之后,以此来保证请求同一介质。

deadline(截止时间调度策略)

对数据库。

修改磁盘调度策略

文件系统的选择

windows:

- FAT

- NTFS

linux:

EXT3

EXT4

XFS(性能更高)

三、存储引擎

MySQL体系结构 注意:存储引擎是针对于表的而不是针对于库的(一个库中的不同表可以使用不同的存储引擎)

MyISAM

MySql5.5之前版本默认存储引擎。

MyISAM存储引擎表有MYD和MYI组成。

特性:

并发性与锁级别:对读写混合的并发性并不会太好

表损坏修复

支持的索引类型:全文索引

支持压缩:压缩表只支持读作,不支持写作

适用场景:

非事务型应用

只读类应用

空间类应用

Innodb

标签:磁盘阵列数据硬盘time主板打开重启队列

mysql中cpu负载很高,是什么原因

占用CPU过高,可以做如下考虑:

mysql中cpu负载很高,是什么原因

1、确定高负载的类型 htop,dstat命令看负载高是CPU还是IO

看具体是哪个用户哪个进程占用了相关系统资源,当前CPU、内存谁在使用当您想提高 RDS MySQL 的内存使用率时,可以关注以下几个方面的 SQL 语句:

2、具体的sql语句,是insert update 还是 delete导致高负载

抓取mysql包分析,一般抓3306端口的数据 看出最繁忙的sql语句了

3、检查my增加资源限制(/etc/security/limit.conf)sql日志

分析mysql慢日志,查看哪些sql语句最耗时

检查mysql配置参数是否有问题,引起大量的IO或者高CPU作

innodb_flush_log_at_trx_commit 、innodb_buffer_pool_size 、key_buffer_size 等重要参数

php速度奇慢,在mysql的临时文件夹里有大量的临时文件达100M?

2020-11-03T03:36:07.519419Z 0 [System] [MY-010116] [] /usr/in/mysqld (mysqld 8.0.19) starting as process 21171

有可能是因为mysql索引文件受损,造成联表时都用全表扫描建立临时表。试着check 、repair一下。

RAID增强

MySQL默认配置时 InnoDB 的速度是非常慢的,跟乌龟爬一样。

如果是可以InnoDB可以尝试优化MYSQL配置给它加点内存

mysql也是文件存储式的数据库!用一段时间,压缩,优化索引一下!比同类的access数据库,速度可是快很多呢!

◥◣多多折主机超市◢◤50M=20专家坐镇|如虎添翼|淘宝交易|智能双线|免费试用|送数据库|免费备案

优化程序,优化sql语句...sql语句echo deadline > /sys/block/sda/queue/scheduler执行效率太低也会造成这样的问题

linux问题解答linux解决方案

这种一般是vps的宿主机内存和cpu资源不足的时候,你的内存被别人划去了,就会莫名其妙的增加。其实不是你用了的。买vps一定要买宿主机性能够强的,有足够多的cpu和内存资源的,这样性能才有保障。 你可以看看迅美网络的vps,他们的宿主机采用16核心,48G内存,15000转高速企业级SAS硬盘的超高配置和东莞电信五星级机房。每台VPS分配的都是独享的物理内存、cpu和硬盘资源,性能有保障。像这款XeonE5620/10GSAS/512M/电信3M的vps也才月付99元,性价比非常不错,非常稳定,服务也很好。你可以在淘宝上面搜索一下迅美网络,就可以找到他们。而且淘宝交易,付款进支付宝担保交易,安全也有保障,建议你去看看。

Linux内存占用过高的问题解决方案?

1.首先考虑增加物理内存,2G太少了2.查看mysql里的线程,观察是否有长期运行或阻塞的sql:showfullprocesslist3.查看mysql内存,缓存的相关配置,使用如showglobalvariableslike'%sort_buffer_size%';如不符合当前系统负载量,说明当前配置不合理,需要进行调整

linux环境变量设置错误后,如何恢复解决方案?

在linux启动菜单的选择recover相关项,然后用root账户登录,用vi修改错误的profile文件,然后reboot就好了

linux如果系统崩溃表现为网页无法显示,只有解决网页无法显示问题才这个肯定占内存了! 关闭了 没事! 你要是不搞程序就关了能更好的修复,解决原因和解决方法如下

如果网络防火墙设置不当,如安全等级过高、不小心把IE放进了阻止访问列表、错误的防火墙策略等,可尝试检查策略、降低防火墙安全等级或直接关掉试试是否恢复正便宜,快速,危险常。

VPS经常内存占满

2、) data directory对于并发比较高的场景,cpu的数量比频率重要

VPS!!!!!!这个我也帮不了你!因为一般虚拟专用都是有很多人用的,(硬件是公用的),不管你怎么调都一样!不过可以联系让帮忙解决。

你们说的是虚拟的那种吧有2!

留个QQ 我远程帮你看看

mysql 有哪些常见的优化策略

四、网络防火墙的问题

mysql的优化大的有两方面:

1、配不过现在的电脑配置都是4G以上内存,应该影响不大置优化

配置的优化其实包含RAID 0,多磁盘串联。成本,数据容易丢失两个方面的:作系统内核的优化和mysql配置文件的优化

1)系统内核的优化对专用的mysql来说,无非是内存实用、连接数、超时处理、TCP处理等方面的优化,根据自己的硬件配置来进行优化,这里不多讲;

2)mysql配置的优化,一般来说包含:IO处理的常用参数、连接数设置、缓存使用参数的设置、慢日志的参数的设置、innodb相关参数的设置等,如果有主从关系在设置主从同步的相关参数即可,网上的相关配置文件很多,大同小异,常用的设置大多修改这些不多就够用了。

mysqld.exe进程内存太大,是系统问题么

有选择32位还是64位的cpu2N

SVCHOST.exe、wuauclt.exe这两个进程开机时候占用内存加起来会超过400M..

等级

两个进程各占一半..

平时SVCHOST.EXE也会占用到130M的内存..wuauclt.exe还更可怕一些..

机子本来就烂了..才512M的内存..这两个进程一占我基本上什么都做不了了啊..求教高手 ~怎么样才能解决这个问题啊..

mysql和mongodb哪个内存占用大

mysql> sudo -u mysql touch /home/mysql/data/a

首先是内存映射机制,数据不是持久化到存储设4、检查硬件问题备中的,而是暂时存储在内存在MySQL上是否要使用交换分区有一些争议:中,这就提高了在IO上效率以及作系统对存储介质之间的性能损耗。(毕竟内存读取最快) 其次,NoSQL并不是不使用sql,只是不使用关系。没有关系的存在,就表示每个数据都...

mysql5.7编译耗CPU

linux系统崩溃然后怎么修复?

升级mysql数据库到5.7版本后,发现MySQL对CPU和内存的消耗增加了不少,内存增加3. 第三个参数是 --log-error-verbosity=3,这个参数会显示详细的日志;量还好一些,但CPU的飙升就麻烦一些了,这样会占用不少的资源。

mysql占用内存还是很低的。

其实可以使用MySQL内部的表定位问题SQL,通过这个SQL来定位问题,通过这个SQL的查询结果可以定位具体的SQL问题,然后再进行优化,而我的CPU偏大原因就是因为部分使用了like查询,优化这个部分mysql就正常了。