大型网站MySQL深度优化揭秘 2

学无止境,老男孩教育成就你人生的起点!

相信自己相信老男孩!!!

老男孩-51cto-公开课-大型网站MySQL深度优化揭秘
部分整理有没跟上的抱歉

?



大型网站MySQL深度优化揭秘????2

第1章
优化的思路和线路????2

1.1 网站优化的思路????2

1.2 MySQL优化,nginx这样的东西怎么优化?????2

第2章
硬件层面优化????3

2.1 数据库物理机????3

2.1.1 CPU????3

2.1.2 Memory????3

2.1.3 disk(磁盘IO)????3

2.1.4 RAID阵列????3

2.1.5 网卡????3

2.1.6 案例????4

2.2 硬件调整????4

2.2.1 BIOS调整提高CPU性能????4

2.2.2 阵列卡调整????4

第3章
软件层面优化????4

3.1 操作系统????4

3.2 文件系统层优化????5

3.3 内核层面优化????5

第4章 MySQL层面优化????5

4.1 my.cnf参数的优化????6

4.2 库和表的设计优化????6

4.3 SQL语句的优化????7

4.3.1 抓出来慢查询????7

4.3.2 每天生成slow.log????7

4.3.3 尽量不用子查询,用join替代????8

第5章
网站集群架构上来优化数据库????8

5.1 服务器跑多实例2-4个????8

5.2 业务拆分:????8

5.3 数据库前端加缓存????8

5.4 备份策略????9

第6章
流程
制度
安全????9

?

?

大型网站MySQL深度优化揭秘

  1. 优化的思路和线路

  2. 网站优化的思路

解答:从用户打开浏览器,到返回网页内容这个过程优化每一个细节

  1. MySQL优化,nginx这样的东西怎么优化?

建议:根据OSI 7层模型,从下到上。。。以这个为线路

  1. 硬件层面优化

  2. 数据库物理机

    1. CPU

64位的CPU,服务器2-16,CPU 一般2-4颗 L1,L2越大越好

  1. Memory

48G-96G-128G-256G

48G 2-3个实例

96G 3-4个实例

  1. disk(磁盘IO)

数据库是IO密集应用

  1. 机械盘

SAS(不选择SATA),300G*12块,磁盘数量越多IO越高,SAS 15k的硬盘

  1. SSD????

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

  1. RAID阵列

选硬件 RAID (0>10>5>1)

  1. 网卡

至少千兆(bond), 万兆交换机

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

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

从库会接替主库,从库配置太低,导致延迟

  1. 案例

百度:IBM服务器,内存96G-128G, CPU48核心

SINA:dell r510 内存48G,磁盘300*12块, RAID10

  1. 硬件调整

    1. BIOS调整提高CPU性能

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

启动Node Interleaving避免NUMA问题

关闭C1E和State等

  1. 阵列卡调整

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

写策略(always write back)

不要用(wt)策略

关闭阵列预读策略

  1. 软件层面优化

  2. 操作系统

选择x86_64位系统

系统盘和数据盘分开

极端情况下不分swap分区

避免使用操作系统的软raid

避免使用LVM

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

  1. 文件系统层优化

调整Cache mode

启动wce=1(Write Cache Enable)

RCD=0(Read Cache Disable)

系统调度算法默认cfq(比较中庸),数据库选择noop,deadline.针对deadline可以调节参数(内核参数)

Centos 6.8 默认ext4可以作为数据库的文件系统,房屋呢量大的话,XFS就更好

Centos7默认也选择了XFS,调整XFS日志,缓冲参数.

mount参数很重要 –o async,noatime,nodirname,nobarrier等

  1. 内核层面优化

参考链接:http://oldboy.blog.51cto.com/2561410/1336488

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

vm.dirty_background_ratio设置5-10,vm.dirty_ratio设置前面的2倍.持续将系统数据刷到磁盘.

参考链接:http://blog.sina.com.cn/s/blog_448574810101k1va.html

减少time_wait

net.ipv4.tcp_tw_recyle=1,net.ipv4.tcp_tw_reuse=1,

net.ipv4.tcp_fin_timeout=2,net.ipv4.tcp_keepalived_time=600

  1. MySQL层面优化

