高并发网站集群场景下如何优化MySQL数据库-创新互联

本篇文章给大家主要讲的是关于高并发网站集群场景下如何优化MySQL数据库的内容,感兴趣的话就一起来看看这篇文章吧,相信看完高并发网站集群场景下如何优化MySQL数据库对大家多少有点参考价值吧。

创新互联是一家专业从事成都网站建设、网站制作的网络公司。作为专业网站设计公司,创新互联依托的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、成都营销网站建设及网站设计开发服务!

1、硬件层面优化

1.1数据库物理机

a.CPU:64位,服务器2-16个CPU,2-4颗,L1,L2越大越好;

b.mem(内存):48G-96G-128G-256G(48g 2-3个实例;96g 3-4个实例 );

c.disk(磁盘IO)数据库是IO密集应用

 机械盘:SAS(不要选择SATA),300G*12块,磁盘数量越多IO越高,SAS 15K转的硬盘。

 SSD:固态硬盘

测试对比:SAS单盘随机IO,300IOPS,SSD单盘随机IO达到上万。

d.raid阵列:选硬件RAID(0>10>5>1),选10

e.网卡至少千兆(bond),万兆交换机

f.数据库服务器尽量不用虚拟化

g.SLAVE服务器配置最好是大于等于Master

案例:

百度:IBM服务器,内存96-128G,CPU48核,3-4个实例

SINA: DELL R510,内存48G,磁盘300*12块,raid10

多实例:就是一台服务器多个数据库,比喻一个房子多个卧室。

1.2 硬件调整:

Bios调整提高CPU性能

1)   打开DAPC模式,发挥CPU性能。

2)   启动Node Interleaving,避免NUMA问题(NUMA=0)。

3)   关键C1E和State等选项。

陈列卡:

1)   配置CACHE和BBU模块(机械盘)

2)   写策略调为(wb)

3)   不用wt策略,关闭陈列预读策略

2、软件层面优化

2.1 操作系统层面优化

1)   选择x86_64位系统

2)   将系统盘和数据盘分开

3)   尽量避免是用swap

4)   避免使用操作系统软raid

5)   避免使用LVM

6)   专库专用(不要跑LNMP,TOMCAT)

7)   调整Cache mode

启动wce=1(Write Cache Enable) RCD=0(Read Cache Disable)

8)   调度算法默认cfq,noop,deadline。针对deadline可以调参(内核参数)

9)   Centos6.8默认ext4可以作为数据为的文件系统,访问量大的话,XFS就更好。Centos7默认也选了XFS,调整XFS日志,缓冲参数。

10)            mount参数很重要,async,noatime,nodirname,nobarrier等。

2.2 文件系统层优化

2.3 内核层面优化

1)   vm.swappiness设置0,或者0-5,让数据库尽量不使用swap.

2)   Vm.dirty_background_ration设置5-10,vm.dirty_ration设置前面的2倍。持续将系统脏数据刷到磁盘。

3)   net.ipv4.tcp_tw_recyle=1,net.ipv4.tcp_reuse=1, net.ipv4.tcp_fin_timeout=2,net.ipv4.tcp_keepalived_time=600减少time_wait

4)   内核优化,参考老男孩博客;

3、MySQL层面优化

3.1 my.conf参数的优化

1)   如果采用myisam引擎,key_buffer_szie加大。尽量采用innnodb.

2)   推荐使用innodb,5.5.5以后默认就是innodb引擎

3)   innodb_buffer_pool_szie,调整为内存的50%,单实例。

4)   innodb_flush_log_at_trx_commit,sync_binlog,设置为1,数据可以丢,设置0,从库设置为0。

5)   使用独立表空间。innodb_file_per_table=1

6)   innodb_log_file_size=256M

7)   log_query_time=1 ,超过1秒的语句记录LOG。

8)   一些session参数不要设置过大,一个连接就会占用参数设置的大小。Sort_buffer_size,join_buffer_size这类参数都是session级别参数。

9)   查询缓存参数要设置小一些:query_cache_size=64M,要想缓存,前端加mc,redis。

3.2 库和表的设计优化

1)   字符集UTF-8

2)   固定字符串的内容,可以选择char

3)   数据库都要给一个自增的主键,没有什么业务用途

4)   字段长度,在满足需求前提下,用最短的。Varchar(16)

5)   省份,性别,这类内容字段可以设置ENUM类型,mysql系统表(char ,ENUM)

6)   尽可能不用text/blob,如果使用的话,放到子表里。

7)   针对字段索引,尽量采用字段的前N个字符索引,不要整个字段索引。

8)   多用联合索引,前缀特性,少用独立索引,性别列不要建立独立索引了。

3.3 SQL语句的优化

A、索引优化

 1)抓出来慢查询

 百度:白名单的方法,设计程序时候参与设计,程序上线连接数据库,有个控制查库的东西,请示放我库里,才能查询,数据库没有或者减少慢查询。

  给常给开发做培训,DB水平更高。

  现在网站慢了,show full processlist;抓慢查询,连续执行两下。间隔1-2秒,如果还有,怀疑他是慢查询。

日常:把慢查询语句记录到log。

 My.cnf

 Long_query_time=2

 Log_queryies_not_using_indexes

 Log-slow-queries=/data/3306/slow.log

每天生成slow.log,按天切割slow.log,切割以后用分析软件分析(mysqlsla,-pt-query-digest)

Mysqldumpslow,myprofi。优化的语句不一定是单条占用时间长的,频率高单条不长,但是总时间很长的,这些可能也是优化的重点。

运维来讲,慢查询SQL发给开发。

Explain测试语句是否走索引。Set profile深度查看语句执行情况。

检查删除重复的索引,pt-duplicate-key-checker,效率很低的索引检查删除,pt-index-usage

2)尽量不用子查询,用join替代

数据库是存放数据的地方,不是计算数据的地方,计算放在前面Web。搜索功能,like “%daf%”,不用数据库搜索。

3)语句中尽量去掉in or <>

4、网站集群架构上优化数据库

1)   服务器跑多实例2-4个

2)   主从复制最多9个,1主5从,采用mixed,不要跨机房复制(远程写,本地读)

3)   业务拆分:搜索功能,like “%daf%”,不用数据库搜索。

搜索软件:Sphinx,Xapian,Solr

4)   粉丝关注,好关系,统计这类应用比较简单,不用数据,放到redis。

5)   数据库前端加缓存

6)   动态内转静态化(数据库的数据,转成html文件,放到存储上)使用CDN。

7)   数据库采用读写分离,MyCat,atlas,cobar,amoeba,MySQL-proxy

8)   单表超过800万,拆库拆表。自动扩容,自动收缩。

9)   选择从库备份,锁表,备份时间很长,影响数据访问。

10) 备份时采用分表分库。

5、流程、制度、安全:50%的故障都是人为造成的。

1)   操作流程:开发-核心开发—运维或DBA

2)   测试流程:办公室测试-IDC测试-IDC正式

以上关于高并发网站集群场景下如何优化MySQL数据库详细内容,对大家有帮助吗?如果想要了解更多相关,可以继续关注我们的行业资讯板块。

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前标题:高并发网站集群场景下如何优化MySQL数据库-创新互联
文章分享:http://scyanting.com/article/djgepo.html