From:http://www.zzsjk.cn/html/wzyy/sstg/200909/30-25614.html

目前web2.0的程序,很大瓶颈是的吞度量。不过,如何才能确定系统的瓶颈是呢,因为只有确定是整个系统的瓶颈,我们才有必要去优化他,毕竟,还有这么多需求等待我们去做。

  如何确定是瓶颈?

  1 如果程序设计良好,有一个操作逻辑层,可以从这个层的统计数据看到每个请求花费的时间,如果平均时间已经不能让你容忍的话,已经是瓶颈了。

  2 在的服务器上使用top命令,看看mysql服务器占用资源的情况,看看机子的平均负载。

  如果服务器的平均负载已经很高,mysql占用了块100%的cpu资源,说明mysql服务器很忙了。

  3 在服务器上使用iostat命令,看看磁盘IO,如果block住的操作比较多的话,说明操作还是过于频繁了,磁盘都响应不急了。

  4 建议打开mysql的慢查询日志,这样grep select看一下日志中的慢查询的数量,如果数量较多,说明慢查询的数量很多,需要进行调整了。

  5 如果有一天无法插入了,需要检查一下表是不是过大了。32位的操作系统上一个表最大的容量是2^32这么大。不过还是建议增加一个操作的逻辑层,在操作的前后记录下操作的时间,进行统计上报,利用监控程序来报警相关负责人,这样可以及早的知道是瓶颈,提前做出优化。

  知道是瓶颈了,如何来进行优化呢?

  1 我们第一个想到是看看的容量是不是太大了,如果表太大的话,索引文件也会比较大,每次的更新操作就会更加的费时。需要考虑进行分库和分表了。

  分库分表按照一定的规则来对中的记录进行分区来存储,一方面可以做到一定的负载均衡,将请求平分下来,每个区段去独自承受;另一方面,分库分表可以使我们存储和操作更多的数据。

  不过分库分表需要多之前基于单库的程序进行修改,存在一定的风险,因此,在程序设计之初就应该考虑到分库分表的需要,最好是将操作层独立出来,便于扩展和更改。

  2 如果表不是很大,但是查询慢的话,我们需要检查一下我们的sql查询语句,利用mysql的explain语句看看是不是使用了索引,如果没有使用索引,那我们需要在相应的字段上建上索引,反复的使用explain,寻找到个一个合适的索引。

  在建索引时需要考虑:

  1)的索引要做到越少越好。

  因为每次更新都需要更新索引,索引过多就会降低写入的速度。

  2)最窄的字段放在键的左边。

  这样提高了索引中每一个点的基数,带来更好的索引读写性能。

  3)尽量避免file sort排序、临时表和表扫描。

  对于大表,全表扫描会导致大量的磁盘IO的操作,会导致操作非常的缓慢。

  4)对于大表,尽量不要将索引建在字符串类型的列上,字符串的匹配是很费时的,需要付出很高的性能代价,如果一定有必要,建议对字符串列进行hash后取一个整形的值来进行索引。

  3 如果更新操作有点慢,而读操作的响应要求不需要很及时的话,可以考虑利用mysql的主从热备来分担读写的压力。

  毕竟对的操作,写少读多。因此,我们将对的写操作放到mysql的主服务器上,利用mysql的热备,我们在备份的服务器上进行读操作,由于可以有多个热备mysql,于是可以将读操作分布在多个热备上面,从而将读操作均衡开来,提高读操作的性能。

  4 缓存的使用

  缓存是一切后台程序的根本,因为80%的请求是对应20%的数据,我们只需要少量的内存将20%的数据缓存起来,就可以大大的满足我们系统需求,何乐而不为呢。

  1)mysql设置中尽量增加key cache,thread cache、查询的cache。

  2)在应用程序层增加一个memcached这样的通用cache。

  3)对于少量数据,但是操作频繁的表使用mysql提供的内存heap表,可以获得极高的写入和读取速度。

  5 的设计上进行优化

  对于传统的设计我们讲究建模范式,避免数据的冗余从而导致脏数据。然而在我们实际的应用中需要根据情况来使用第三范式的一些规则,对于一些频繁需要在多个地方出现的数据,如同一个论坛这种用户和主题以及回复等有关联的应用中,如果我们将用户同主题和回复分开来存储,每次查询一下一篇文章或者一个回复的情况都需要对用户表和主题表或者回复表进行联查,如果数据量小的话,这样联查的性能还是可以接受的,如果表大一点,上了3、4十万以上的数据,联查的速度就会比较慢了。

  该范式化的地方需要进行范式化,但是还是需要根据情况来设计我们的表,从而达到性能和良好设计的折中。

  其它的话:

  1 对于的操作建议分层处理,至少分为两层,一层是操作的逻辑层,一层是的cache层。

  从一开始就考虑如此,可以很方便在未来对进行划分部署、分库分表扩展。

  2 增加mysql的监控,监控mysql的慢查询日志,监控mysql的请求情况。

  3 根据自己的需要来选择mysql的存储。

  myisam有较高的读写速度,但是由于表锁定,不能同时进行快速的读和写。

  innodb支持事务,提供了行级的锁,但是为了使用事务,表空间会比较大,而且不支持全文索引。

  heap将表放到内存中,适合与表小而需要频繁操作的情况,如用户信息,其读写很快,但是不是持久的,需要自己来写工具让其持久。

  4 mysql服务器的一些状态检测的命令。

  show slave status:可以看到主从同步的情况。

  show [full] processlist:可以看到mysql服务器的请求情况,如果发现lock情况很多,需要注意了。

  show status:可以看到mysql服务器的各种请求情况。