参考链接:http://oldboy.blog.51cto.com/2561410/1726517

  1. my.cnf参数的优化

如果我们采用myisam引擎,key_buffer_size加大.采用innodb

推荐使用innodb, 5.5.5以后默认都是innodb引擎

innodb_buffer_pool_size, 调整为内存的50%,单实例.多实例各25%

innodb_flush_log_at_trx_commit, sync_binlog, 设置为1, 数据可以丢失的话(不重要),可以设置为0, 从库都设置为0,事物的log,多长时间刷入到硬盘里

使用独立表空间. innodb_file_per_table=1. 默认共享表文件效率低

innodb_log_file_size=256M 不要给过大

log_query_time=1 ,log的日志查询,超过1秒的SQL语句,记录到日志里,回头看这个日志,进行优化.

一些session参数,不要设置过大,一个连接就会占用参数设置的大小.不要给过大

Sort_buffer_size, join_buffer_size,read_buffer_size,tmp_table_size,max_heap_table_size这类参数都是session,级别参数.2M6M8M就可以了.

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

  1. 库和表的设计优化

字符集UTF-8

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

数据库都要给一个自增的主页,没什么用途.

字段长度,在满足要求前提下,最短的.Varchar(16)

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

尽可能不用text/blob比较大的字段类型(博文帖子),如果使用的话,可以放到子表里

一般针对字段索引,尽量采用字段的前N个字符索引,不要整个字段索引,效率低

多用联合索引,有前缀特性,少用独立索引,性别列,不要建立索引了.效果差

  1. SQL语句的优化

索引优化(运维最常用的)

  1. 抓出来慢查询

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

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

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

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

my.cof

long_query_time=2 超过两秒的查询

log_queryies_not_using_indexes没有超过两秒没有走索引

log_slow_queries=/data/3306/slow.log

  1. 每天生成slow.log

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

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

对于运维来讲,慢查询SQL发给开发.

有能力和开发一起搞

用explain测试语句是否走索引,set profile深度查看语句执行情况.

检查删除重复的索引,工具pt-duplicate-key-checker

效率很低的索引,检查删除,pt-index-usage工具

  1. 尽量不用子查询,用join替代

数据库是存放数据的地方,不是计算数据的地方,计算放在web

搜索功能,like "%daf%",不用数据库搜索

在语句中尽量去掉in or <> 字符

  1. 网站集群架构上来优化数据库

