MySQL性能优化之存储设备
2016-12-30 18:53
330 查看
对数据库产生的影响因素:
![](http://img.blog.csdn.net/20161230163413499?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
windows默认的tcp并发数只有十个;
mysql插件式存储引擎;
![](http://img.blog.csdn.net/20161230163707969?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20161230163850892?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
业务一旦上线,很难对相对的库表进行修改。
![](http://img.blog.csdn.net/20161230164052783?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
CPU和可用内存大小,热数据远远超过可用内存大小时,网络(大量数据被查询),比如使用memcache存储引擎时,缓存失效产生大量的网络传输。
当出现I/O系统瓶颈时,最好的解决办法就是升级I/O子系统,增加更多的内存。
如何选择CPU?(频率&数量)
![](http://img.blog.csdn.net/20161230172759209?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
尴尬…..
![](http://img.blog.csdn.net/20161230173019210?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
所以,我们要确定应用是CPU密集型吗?(答:更好的CPU)
目前版本MYSQL不支持多CPU对**同一**SQL并发处理。
然后我们系统的并发量如何?答:CPU越多越好,比如一个CPU处理一个SQL(纳秒级的)。
衡量数据库处理能力的指标不是有嘛,QPS:同时处理SQL的数量(每秒钟处理SQL的数量)。韩信点兵,多多益善咯!
Mysql主要是应用于WEB类的应用中
web类应用:核心数量比频率更重要
选择MYSQL的版本。
老版本对于多核CPU的支持并不是很好。5.0之前的现象很严重。5.6以后有了很大的改善。我们可以使用16核或者32核的CPU.
选择32位还是64位的CPU?
当然是64位的了。
还有注意服务器是多少位的,如果32位,沃日,运维,你当初干嘛的?
内存的选择
![](http://img.blog.csdn.net/20161230174819751?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
内存的IO效率远远高于硬盘;
所以,把数据缓存到内存中进行读取,就可以大大的提高数据库的效率
![](http://img.blog.csdn.net/20161230175308596?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20161230175515706?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20161230180256660?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
当缓存的数据和磁盘存储的数据一样时,也就是说所有数据都缓存了,再加内存还要毛线意思。
不过多余的内存,会增加其他服务的性能。
![](http://img.blog.csdn.net/20161230180854338?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
内存对读写都很有帮助
![](http://img.blog.csdn.net/20161230181004530?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
多次写入变成一次写入,配置中可以将缓存池中对数据库多次的写操作修改为1次
我们选择主频时,要选择服务器支持的最高内存频率。
![](http://img.blog.csdn.net/20161230181459427?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
根据数据库大小选择内存(最好选择比数据库大小大一倍多的内存)
磁盘的配置和选择
![](http://img.blog.csdn.net/20161230182015388?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
- 传统机器硬盘
最常见,使用最多,价格低,存储空间大,读写比较慢
![](http://img.blog.csdn.net/20161230182212375?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20161230182549693?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
- RAID技术组合磁盘,增加存储容量;
- 由于主机接口限制,对顺序存取,传输速度(取决于主轴转动的速度)是不会成为我们的瓶颈的。
- 更快的访问时间
- 主流是7200转或者是10000转,15000转
-
![](http://img.blog.csdn.net/20161230182645955?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
(1)
![](http://img.blog.csdn.net/20161230183159373?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
在数据不丢失的情况下可以使用,或者一次性数据库。因为丢失数据成本太高
(2)
![](http://img.blog.csdn.net/20161230183355177?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
磁盘利用率百分之五十。硬盘损坏后需要及时更换。同步镜像还需要很长的时间。比raid0快一些,适合存放日志。
(3)常用的RAID组别–RAID5
![](http://img.blog.csdn.net/20161230184103915?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20161230184221057?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
最经济的冗余配置,随机写比较慢,在底层两次读两次写,计算校验位的数值,但是随机读和顺序读很快。读取不用计算奇偶校验位。所以适合以读为主的业务。 因为数据要分配到其他磁盘上,这会严重影响磁盘的性能,所以最好使用在从数据库服务器上
(4)常用的RAID组别–RAID10
![](http://img.blog.csdn.net/20161230184905871?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20161230184955731?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
总结:
![](http://img.blog.csdn.net/20161230185219857?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
下面再来聊聊固态存储
![](http://img.blog.csdn.net/20170309141646556?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
相对机械磁盘,固态磁盘有更好的随机读写性能(读>>写)
相对机械磁盘,固态磁盘能更好的支持并发;(大并发情况下才能更好的体现它的优势,提供良好的随机IO性能,关系形数据库所需要)
相对机械磁盘,固态磁盘更容易损坏。(因为每次写入前都要对此单元进行擦除操作,长时间密集的写操作)随着占用空间的增长,性能也会有所降低。
SSD=固态硬盘
![](http://img.blog.csdn.net/20170309142511081?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
SSD硬盘也会受到接口的影响,比如SATA3.0(6Gbps)接到SATA2.0(3Gbps)的接口上。
PCI-E卡
Fusion-io就是一种使用闪存技术的PCI-E卡设备;
无法使用SATA接口,需要独特的驱动和配置
价格相对于SSD要贵,但是性能比SSD更好
大部分情况下,PCI-O还需要使用服务器的内存和CPU资源(当初老师配置Fusion-io的使用,服务器莫名自瞄的少了几十个G的内存)
不建议使用RAID技术,因为支持PCIO的RAID控制器比较少,同时价格过高,无法接受。
随机I/O是通常是由于数据库中的应用数据远远大于服务器的内存大小所导致的。同时我们提到过,如果服务器内存足够大,那我们就可以大量的把随机I/O改为顺序I/O。但是内存不可能无限的增加。当数据库中的应用数据远远大于服务器的内存容量时,就不能通过增加服务器的内存的方式来减少随机I/O了。这时候我们就可以通过固态存储设备获得额外的好处。
![](http://img.blog.csdn.net/20170309145344949?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
(对于通讯上的功能负载通常可以简单的加大并行性,来获得更高的吞吐量)
单线程对延迟比较敏感,如果要增加吞吐量,只能通过加快I/O来解决了。
附:如果只有一块固态硬盘,是放在mysql主服务器上还是主从复制的从服务器上呢?
从服务器上,因为从服务器是单线程的,而主是多线程的,为了产生更少的延迟。我们就应该增加从服务器的I/O性能, 而且由于容易损耗,所以用在主服务器上不安全。
下面说一下网络存储SAN和NAS
都是将外部文件存储设备加载到服务器上的方法
SAN(Storage Area Network,存储区域网络)通过光纤通道连接到一群计算机上。在该网络中提供 了多主机连接,但并非通过标准的网络拓扑。
ps:DAS(Direct Access Storage—直接连接存储)是指将存储设备通过SCSI接口或光纤通道直接连接到一台计算机上。
![](http://img.blog.csdn.net/20170309152209384?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20170309152304085?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
NAS(Network Attached Storage)—网络连接存储,即将存储设备通过标准的网络拓扑结构(例如以太网),连接到一群计算机上。NAS是部件级的存储方法,它的重点在于帮助工作组和部门级机构解决迅速增加存储容量的需求。需要共享大型CAD文档的工程小组就是典型的例子。
![](http://img.blog.csdn.net/20170309152427635?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
通常有网络延迟。
数据库的存储瓶颈经常出现在随机I/O上,所以网络存储弱鸡了;牺牲性能的高可用性(两台服务器挂载在同一台网络存储设备上(主服务器宕机,主备服务器上),有点像甲骨文的RAC),而且网络存储设备本身出现问题,需要更多的维护时间(等待厂商)
所以说网络存储最实用的场景就是
数据库备份
对于磁盘性能的限制都是:延迟,吞吐量
对于网络性能的限制都是:延迟,带宽,网络质量(丢包->网络风暴)
![](http://img.blog.csdn.net/20170309154431848?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20170309154923053?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
总结:
![](http://img.blog.csdn.net/20170309155206148?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20170309155316305?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
(对数据进行缓存和随机I/O顺序I/O)
windows默认的tcp并发数只有十个;
mysql插件式存储引擎;
业务一旦上线,很难对相对的库表进行修改。
CPU和可用内存大小,热数据远远超过可用内存大小时,网络(大量数据被查询),比如使用memcache存储引擎时,缓存失效产生大量的网络传输。
当出现I/O系统瓶颈时,最好的解决办法就是升级I/O子系统,增加更多的内存。
如何选择CPU?(频率&数量)
尴尬…..
所以,我们要确定应用是CPU密集型吗?(答:更好的CPU)
目前版本MYSQL不支持多CPU对**同一**SQL并发处理。
然后我们系统的并发量如何?答:CPU越多越好,比如一个CPU处理一个SQL(纳秒级的)。
衡量数据库处理能力的指标不是有嘛,QPS:同时处理SQL的数量(每秒钟处理SQL的数量)。韩信点兵,多多益善咯!
Mysql主要是应用于WEB类的应用中
web类应用:核心数量比频率更重要
选择MYSQL的版本。
老版本对于多核CPU的支持并不是很好。5.0之前的现象很严重。5.6以后有了很大的改善。我们可以使用16核或者32核的CPU.
选择32位还是64位的CPU?
当然是64位的了。
还有注意服务器是多少位的,如果32位,沃日,运维,你当初干嘛的?
内存的选择
内存的IO效率远远高于硬盘;
所以,把数据缓存到内存中进行读取,就可以大大的提高数据库的效率
当缓存的数据和磁盘存储的数据一样时,也就是说所有数据都缓存了,再加内存还要毛线意思。
不过多余的内存,会增加其他服务的性能。
内存对读写都很有帮助
多次写入变成一次写入,配置中可以将缓存池中对数据库多次的写操作修改为1次
我们选择主频时,要选择服务器支持的最高内存频率。
根据数据库大小选择内存(最好选择比数据库大小大一倍多的内存)
磁盘的配置和选择
- 传统机器硬盘
最常见,使用最多,价格低,存储空间大,读写比较慢
- RAID技术组合磁盘,增加存储容量;
- 由于主机接口限制,对顺序存取,传输速度(取决于主轴转动的速度)是不会成为我们的瓶颈的。
- 更快的访问时间
- 主流是7200转或者是10000转,15000转
-
(1)
在数据不丢失的情况下可以使用,或者一次性数据库。因为丢失数据成本太高
(2)
磁盘利用率百分之五十。硬盘损坏后需要及时更换。同步镜像还需要很长的时间。比raid0快一些,适合存放日志。
(3)常用的RAID组别–RAID5
最经济的冗余配置,随机写比较慢,在底层两次读两次写,计算校验位的数值,但是随机读和顺序读很快。读取不用计算奇偶校验位。所以适合以读为主的业务。 因为数据要分配到其他磁盘上,这会严重影响磁盘的性能,所以最好使用在从数据库服务器上
(4)常用的RAID组别–RAID10
总结:
下面再来聊聊固态存储
相对机械磁盘,固态磁盘有更好的随机读写性能(读>>写)
相对机械磁盘,固态磁盘能更好的支持并发;(大并发情况下才能更好的体现它的优势,提供良好的随机IO性能,关系形数据库所需要)
相对机械磁盘,固态磁盘更容易损坏。(因为每次写入前都要对此单元进行擦除操作,长时间密集的写操作)随着占用空间的增长,性能也会有所降低。
SSD=固态硬盘
SSD硬盘也会受到接口的影响,比如SATA3.0(6Gbps)接到SATA2.0(3Gbps)的接口上。
PCI-E卡
Fusion-io就是一种使用闪存技术的PCI-E卡设备;
无法使用SATA接口,需要独特的驱动和配置
价格相对于SSD要贵,但是性能比SSD更好
大部分情况下,PCI-O还需要使用服务器的内存和CPU资源(当初老师配置Fusion-io的使用,服务器莫名自瞄的少了几十个G的内存)
不建议使用RAID技术,因为支持PCIO的RAID控制器比较少,同时价格过高,无法接受。
随机I/O是通常是由于数据库中的应用数据远远大于服务器的内存大小所导致的。同时我们提到过,如果服务器内存足够大,那我们就可以大量的把随机I/O改为顺序I/O。但是内存不可能无限的增加。当数据库中的应用数据远远大于服务器的内存容量时,就不能通过增加服务器的内存的方式来减少随机I/O了。这时候我们就可以通过固态存储设备获得额外的好处。
(对于通讯上的功能负载通常可以简单的加大并行性,来获得更高的吞吐量)
单线程对延迟比较敏感,如果要增加吞吐量,只能通过加快I/O来解决了。
附:如果只有一块固态硬盘,是放在mysql主服务器上还是主从复制的从服务器上呢?
从服务器上,因为从服务器是单线程的,而主是多线程的,为了产生更少的延迟。我们就应该增加从服务器的I/O性能, 而且由于容易损耗,所以用在主服务器上不安全。
下面说一下网络存储SAN和NAS
都是将外部文件存储设备加载到服务器上的方法
SAN(Storage Area Network,存储区域网络)通过光纤通道连接到一群计算机上。在该网络中提供 了多主机连接,但并非通过标准的网络拓扑。
ps:DAS(Direct Access Storage—直接连接存储)是指将存储设备通过SCSI接口或光纤通道直接连接到一台计算机上。
NAS(Network Attached Storage)—网络连接存储,即将存储设备通过标准的网络拓扑结构(例如以太网),连接到一群计算机上。NAS是部件级的存储方法,它的重点在于帮助工作组和部门级机构解决迅速增加存储容量的需求。需要共享大型CAD文档的工程小组就是典型的例子。
通常有网络延迟。
数据库的存储瓶颈经常出现在随机I/O上,所以网络存储弱鸡了;牺牲性能的高可用性(两台服务器挂载在同一台网络存储设备上(主服务器宕机,主备服务器上),有点像甲骨文的RAC),而且网络存储设备本身出现问题,需要更多的维护时间(等待厂商)
所以说网络存储最实用的场景就是
数据库备份
对于磁盘性能的限制都是:延迟,吞吐量
对于网络性能的限制都是:延迟,带宽,网络质量(丢包->网络风暴)
总结:
(对数据进行缓存和随机I/O顺序I/O)
相关文章推荐
- mysql:21个性能优化最佳实践之19[选择正确的存储引擎]
- Mysql innodb存储引擎的性能优化一
- mysql性能优化学习笔记-存储引擎
- mysql存储性能优化
- MYSQL性能优化之Mysql体系结构,存储引擎
- Mysql innodb存储引擎的性能优化二
- 当主机存储性能不是很理想时,对mysql io 的一些优化
- Mysql 性能优化1 硬件设备的选择
- 对mysql存储性能优化的基本理解
- 对mysql存储性能优化的基本理解
- 对mysql存储性能优化的基本理解
- 总结下MySQL存储引擎的区别和性能优化的一些方法
- 【MySQL-性能优化2】 开启慢查日志的方式和存储格式
- 从MySQL得到最大的优化性能
- [转]LAMP(Linux+Apache+MySQL+PHP)服务器的性能优化
- LAMP(Linux+Apache+MySQL+PHP)服务器的性能优化
- 优化使用mysql存储session的php代码
- MySQL性能优化的参数简介
- MySQL 性能优化
- mysql 优化系列(一) Mysql数据库引擎性能测试