网站整体优化其一:数据库优化同步的情况相关推荐

  1. zabbix mysql优化 my.cnf_zabbix数据库优化之数据库优化(二)

    zabbix数据库优化之数据库优化二 简介 数据库history设置是保存7天.然后如果你没有分区.虽然数据在减少但是表空间不会减少.浪费硬盘空间的同事缓存内的cache部分也没有被释放.分区后可以迁 ...

  2. Android 性能优化之数据库优化(一)

    Android性能优化系列汇总已完成,包括: Android 性能优化实例 Android 性能优化之数据库优化(一) Android 性能优化之布局优化 (二) Android 性能优化之Java( ...

  3. table 条数过大优化_MySQL 数据库优化,看这篇就够了 | 不长不短,2000 字小结

    前言 数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构设计和参数调整,以提高用户的相应速度,同时还要尽可能的节约系统资源,以便让系统提供更大的负荷. 1. 优 ...

  4. oracle的优化适用于mysql吗_性能优化之数据库优化,适用于Sqlite、Mysql、Oracle、Sql server,详细介绍了索引和事务及部分针对Sqlite的优化...

    本文为性能优化的第一篇--数据库性能优化,原理适用于大部分数据库包括Sqlite.Mysql.Oracle.Sql server,详细介绍了索引(优缺点.分类.场景.规则)和事务,最后介绍了部分单独针 ...

  5. 物联网 mysql数据库优化_MySQL数据库优化大全方法汇总-阿里云开发者社区

    随着数据和负载增加,MySQL数据库会日渐缓慢,性能越来越差,用户体验也随之变差,所以数据库性能优化十分紧迫,云吞铺子分享MySQL数据库优化大全: MySQL数据库优化 云吞铺子先模拟一下数据库访问 ...

  6. mysql悲观锁优化_MySQL数据库优化(三)—MySQL悲观锁和乐观锁(并发控制)

    一.悲观锁 1.排它锁,当事务在操作数据时把这部分数据进行锁定,直到操作完毕后再解锁,其他事务操作才可操作该部分数据.这将防止其他进程读取或修改表中的数据. 2.实现:大多数情况下依靠数据库的锁机制实 ...

  7. insert into select 优化_数据库优化总结

    第一部分:SQL语句优化 1.尽量避免使用select *,使用具体的字段代替*,只返回使用到的字段. 2.尽量避免使用in 和not in,会导致数据库引擎放弃索引进行全表扫描. SELECT * ...

  8. 高级mysql数据库优化_MySQL数据库优化建议

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在WHERE及ORDER BY涉及的列上建立索引. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存放在数据 ...

  9. 性能优化之数据库优化

    原文出处:http://www.trinea.cn/android/database-performance/ 1.索引 简单的说,索引就像书本的目录,目录可以快速找到所在页数,数据库中索引可以帮助快 ...

  10. mysql数据库服务器优化_MySQL数据库优化经验详谈(服务器普通配置)

    安装好mysql后,配制文件应该在/usr/local/mysql/share/mysql目录中,配制文件有几个,有my- huge.cnf my-medium.cnf my-large.cnf my ...

最新文章

  1. 部署微软lync uc服务器,lync server xxxx企业版前端服务器部署资料.docx
  2. linux常用命令之lsof 、netstat、ipcs、ldd
  3. Sicily 6768. Log Books 解题报告
  4. Java事件处理机制和适配器
  5. 字典类型处理函数及方法实例解析
  6. 【CodeForces - 190E】Counter Attack (补图bfs,卡常,dsu)
  7. Kava Labs已上线Trust Wallet专用桥接器以提供DeFi产品服务
  8. Tyche 2147 旅行
  9. Java Hook简洁实用教程
  10. PLC控制系统设计的一般步骤是什么?
  11. 食品行业SCM供应链管理平台促进供需协同,赋能产业发展
  12. 7z解压crc错误_7-Zip - 常见问题解答(FAQ)
  13. 文件服务器 软件 开源,5个优秀的开源文件共享软件包 | MOS86
  14. 计算机组成原理学习笔记第1章计算机系统概论 1.1——冯 · 诺依曼结构计算机工作原理及层次结构分析
  15. 有选择的忽略PyCharm 3的PEP8语言风格警告提示信息
  16. photoshop cc 2018破解补丁(pscc2018注册机) 附使用方法
  17. 布线时排阻(IC)管脚交换步骤
  18. 《数据库原理与应用》实验一
  19. 品•文案——聊聊产品文案优化设计
  20. 职业生涯规划中的刺猬理念

热门文章

  1. cudaMemcpy() 犯错误
  2. 计算机里的取整函数,excel取整函数的使用
  3. 互联网公司MySQL常用分库分表方案总结
  4. java solid设计原则_设计模式之SOLID原则
  5. 27. 处理网站验证码:处理网站登录验证码(selenium+破解工具)
  6. 网络流初步最大流(EK算法和Dinic算法进阶)
  7. Tita绩效宝:33个按技能划分的绩效考核评语(附案例)
  8. android6.0中app crash流程分析
  9. hsf 架构_分布式服务框架HSF
  10. 移动WiFi大比拼 谁会成为独角兽