参考链接:http://oldboy.blog.51cto.com/2561410/775056

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

    主从复制最多9个,建议1主5从, 主库采用mixed模式,不要跨机房复制(如果是,远程写,本地读

  2. 业务拆分:

    搜索功能,like "%daf%",不用数据库搜索

    搜索软件:Sphinx,Xapian,Solr

    粉丝关注,好关系,统计这类应用比较简单,不用数据库,放到redis(想要持久haunted)

  3. 数据库前端加缓存

    动态内容转静态化(数据库的数据,转成html文件,放到存储上),好处就是可以使用CDN缓存

    数据库采用读写分离,读从库,写主库.

    相关软件:MyCat,atlas,cobar,amoeba,MySQL-proxy

    单表超过800W,拆库拆表,自动扩容,自动收缩.

  4. 备份策略

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

    备份时采用分表分库,不分非常费劲.

  5. 流程 制度 安全

    50%的故障都是人为造成的.

    操作流程:开放-->核心开发-->运维或DBA

    测试流程:办公室测试-->IDC测试环境测试-->生产环境

时间: 2024-10-21 22:40:40

大型网站MySQL深度优化揭秘 2的相关文章

[转]大型网站架构的优化与架构演变(整理)

=============大型网站架构的优化===================== 一个小型的网站,比如个人 网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简 单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬 件到软件.编程语言.数据库.WebServer.防火墙等各个领域都有了很高的要求,已经不是原来简

中大型网站静态资源优化及存储

静态资源优化: 合并 减少http请求有这样几个优点: (1) 减少DNS请求所耗费的时间 (2) 减少服务器压力(CPU,IO) (3) 减少http请求头(当我们对服务器发起一个请求的时候,我们会携带着这个域名下的cookie和一些其他的信息在http头部里,然后服务器响应请求的时候也会带回一些cookie之类的头部信息.这些信息有的时候会很大,在这种请求和响应的时候会影响带宽性能) 合并请求: lvmama首页 <link rel="stylesheet" href=&qu

大型网站架构-性能优化

性能调优 硬件优化 cpu  主频高.更多核CPU  http://product.pconline.com.cn/hot/server_cpu/   E3->i7处理器 内存  主频高.内存量大,ECC内存可以容错,奇偶校验,支持热拔插 磁盘  raid(磁盘阵列,数据同时保存到多块磁盘中速度提升,备份容错).ssd(新的技术,固态硬盘,不用磁头,读写速度很快,成本高一些) 网卡  100M网卡指的是数据流,单位比特bite,1Byte字节=8bite比特,100M/8=12.5M字节/s秒

大型网站--前端性能优化和规范

Web性能涉及的范围太广,但一般web开发者在程序上线以后很多都曾遇到过性能的问题.普遍表现为页面速度开始急剧变慢,正常访问时间变的很长,或则干脆给你抛出异常错误页面.这里会涉及到很多可能发生的情况,举例几个最主要发生的情况: * 数据库连接超过最大限制,一般表现为程序的连接池满,拒绝了与数据库的连接. * 数据库死锁 * Web Server 超过最大连接数(一般在虚拟主机上才会限制) * 内存泄漏 * Http连接数太多,即访问量超过了机器和软件设计正常所能提供的服务 而今天分享的主要是比较

大型网站Mysql的演变史 (转)

版权声明:本文为Sunface原创文章,请随意转载,若有需要敬请联系[email protected].同时欢迎大家加入Go语言隐修会,网站corego.org(还在制作中),QQ群894864. 目录(?)[+] 可扩展性 可扩展性的理想状态 架构的演变 V10  简单网站架构 V20 垂直拆分 V30  主从架构 V40  水平拆分 数据如何路由 Range拆分 List拆分 Hash拆分 数据拆分后引入的问题 V50  云计算 腾飞云数据库 写在最前: 本文主要描述在网站的不同的并发访问量

1.1:大型网站的主要参数

0x01 静态化,缓存,针对数据库进行优化,针对网站如何进行优化,使用过redis么?数据库优化措施等等 0x02 静态化:网站静态化,大型网站如何进行优化,优化措施,什么样的网站才算大型网站?参数:PV值,UV值,独立IP,靠这几个参数查看网站大小 PV值:网站的浏览量,指一个网站的所有页面,在一天24H内被访问的总次数.没有严格区分,上百万级别可以称之大型网站. UV值:(unique vistor)一个网站,在一天24H内,有多少用户来访问我们的网站.百万级别以上属于大型网站. 独立IP:

大型网站优化-memcache技术

大型网站优化-memcache技术 memory+cache 内存缓存 memcache简介 memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的.需要频繁访问数据库的网站访问速度提升效果十分显著 .这是一套开放源代码软件,以BSD license授权发布.[摘取自百度百科] 官网:http://memcached.org/ 分布式:多台Memcache服务器来管理数据的架构. 缓存

腾讯云数据库团队:浅谈如何对MySQL内核进行深度优化

作者介绍:简怀兵,腾讯云数据库团队高级工程师,负责腾讯云CDB内核及基础设施建设:先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利:从事MySQL内核开发工作8年,具有丰富的优化经验:在分布式存储等领域有较丰富经验. MYSQL数据库适用场景广泛,相较于Oracle.DB2性价比更高,Web网站.日志系统.数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务型).存在多个分支.读写效

大型网站优化-

目录 一.判断大型网站的标准:????1 1.pv(page views)网页的浏览量:????1 2.uv值(unique vistor)独立访客????1 3.独立ip,????1 二.大型网站带来的一些问题.????1 1.大的并发.????1 2.大流量.????2 3.大的存储,????2 三.大并发的解决方案:????2 1.负载均衡器:????2 2.负载均衡实现的方式:????3 3.集群:????3 四.大流量解决方案:????3 1.防止我们的网站资源被盗链.????3 2.