`
liudaoru
  • 浏览: 1578920 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多

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服务器的各种请求情况。

分享到:
评论

相关推荐

    kettle同步数据库所有的表数据到其他库.rar

    本示例中的"Kettle同步数据库所有的表数据到其他库.rar"是一个具体的应用场景,即利用Kettle将一个数据库的所有表数据同步到另一个具有相同表结构的数据库中。这里,我们不仅讨论如何实现这个功能,还将深入探讨...

    多数据库数据同步系统

    总结来说,“多数据库数据同步系统”是一个能够整合MySQL、Oracle、SQL Server和Sybase等多种数据库的解决方案,它解决了数据集成中的诸多挑战,如跨平台兼容性、数据转换、冲突处理和性能优化等。通过这样的系统,...

    数据库性能优化工具文档

    导航栏是整个工具的核心组成部分之一,提供了多个用于优化数据库性能的功能选项: - **数据库基本对象**:展示数据库中的基本结构元素,例如表、字段、索引和外键等。 - **性能优化**:包括数据库层面的优化操作,...

    大型网站数据库优化大型网站数据库优化.docx

    总之,大型网站数据库优化是一个综合性的工程,涉及到程序优化、数据库设计、网络配置、负载均衡和集群等多个层面。只有全面考虑并精细调整这些环节,才能构建出能够应对大规模并发访问的高效网站。

    MySQL数据库:数据库高可用与容灾方案

    - **应用场景**:对于数据库而言,这意味着即便面临硬件故障、网络中断或软件错误等情况,系统也能确保数据的完整性和服务的连续性。 - **价值体现**:对企业级应用来说尤为重要,因为任何数据丢失或服务中断都会...

    《数据库优化与集成之实战和效果 郑保卫》PDF课件

    《数据库优化与集成之实战和效果》是由郑保卫编著的一本关于数据库管理与优化的专业教材,主要针对数据库系统在实际应用中的性能提升和不同数据库的整合策略进行深入探讨。PDF课件形式使得读者可以方便地在线学习或...

    java及数据库性能优化

    在Java和数据库性能优化方面,有许多关键点需要关注,以提高系统的整体效能和响应速度。以下是基于标题和描述中的内容进行的详细解释: 1. **Java性能优化设计基础**: - **对象生成与大小调整**:尽量避免频繁...

    62 案例实战:线上数据库不确定性的性能抖动优化实践(上)l.pdf

    标题《62 案例实战:线上数据库不确定性的性能抖动优化实践(上)》和描述暗示了本文档将重点探讨在实际应用中,线上数据库由于执行更新操作而引起性能不稳定性(性能抖动)的问题,并且提供了优化策略。 在数据库...

    MySQL数据库实时增量同步工具源代码.zip

    综上所述,MySQL数据库实时增量同步工具源代码的分析和利用对于数据库管理员和开发者来说,是一次深入学习和优化数据库管理策略的好机会,同时也为实现高效、可靠的分布式数据系统提供了可能。通过理解和改进源代码...

    分布式数据库同步论文

    本文详细介绍了一个分布式数据库系统中的事务同步模型及其并发控制方法。通过对并发控制问题的分解,提出了针对读-写同步和写-写同步的具体解决方案,并探讨了各种同步技术和算法的优缺点。这种分布式事务处理模型...

    数据库同步过程中如何解决大字段的同步

    - 延迟同步:对于不频繁变更的大字段,可以设置为延迟同步,避免每次更新都同步整个大字段。 - 压缩传输:在传输前对大字段进行压缩,减少网络负载,提高同步速度。 - 批量处理:批量处理大字段的更新,降低...

    数据库同步过程中一致性和完整性的保证

    在IT行业中,数据库同步是一个关键任务,特别是在分布式系统和数据仓库环境中。确保数据一致性与完整性是这个过程的核心,因为这关系到系统的可靠性和业务的正常运行。本文将深入探讨如何在数据库同步过程中保证这两...

    数据库同步检测+软件更新

    这可能是通过一个后台服务或定时任务实现的,持续监控数据库状态和软件版本,确保系统的持续优化和安全。这样的解决方案对于企业级应用尤其重要,因为它可以有效防止数据丢失,减少由于软件过时导致的安全漏洞,提高...

    Oracle专家白鳝 从一个案例看性能优化与系统优化.pdf

    从上述提供的文件内容中,我们可以提取出以下知识点: ...在实际工作中,这些知识点可以帮助数据库管理员和系统工程师诊断问题、分析性能瓶颈,并提供针对性的优化措施,以提升系统的整体运行效率和稳定性。

    基于XML的关系数据库同步技术的研究与实现

    关系数据库同步技术是确保多数据源之间数据一致性和完整性的关键技术,特别是在分布式...然而,随着数据量的增长和同步需求的复杂化,如何进一步优化同步策略、降低延迟、提高数据一致性,仍然是该领域的重要研究课题。

    数据库一致性同步1

    MySQL 数据库复制是一种重要的高可用性和灾难恢复策略,它通过实时同步数据,确保在主数据库(master)和从数据库(slave)之间保持一致性。主从复制的主要目标是防止宕机导致的数据丢失,同时也能分散数据库服务器...

    使用数据库使用数据库.ppt

    本文将深入探讨数据库管理系统(DBMS)的使用以及它们相较于手工管理信息的优势,并通过具体的应用实例来阐述其价值。 一、数据库管理与手工管理信息的比较分析 1. 组织结构:数据库管理采用结构化的方法,数据以...

    分布式数据库同步节点优化方法研究与仿真.pdf

    分布式数据库的同步节点优化,是指在分布式系统中,针对数据同步过程,采用特定策略和算法以提高节点选择的准确性与可靠性,保证数据一致性、系统稳定性和提升整体性能。本文将详细探讨分布式数据库同步节点优化方法...

Global site tag (gtag.js) - Google Analytics